15個高級Python技巧提高代碼效率更加Pythonic
使用列表推導(dǎo)式簡化代碼
列表推導(dǎo)式提供了簡潔而優(yōu)雅的方法。它們通??梢匀〈鷤鹘y(tǒng)的循環(huán)和條件語句,從而使代碼更簡潔、更易讀。但是這里不建議把列表推導(dǎo)式寫的過于復(fù)雜,畢竟代碼是寫給人看的,之后才是讓機(jī)器閱讀的。
# 普通的寫法 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]
利用生成器表達(dá)式提高內(nèi)存效率
與列表推導(dǎo)式類似,生成器表達(dá)式允許你以簡潔的方式創(chuàng)建迭代器。主要區(qū)別在于,生成器表達(dá)式不會在內(nèi)存中存儲整個序列,因此更節(jié)省內(nèi)存。
使用小括號代替方括號創(chuàng)建生成器表達(dá)式:
# 列表推導(dǎo)式 squared_numbers = [num ** 2 for num in numbers] # 生成器表達(dá)式 squared_numbers = (num ** 2 for num in numbers)
學(xué)會使用 enumerate() 函數(shù)
當(dāng)需要遍歷一個可迭代元素并計劃使用每個元素的索引時,enumerate()
函數(shù)就派上用場了。它返回一個包含索引和相應(yīng)元素的元組迭代器。下面是一個例子:
# 列表推導(dǎo)式 squared_numbers = [num ** 2 for num in numbers] # 生成器表達(dá)式 squared_numbers = (num ** 2 for num in numbers)
使用 join() 簡化字符串連接
使用 +
運(yùn)算符連接字符串的效率可能會很低,尤其是在處理大字符串或多個字符串連接時。相反,使用 join() 方法可以高效地連接多個字符串,這個方法我個人也經(jīng)常在用,而且用列表拼接字符串時,編寫會更加靈活:
fruits = ['apple', 'banana', 'cherry'] combined_fruits = ', '.join(fruits) print(combined_fruits) # Output: apple, banana, cherry
利用 zip() 函數(shù)進(jìn)行并行迭代
通過 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 簡化字典默認(rèn)值
collections
模塊提供了一個名為 defaultdict
的便捷類,它是內(nèi)置 dict
類的子類。如果鍵值不存在,它會自動為其指定默認(rèn)值,從而省去了顯式檢查。下面是一個例子:
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 對元素進(jìn)行計數(shù)
collections.Counter
類提供了一種方便的方法來對可迭代表中的元素進(jìn)行計數(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)方法。這些方法不能訪問實(shí)例或類本身,但可以在不實(shí)例化對象的情況下調(diào)用。同樣,@classmethod
裝飾器定義的方法的第一個參數(shù)是類本身,而不是實(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 默認(rèn)將實(shí)例屬性存儲在字典中,這會消耗大量內(nèi)存,尤其是在創(chuàng)建許多實(shí)例時。然而,您可以使用 slots 屬性來告訴 Python 為一組固定的實(shí)例變量分配內(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。的詳細(xì)內(nèi)容,更多關(guān)于Python Pythonic高效代碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python爬蟲之驗(yàn)證碼篇3-滑動驗(yàn)證碼識別技術(shù)
本篇涉及到的驗(yàn)證碼為滑動驗(yàn)證碼,不同于極驗(yàn)證,本驗(yàn)證碼難度略低,需要的將滑塊拖動到矩形區(qū)域右側(cè)即可完成。對python爬蟲滑動驗(yàn)證碼識別技術(shù)感興趣的朋友跟隨小編一起看看吧2019-04-04Python使用min、max函數(shù)查找二維數(shù)據(jù)矩陣中最小、最大值的方法
這篇文章主要介紹了Python使用min、max函數(shù)查找二維數(shù)據(jù)矩陣中最小、最大值的方法,涉及Python矩陣生成、遍歷、查找等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Python使用pyinstaller打包含有g(shù)ettext?locales語言環(huán)境的項(xiàng)目(推薦)
最近在用 pyhton 做一個圖片處理的小工具,順便接觸了gettext,用來實(shí)現(xiàn)本地化化中英文轉(zhuǎn)換,本文通過一個項(xiàng)目給大家詳細(xì)介紹下,感興趣的朋友跟隨小編一起看看吧2022-01-01Python實(shí)戰(zhàn)基礎(chǔ)之繪制餅狀圖分析商品庫存
餅狀圖(pie chart)一般用于描述分類型數(shù)據(jù)的相對頻數(shù)或百分?jǐn)?shù)頻數(shù)分布,呈現(xiàn)部分與總體的關(guān)系,下面這篇文章主要給大家介紹了關(guān)于Python實(shí)戰(zhàn)基礎(chǔ)之繪制餅狀圖分析商品庫存的相關(guān)資料,需要的朋友可以參考下2022-07-07django獲取from表單multiple-select的value和id的方法
今天小編就為大家分享一篇django獲取from表單multiple-select的value和id的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07