欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

15個(gè)高級(jí)Python技巧提高代碼效率更加Pythonic

 更新時(shí)間:2023年12月26日 09:57:27   作者:簡(jiǎn)訊Alfred  
Python?是一種多用途、功能強(qiáng)大的編程語(yǔ)言,具有廣泛的特性和能力,在本文中,我們將探討?15?個(gè)高級(jí)?Python?技巧,它們有助于改善您的開(kāi)發(fā)工作流程,并使您的代碼更加高效,更加?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)文章

最新評(píng)論