15個高級Python技巧提高代碼效率更加Pythonic
使用列表推導(dǎo)式簡化代碼
列表推導(dǎo)式提供了簡潔而優(yōu)雅的方法。它們通??梢匀〈鷤鹘y(tǒng)的循環(huán)和條件語句,從而使代碼更簡潔、更易讀。但是這里不建議把列表推導(dǎo)式寫的過于復(fù)雜,畢竟代碼是寫給人看的,之后才是讓機器閱讀的。
# 普通的寫法
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
squared_numbers.append(num ** 2)
# 使用列表推導(dǎo)式
squared_numbers = [num ** 2 for num in numbers]利用生成器表達式提高內(nèi)存效率
與列表推導(dǎo)式類似,生成器表達式允許你以簡潔的方式創(chuàng)建迭代器。主要區(qū)別在于,生成器表達式不會在內(nèi)存中存儲整個序列,因此更節(jié)省內(nèi)存。
使用小括號代替方括號創(chuàng)建生成器表達式:
# 列表推導(dǎo)式 squared_numbers = [num ** 2 for num in numbers] # 生成器表達式 squared_numbers = (num ** 2 for num in numbers)
學(xué)會使用 enumerate() 函數(shù)
當需要遍歷一個可迭代元素并計劃使用每個元素的索引時,enumerate() 函數(shù)就派上用場了。它返回一個包含索引和相應(yīng)元素的元組迭代器。下面是一個例子:
# 列表推導(dǎo)式 squared_numbers = [num ** 2 for num in numbers] # 生成器表達式 squared_numbers = (num ** 2 for num in numbers)
使用 join() 簡化字符串連接
使用 + 運算符連接字符串的效率可能會很低,尤其是在處理大字符串或多個字符串連接時。相反,使用 join() 方法可以高效地連接多個字符串,這個方法我個人也經(jīng)常在用,而且用列表拼接字符串時,編寫會更加靈活:
fruits = ['apple', 'banana', 'cherry'] combined_fruits = ', '.join(fruits) print(combined_fruits) # Output: apple, banana, cherry
利用 zip() 函數(shù)進行并行迭代
通過 zip() 函數(shù),可以并行遍歷多個可遍歷數(shù)。它將多個迭代作為輸入,并返回一個迭代器,該迭代器產(chǎn)生的元組包含來自每個迭代的元素。下面是一個示例:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 32, 40]
for name, age in zip(names, ages):
print(f"Name: {name}, Age: {age}")使用 collections.defaultdict 簡化字典默認值
collections 模塊提供了一個名為 defaultdict 的便捷類,它是內(nèi)置 dict 類的子類。如果鍵值不存在,它會自動為其指定默認值,從而省去了顯式檢查。下面是一個例子:
from collections import defaultdict
fruit_counts = defaultdict(int)
fruits = ['apple', 'banana', 'cherry', 'banana']
for fruit in fruits:
fruit_counts[fruit] += 1
print(fruit_counts)
# Output: {'apple': 1, 'banana': 2, 'cherry': 1}巧用 any() 和 all() 函數(shù)
any() 和 all() 函數(shù)在處理可迭代數(shù)據(jù)結(jié)構(gòu)時非常有用。如果可迭代數(shù)據(jù)結(jié)構(gòu)中至少有一個元素為 True,則 any() 函數(shù)返回 True,而 all() 函數(shù)只有在所有元素都為 True 時才返回 True。下面是一個例子:
numbers = [1, 2, 3, 4, 5] print(any(num > 3 for num in numbers)) # Output: True print(all(num > 3 for num in numbers)) # Output: False
使用 collections.Counter 對元素進行計數(shù)
collections.Counter 類提供了一種方便的方法來對可迭代表中的元素進行計數(shù)。它返回一個類似字典的對象,其中元素是鍵,計數(shù)是值。下面是一個示例:
from collections import Counter
fruits = ['apple', 'banana', 'cherry', 'banana']
fruit_counts = Counter(fruits)
print(fruit_counts)
# Output: Counter({'banana': 2, 'apple': 1, 'cherry': 1})用 @staticmethod 和 @classmethod 裝飾函數(shù)
@staticmethod 裝飾器允許你在類中定義靜態(tài)方法。這些方法不能訪問實例或類本身,但可以在不實例化對象的情況下調(diào)用。同樣,@classmethod 裝飾器定義的方法的第一個參數(shù)是類本身,而不是實例。下面是一個例子:
class MathUtils:
@staticmethod
def square(x):
return x ** 2
@classmethod
def cube(cls, x):
return x ** 3
print(MathUtils.square(3)) # Output: 9
print(MathUtils.cube(3)) # Output: 27利用 slots 減少內(nèi)存使用量
Python 默認將實例屬性存儲在字典中,這會消耗大量內(nèi)存,尤其是在創(chuàng)建許多實例時。然而,您可以使用 slots 屬性來告訴 Python 為一組固定的實例變量分配內(nèi)存,從而減少內(nèi)存使用量。下面是一個例子:
class Point:
__slots__ = ['x', 'y']
def __init__(self, x, y):
self.x = x
self.y = y這樣就限定了屬性只有 x 和 y,如果嘗試綁定其他屬性便會報 AttributeError 錯誤。
使用 contextlib.suppress 忽略異常
contextlib.suppress 上下文管理器可以方便地忽略代碼塊中出現(xiàn)的特定異常。它有助于避免不必要的 try-except 代碼塊,并保持代碼的整潔。下面是一個示例:
from contextlib import suppress
with suppress(FileNotFoundError):
with open('file.txt', 'r') as file:
contents = file.read()以上就是15個高級Python技巧提高代碼效率更加Pythonic。的詳細內(nèi)容,更多關(guān)于Python Pythonic高效代碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pytorch pth 格式轉(zhuǎn)ONNX 格式的詳細過程
PyTorch 訓(xùn)練的模型,需要在Jetson nano 上部署,jetson 原生提供了TensorRT 的支持,所以一個比較好的方式是把它轉(zhuǎn)換成ONNX 格式,然后在通過ONNX 轉(zhuǎn)換成TensorRT 格式,這篇文章主要介紹了Pytorch pth 格式轉(zhuǎn)ONNX 格式,需要的朋友可以參考下2023-05-05
Python?matplotlib實現(xiàn)折線圖的繪制
Matplotlib作為Python的2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形。本文將利用Matplotlib庫繪制折線圖,感興趣的可以了解一下2022-03-03
pandas實現(xiàn)datetime64與unix時間戳互轉(zhuǎn)
這篇文章主要介紹了pandas實現(xiàn)datetime64與unix時間戳互轉(zhuǎn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Python使用signal定時結(jié)束AsyncIOScheduler任務(wù)的問題
這篇文章主要介紹了Python使用signal定時結(jié)束AsyncIOScheduler任務(wù),在使用aiohttp結(jié)合apscheduler的AsyncIOScheduler模擬定點并發(fā)的時候遇到兩個問題,針對每個問題給大家詳細介紹,需要的朋友可以參考下2021-07-07
Python使用Numpy實現(xiàn)Kmeans算法的步驟詳解
將物理或抽象對象的集合分成由類似的對象組成的多個類的過程被稱為聚類。這篇文章主要介紹了Python使用Numpy實現(xiàn)Kmeans算法,需要的朋友可以參考下2021-11-11
關(guān)于Python文本生成的Beam?Search解碼問題
這篇文章主要介紹了Python文本生成的Beam?Search解碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07

