15個(gè)高級(jí)Python技巧提高代碼效率更加Pythonic
使用列表推導(dǎo)式簡(jiǎn)化代碼
列表推導(dǎo)式提供了簡(jiǎn)潔而優(yōu)雅的方法。它們通??梢匀〈鷤鹘y(tǒng)的循環(huán)和條件語(yǔ)句,從而使代碼更簡(jiǎn)潔、更易讀。但是這里不建議把列表推導(dǎo)式寫的過(guò)于復(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á)式允許你以簡(jiǎn)潔的方式創(chuàng)建迭代器。主要區(qū)別在于,生成器表達(dá)式不會(huì)在內(nèi)存中存儲(chǔ)整個(gè)序列,因此更節(jié)省內(nèi)存。
使用小括號(hào)代替方括號(hào)創(chuàng)建生成器表達(dá)式:
# 列表推導(dǎo)式 squared_numbers = [num ** 2 for num in numbers] # 生成器表達(dá)式 squared_numbers = (num ** 2 for num in numbers)
學(xué)會(huì)使用 enumerate() 函數(shù)
當(dāng)需要遍歷一個(gè)可迭代元素并計(jì)劃使用每個(gè)元素的索引時(shí),enumerate()
函數(shù)就派上用場(chǎng)了。它返回一個(gè)包含索引和相應(yīng)元素的元組迭代器。下面是一個(gè)例子:
# 列表推導(dǎo)式 squared_numbers = [num ** 2 for num in numbers] # 生成器表達(dá)式 squared_numbers = (num ** 2 for num in numbers)
使用 join() 簡(jiǎn)化字符串連接
使用 +
運(yùn)算符連接字符串的效率可能會(huì)很低,尤其是在處理大字符串或多個(gè)字符串連接時(shí)。相反,使用 join() 方法可以高效地連接多個(gè)字符串,這個(gè)方法我個(gè)人也經(jīng)常在用,而且用列表拼接字符串時(shí),編寫會(huì)更加靈活:
fruits = ['apple', 'banana', 'cherry'] combined_fruits = ', '.join(fruits) print(combined_fruits) # Output: apple, banana, cherry
利用 zip() 函數(shù)進(jìn)行并行迭代
通過(guò) zip()
函數(shù),可以并行遍歷多個(gè)可遍歷數(shù)。它將多個(gè)迭代作為輸入,并返回一個(gè)迭代器,該迭代器產(chǎn)生的元組包含來(lái)自每個(gè)迭代的元素。下面是一個(gè)示例:
names = ['Alice', 'Bob', 'Charlie'] ages = [25, 32, 40] for name, age in zip(names, ages): print(f"Name: {name}, Age: {age}")
使用 collections.defaultdict 簡(jiǎn)化字典默認(rèn)值
collections
模塊提供了一個(gè)名為 defaultdict
的便捷類,它是內(nèi)置 dict
類的子類。如果鍵值不存在,它會(huì)自動(dòng)為其指定默認(rèn)值,從而省去了顯式檢查。下面是一個(gè)例子:
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í)非常有用。如果可迭代數(shù)據(jù)結(jié)構(gòu)中至少有一個(gè)元素為 True
,則 any()
函數(shù)返回 True
,而 all()
函數(shù)只有在所有元素都為 True
時(shí)才返回 True
。下面是一個(gè)例子:
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 對(duì)元素進(jìn)行計(jì)數(shù)
collections.Counter
類提供了一種方便的方法來(lái)對(duì)可迭代表中的元素進(jìn)行計(jì)數(shù)。它返回一個(gè)類似字典的對(duì)象,其中元素是鍵,計(jì)數(shù)是值。下面是一個(gè)示例:
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)方法。這些方法不能訪問(wèn)實(shí)例或類本身,但可以在不實(shí)例化對(duì)象的情況下調(diào)用。同樣,@classmethod
裝飾器定義的方法的第一個(gè)參數(shù)是類本身,而不是實(shí)例。下面是一個(gè)例子:
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í)例屬性存儲(chǔ)在字典中,這會(huì)消耗大量?jī)?nèi)存,尤其是在創(chuàng)建許多實(shí)例時(shí)。然而,您可以使用 slots 屬性來(lái)告訴 Python 為一組固定的實(shí)例變量分配內(nèi)存,從而減少內(nèi)存使用量。下面是一個(gè)例子:
class Point: __slots__ = ['x', 'y'] def __init__(self, x, y): self.x = x self.y = y
這樣就限定了屬性只有 x
和 y
,如果嘗試綁定其他屬性便會(huì)報(bào) AttributeError
錯(cuò)誤。
使用 contextlib.suppress 忽略異常
contextlib.suppress
上下文管理器可以方便地忽略代碼塊中出現(xiàn)的特定異常。它有助于避免不必要的 try-except
代碼塊,并保持代碼的整潔。下面是一個(gè)示例:
from contextlib import suppress with suppress(FileNotFoundError): with open('file.txt', 'r') as file: contents = file.read()
以上就是15個(gè)高級(jí)Python技巧提高代碼效率更加Pythonic。的詳細(xì)內(nèi)容,更多關(guān)于Python Pythonic高效代碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python爬蟲之驗(yàn)證碼篇3-滑動(dòng)驗(yàn)證碼識(shí)別技術(shù)
本篇涉及到的驗(yàn)證碼為滑動(dòng)驗(yàn)證碼,不同于極驗(yàn)證,本驗(yàn)證碼難度略低,需要的將滑塊拖動(dòng)到矩形區(qū)域右側(cè)即可完成。對(duì)python爬蟲滑動(dòng)驗(yàn)證碼識(shí)別技術(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語(yǔ)言環(huán)境的項(xiàng)目(推薦)
最近在用 pyhton 做一個(gè)圖片處理的小工具,順便接觸了gettext,用來(lái)實(shí)現(xiàn)本地化化中英文轉(zhuǎn)換,本文通過(guò)一個(gè)項(xiàng)目給大家詳細(xì)介紹下,感興趣的朋友跟隨小編一起看看吧2022-01-01Python實(shí)戰(zhàn)基礎(chǔ)之繪制餅狀圖分析商品庫(kù)存
餅狀圖(pie chart)一般用于描述分類型數(shù)據(jù)的相對(duì)頻數(shù)或百分?jǐn)?shù)頻數(shù)分布,呈現(xiàn)部分與總體的關(guān)系,下面這篇文章主要給大家介紹了關(guān)于Python實(shí)戰(zhàn)基礎(chǔ)之繪制餅狀圖分析商品庫(kù)存的相關(guān)資料,需要的朋友可以參考下2022-07-07使用Python開(kāi)發(fā)一個(gè)PDF文本提取工具
在日常工作中,我們經(jīng)常需要從PDF文檔中提取文本內(nèi)容,雖然市面上有不少相關(guān)工具,但它們要么功能過(guò)于復(fù)雜,要么使用不夠方便,本文將介紹如何使用Python開(kāi)發(fā)一個(gè)簡(jiǎn)單實(shí)用的PDF文本提取工具,需要的朋友可以參考下2025-02-02Python3簡(jiǎn)單實(shí)現(xiàn)串口通信的方法
今天小編就為大家分享一篇Python3簡(jiǎn)單實(shí)現(xiàn)串口通信的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06django獲取from表單multiple-select的value和id的方法
今天小編就為大家分享一篇django獲取from表單multiple-select的value和id的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07