8個讓Python代碼效率翻倍的簡單技巧
一、變量交換還在用第三個變量?老鐵你Out啦!
還在這樣寫變量交換嗎?
# 老掉牙的寫法 temp = a a = b b = temp
學會這招,一行代碼搞定:
# 運行一下試試:
a, b = 3, 5
print(f"交換前:a={a}, b=")
a, b = b, a # 這行就夠了!
print(f"交換后:a={a}, b=")
二、批量處理文件還在用for循環(huán)?列表推導式一把梭!
有一堆文本文件要改名,你可能會這么寫:
# 老式寫法
new_names = []
for name in files:
if name.endswith('.txt'):
new_names.append(name.replace('.txt', '.md'))
試試這個一行代碼的魔法:
# 來測試一下:
files = ['筆記1.txt', '筆記2.txt', '照片.jpg']
new_names = [name.replace('.txt', '.md') for name in files if name.endswith('.txt')]
print(f"處理后的文件名:{new_names}")
三、字典取值總怕報錯?dict.get()來幫你!
看到這種代碼就頭大:
# 容易出錯的寫法
try:
value = user_data['age']
except KeyError:
value = 0
一行代碼搞定,還能自定義默認值:
# 實戰(zhàn)體驗:
user_data = {'name': '小明'}
age = user_data.get('age', 18) # 找不到就返回18
print(f"用戶年齡:{age}")
四、用枚舉類型讓代碼更優(yōu)雅
看到這種代碼就想罵人:
# 各種魔法數(shù)字,看得頭暈
if user_status == 0:
print("未注冊")
elif user_status == 1:
print("已注冊")
elif user_status == 2:
print("已認證")
來看看優(yōu)雅的寫法:
from enum import Enum
class UserStatus(Enum):
UNREGISTERED = 0
REGISTERED = 1
VERIFIED = 2
# 實際使用起來很清晰
status = UserStatus.REGISTERED
print(f"用戶狀態(tài):{status.name}")
五、條件判斷太多?字典映射來救場!
這種代碼看著就煩:
if grade >= 90:
level = "A"
elif grade >= 80:
level = "B"
elif grade >= 70:
level = "C"
else:
level = "D"
用字典映射,既優(yōu)雅又高效:
# 實戰(zhàn)測試:
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分的等級:{get_level(85)}")
六、處理JSON數(shù)據(jù)還在手動解析?
別再這樣寫了:
# 又臭又長的老寫法 name = data['user']['profile']['name']
學會這個神器:
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)
# 實戰(zhàn)一下:
data = {
'user': {
'profile': {
'name': '張三',
'age': 25
}
}
}
name = deep_get(data, 'user.profile.name')
print(f"用戶名:{name}")
七、文件處理的正確姿勢
不要再這樣寫了:
f = open('data.txt', 'r')
# 處理文件
f.close() # 經(jīng)常忘記關(guān)閉
用上下文管理器,既安全又優(yōu)雅:
# 實戰(zhàn)演示:
with open('demo.txt', 'w') as f:
f.write('這才是正確的打開方式!')
print("文件已自動關(guān)閉,無需擔心!")
八、函數(shù)參數(shù)還在傻傻寫默認值?
這種寫法太業(yè)余了:
def create_user(name, age=None, city=None, hobby=None):
if age is None:
age = 18
if city is None:
city = "北京"
# ...更多判斷
用字典解包,代碼立馬高級起來:
def create_user(**kwargs):
defaults = {
'age': 18,
'city': '北京',
'hobby': '編程'
}
params = {**defaults, **kwargs}
return params
# 測試一下:
user1 = create_user(name='小明')
user2 = create_user(name='小紅', age=20)
print(f"用戶1:{user1}")
print(f"用戶2:{user2}")
最后說兩句:
這些技巧不是為了裝逼,是為了寫出更簡潔、更健壯的代碼。建議大家先pick一兩個最感興趣的,在實際項目中多嘗試,慢慢就能體會到其中的妙處。
到此這篇關(guān)于8個讓Python代碼效率翻倍的簡單技巧的文章就介紹到這了,更多相關(guān)Python代碼優(yōu)化技巧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?+?Tkinter連接本地MySQL數(shù)據(jù)庫簡單實現(xiàn)注冊登錄
這篇文章主要介紹了Python?+?Tkinter連接本地MySQL數(shù)據(jù)庫簡單實現(xiàn)注冊登錄。下面文章著情介紹,需要的小伙伴可以參考一下2022-01-01
Python把csv數(shù)據(jù)寫入list和字典類型的變量腳本方法
今天小編就為大家分享一篇Python把csv數(shù)據(jù)寫入list和字典類型的變量腳本方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python基于xlutils修改表格內(nèi)容過程解析
這篇文章主要介紹了Python基于xlutils修改表格內(nèi)容過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07
Python爬蟲Xpath定位數(shù)據(jù)的兩種方法
這篇文章主要介紹了Python爬蟲Xpath定位數(shù)據(jù)的方法,第一種方法直接右鍵,將文章路徑復制下來點擊Copy?full?Xpath,方法二使用@制定標簽屬性,搜索指定位置,每種方法給大家介紹的非常詳細,需要的朋友可以參考下2022-07-07
django 實現(xiàn)celery動態(tài)設(shè)置周期任務執(zhí)行時間
今天小編就為大家分享一篇django 實現(xiàn)celery動態(tài)設(shè)置周期任務執(zhí)行時間,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
PHP webshell檢查工具 python實現(xiàn)代碼
Web安全應急響應中,不免要檢查下服務器上是否被上傳了webshell,手工檢查比較慢,就寫了個腳本來檢查了。Windows平臺下已經(jīng)有了lake2寫的雷克圖的了,一般的檢查也夠用了,寫了個Linux下面的,用python寫的。2009-09-09

