8個(gè)讓Python代碼效率翻倍的簡(jiǎn)單技巧
一、變量交換還在用第三個(gè)變量?老鐵你Out啦!
還在這樣寫(xiě)變量交換嗎?
# 老掉牙的寫(xiě)法 temp = a a = b b = temp
學(xué)會(huì)這招,一行代碼搞定:
# 運(yùn)行一下試試:
a, b = 3, 5
print(f"交換前:a={a}, b=")
a, b = b, a # 這行就夠了!
print(f"交換后:a={a}, b=")
二、批量處理文件還在用for循環(huán)?列表推導(dǎo)式一把梭!
有一堆文本文件要改名,你可能會(huì)這么寫(xiě):
# 老式寫(xiě)法
new_names = []
for name in files:
if name.endswith('.txt'):
new_names.append(name.replace('.txt', '.md'))
試試這個(gè)一行代碼的魔法:
# 來(lái)測(cè)試一下:
files = ['筆記1.txt', '筆記2.txt', '照片.jpg']
new_names = [name.replace('.txt', '.md') for name in files if name.endswith('.txt')]
print(f"處理后的文件名:{new_names}")
三、字典取值總怕報(bào)錯(cuò)?dict.get()來(lái)幫你!
看到這種代碼就頭大:
# 容易出錯(cuò)的寫(xiě)法
try:
value = user_data['age']
except KeyError:
value = 0
一行代碼搞定,還能自定義默認(rèn)值:
# 實(shí)戰(zhàn)體驗(yàn):
user_data = {'name': '小明'}
age = user_data.get('age', 18) # 找不到就返回18
print(f"用戶年齡:{age}")
四、用枚舉類(lèi)型讓代碼更優(yōu)雅
看到這種代碼就想罵人:
# 各種魔法數(shù)字,看得頭暈
if user_status == 0:
print("未注冊(cè)")
elif user_status == 1:
print("已注冊(cè)")
elif user_status == 2:
print("已認(rèn)證")
來(lái)看看優(yōu)雅的寫(xiě)法:
from enum import Enum
class UserStatus(Enum):
UNREGISTERED = 0
REGISTERED = 1
VERIFIED = 2
# 實(shí)際使用起來(lái)很清晰
status = UserStatus.REGISTERED
print(f"用戶狀態(tài):{status.name}")
五、條件判斷太多?字典映射來(lái)救場(chǎng)!
這種代碼看著就煩:
if grade >= 90:
level = "A"
elif grade >= 80:
level = "B"
elif grade >= 70:
level = "C"
else:
level = "D"
用字典映射,既優(yōu)雅又高效:
# 實(shí)戰(zhàn)測(cè)試:
grade_map = {
lambda x: x >= 90: "A",
lambda x: 80 <= x < 90: "B",
lambda x: 70 <= x < 80: "C",
lambda x: x < 70: "D"
}
def get_level(score):
return next(v for k, v in grade_map.items() if k(score))
print(f"85分的等級(jí):{get_level(85)}")
六、處理JSON數(shù)據(jù)還在手動(dòng)解析?
別再這樣寫(xiě)了:
# 又臭又長(zhǎng)的老寫(xiě)法 name = data['user']['profile']['name']
學(xué)會(huì)這個(gè)神器:
from functools import reduce
from operator import getitem
def deep_get(dictionary, keys, default=None):
return reduce(lambda d, key: d.get(key, default) if isinstance(d, dict) else default,
keys.split('.'), dictionary)
# 實(shí)戰(zhàn)一下:
data = {
'user': {
'profile': {
'name': '張三',
'age': 25
}
}
}
name = deep_get(data, 'user.profile.name')
print(f"用戶名:{name}")
七、文件處理的正確姿勢(shì)
不要再這樣寫(xiě)了:
f = open('data.txt', 'r')
# 處理文件
f.close() # 經(jīng)常忘記關(guān)閉
用上下文管理器,既安全又優(yōu)雅:
# 實(shí)戰(zhàn)演示:
with open('demo.txt', 'w') as f:
f.write('這才是正確的打開(kāi)方式!')
print("文件已自動(dòng)關(guān)閉,無(wú)需擔(dān)心!")
八、函數(shù)參數(shù)還在傻傻寫(xiě)默認(rèn)值?
這種寫(xiě)法太業(yè)余了:
def create_user(name, age=None, city=None, hobby=None):
if age is None:
age = 18
if city is None:
city = "北京"
# ...更多判斷
用字典解包,代碼立馬高級(jí)起來(lái):
def create_user(**kwargs):
defaults = {
'age': 18,
'city': '北京',
'hobby': '編程'
}
params = {**defaults, **kwargs}
return params
# 測(cè)試一下:
user1 = create_user(name='小明')
user2 = create_user(name='小紅', age=20)
print(f"用戶1:{user1}")
print(f"用戶2:{user2}")
最后說(shuō)兩句:
這些技巧不是為了裝逼,是為了寫(xiě)出更簡(jiǎn)潔、更健壯的代碼。建議大家先pick一兩個(gè)最感興趣的,在實(shí)際項(xiàng)目中多嘗試,慢慢就能體會(huì)到其中的妙處。
到此這篇關(guān)于8個(gè)讓Python代碼效率翻倍的簡(jiǎn)單技巧的文章就介紹到這了,更多相關(guān)Python代碼優(yōu)化技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)3行代碼解簡(jiǎn)單的一元一次方程
這篇文章主要介紹了Python實(shí)現(xiàn)3行代碼解簡(jiǎn)單的一元一次方程,很適合Python初學(xué)者學(xué)習(xí)借鑒,需要的朋友可以參考下2014-08-08
基于Python實(shí)現(xiàn)的通用小規(guī)模搜索引擎
這篇文章主要介紹了基于Python實(shí)現(xiàn)的通用小規(guī)模搜索引擎,文中代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-01-01
Python內(nèi)置函數(shù)int()用法簡(jiǎn)單介紹
這篇文章主要給大家介紹了關(guān)于Python內(nèi)置函數(shù)int()用法的相關(guān)資料,int()函數(shù)常用來(lái)把其他類(lèi)型轉(zhuǎn)換為整數(shù),文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-05-05
windows server 2008 r2 標(biāo)準(zhǔn)版安裝python環(huán)境
本文主要介紹了windows server 2008 r2 標(biāo)準(zhǔn)版安裝python環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Python實(shí)現(xiàn)批量修改文件名實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)批量修改文件名的方法,實(shí)例分析了兩種實(shí)現(xiàn)批量修改文件名的技巧,涉及os.rename重命名方法、正則替換及字符串操作的相關(guān)技巧,需要的朋友可以參考下2015-07-07

