亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) 后端開(kāi)發(fā) Python教程 編寫(xiě)高效且可讀的 Python 代碼的強(qiáng)大技術(shù)

編寫(xiě)高效且可讀的 Python 代碼的強(qiáng)大技術(shù)

Oct 31, 2024 pm 07:06 PM

Powerful Techniques for Writing Efficient and Readable Python Code

Python 以其簡(jiǎn)單性和多功能性而聞名,但即使是經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員也會(huì)從采用最大化性能和可讀性的最佳實(shí)踐中受益。隨著數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和 Python 網(wǎng)絡(luò)開(kāi)發(fā)的興起,掌握高效的代碼技術(shù)已成為在當(dāng)今快速發(fā)展的技術(shù)環(huán)境中保持競(jìng)爭(zhēng)力的必須條件。在這里,我們將深入探討 20 種有效的技術(shù)來(lái)提高 Python 代碼的性能和可讀性,無(wú)論您是在處理復(fù)雜的項(xiàng)目還是快速的自動(dòng)化腳本。

1.使用生成器來(lái)節(jié)省內(nèi)存

生成器非常適合在不使用過(guò)多內(nèi)存的情況下處理大型數(shù)據(jù)集。它們一次生成一份數(shù)據(jù),而不是將所有數(shù)據(jù)都保存在內(nèi)存中。例如,您可以使用生成器逐行讀取大型日志文件。

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

這種方法對(duì)于數(shù)據(jù)處理或批量訓(xùn)練等任務(wù)特別有用,在這些任務(wù)中,使用有限的內(nèi)存是必不可少的。

2.使用 .setdefault() 設(shè)置默認(rèn)值

如果您需要使用默認(rèn)值初始化字典中的鍵,.setdefault() 可以讓您免于手動(dòng)檢查。

inventory = {"jeans": 500, "top": 600}
inventory.setdefault("shoes", 0)
print(inventory)

這使得管理默認(rèn)值更加簡(jiǎn)潔,并且不需要額外的 if 語(yǔ)句。

3.用字典替換 if-elif 鏈

使用字典來(lái)映射函數(shù)而不是長(zhǎng)的 if-elif 鏈?zhǔn)勾a更干凈且更易于維護(hù)。

def start(): print("Start")
def stop(): print("Stop")
actions = {"start": start, "stop": stop}
action = "start"
actions.get(action, lambda: print("Invalid"))()

這種結(jié)構(gòu)提高了可讀性和性能,特別是在大型決策樹(shù)中。

4.使用計(jì)數(shù)器簡(jiǎn)化計(jì)數(shù)

集合模塊中的 Counter 類是簡(jiǎn)化 Python 中計(jì)數(shù)任務(wù)(例如頻率分析)的好方法。

from collections import Counter
words = ["apple", "banana", "apple", "orange", "banana"]
counts = Counter(words)
print(counts)

它無(wú)需創(chuàng)建自定義計(jì)數(shù)函數(shù),并且高效且易于使用。

5.通過(guò)記憶化優(yōu)化遞歸

記憶化存儲(chǔ)昂貴的函數(shù)調(diào)用的結(jié)果,這在斐波那契計(jì)算等遞歸算法中特別有用。

from functools import lru_cache

@lru_cache(maxsize=1000)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

這種方法以最少的額外內(nèi)存為代價(jià)降低了時(shí)間復(fù)雜度。

6.使用裝飾器增加靈活性

Python 裝飾器對(duì)于將可重用功能應(yīng)用于多個(gè)函數(shù)非常有用,例如日志記錄或計(jì)時(shí),而無(wú)需修改核心邏輯。

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} took {time.time() - start_time:.6f} seconds")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

slow_function()

7.使用 dataclass 讓數(shù)據(jù)模型變得清晰

Python 的數(shù)據(jù)類通過(guò)自動(dòng)生成 init、repr 和比較方法,使定義簡(jiǎn)單的數(shù)據(jù)模型變得更容易且更具可讀性。

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

這有助于減少樣板代碼并保持?jǐn)?shù)據(jù)結(jié)構(gòu)清潔和可維護(hù)。

8.結(jié)構(gòu)條件與匹配

使用 Python 3.10,結(jié)構(gòu)模式匹配允許您匹配復(fù)雜的數(shù)據(jù)結(jié)構(gòu),而無(wú)需冗長(zhǎng)的 if-else 語(yǔ)句。

inventory = {"jeans": 500, "top": 600}
inventory.setdefault("shoes", 0)
print(inventory)

9.將鏈?zhǔn)?and 替換為 all()

要一次驗(yàn)證多個(gè)條件,請(qǐng)使用 all() 來(lái)保持代碼簡(jiǎn)潔和可讀。

def start(): print("Start")
def stop(): print("Stop")
actions = {"start": start, "stop": stop}
action = "start"
actions.get(action, lambda: print("Invalid"))()

10。使用列表推導(dǎo)式

列表推導(dǎo)式使循環(huán)簡(jiǎn)潔且富有表現(xiàn)力,特別是對(duì)于簡(jiǎn)單的轉(zhuǎn)換。

from collections import Counter
words = ["apple", "banana", "apple", "orange", "banana"]
counts = Counter(words)
print(counts)

它們比傳統(tǒng)循環(huán)更高效、更容易閱讀。

11。理解和使用生成器表達(dá)式

對(duì)于不需要列表的情況,請(qǐng)使用生成器表達(dá)式以獲得更好的內(nèi)存效率。

from functools import lru_cache

@lru_cache(maxsize=1000)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

生成器表達(dá)式通過(guò)按需生成值來(lái)減少內(nèi)存使用。

12。嘗試使用 zip() 進(jìn)行并行迭代

zip() 函數(shù)可以輕松并行迭代多個(gè)列表。

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} took {time.time() - start_time:.6f} seconds")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

slow_function()

13。使用 with 語(yǔ)句安全地處理文件

with 語(yǔ)句確保文件在套件完成后正確關(guān)閉,使其成為文件處理的理想選擇。

from dataclasses import dataclass

@dataclass
class Employee:
    name: str
    id: int
    salary: float

e = Employee("Alice", 1, 50000)
print(e)

這簡(jiǎn)化了資源管理并最大限度地減少發(fā)生錯(cuò)誤的可能性。

14。通過(guò)類型提示添加安全性

類型提示使您的代碼更具可讀性,并幫助 IDE 在運(yùn)行前檢測(cè)潛在錯(cuò)誤。

def describe_point(point):
    match point:
        case (0, 0):
            return "Origin"
        case (0, y):
            return f"On Y-axis at {y}"
        case (x, 0):
            return f"On X-axis at {x}"
        case (x, y):
            return f"Point at ({x}, {y})"

類型提示提高了可維護(hù)性,尤其是在大型代碼庫(kù)中。

15。使用 any() for 或 條件進(jìn)行簡(jiǎn)化

要檢查列表中的任何條件是否為真,any() 比鏈?zhǔn)?or 條件更簡(jiǎn)潔。

fields = ["name", "email", "age"]
data = {"name": "Alice", "email": "alice@example.com", "age": 25}
if all(field in data for field in fields):
    print("All fields are present")

16。利用 try- except-else-finally

這種結(jié)構(gòu)允許更清晰的錯(cuò)誤處理,并最終增加管理不同場(chǎng)景的靈活性。

squares = [x ** 2 for x in range(10)]

17。使用命名元組組織數(shù)據(jù)

命名元組為元組添加結(jié)構(gòu),使它們更具可讀性和自記錄性。

sum_of_squares = sum(x ** 2 for x in range(1000))

18。使用 f 字符串改進(jìn) str 連接

f 字符串比傳統(tǒng)的連接方法更快、更易讀,尤其是對(duì)于復(fù)雜的表達(dá)式。

names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old")

19。使用 itertools 進(jìn)行高效迭代

itertools 模塊提供高效的循環(huán)選項(xiàng),例如生成排列、組合或重復(fù)元素。

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

20。使用上下文管理器保持代碼整潔

自定義上下文管理器幫助管理資源或清理任務(wù),提高可讀性和安全性。

inventory = {"jeans": 500, "top": 600}
inventory.setdefault("shoes", 0)
print(inventory)

通過(guò)集成這些技術(shù),您可以編寫(xiě)出不僅更高效而且更易讀和可維護(hù)的 Python 代碼。嘗試這些技巧,并逐漸將它們?nèi)谌氲侥娜粘>幋a實(shí)踐中。

以上是編寫(xiě)高效且可讀的 Python 代碼的強(qiáng)大技術(shù)的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Laravel 教程
1597
29
PHP教程
1488
72
Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍睿浮耙环N接口,多種實(shí)現(xiàn)”,允許統(tǒng)一處理不同類型的對(duì)象。1.多態(tài)通過(guò)方法重寫(xiě)實(shí)現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實(shí)現(xiàn)。2.多態(tài)的實(shí)際用途包括簡(jiǎn)化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪制程序中統(tǒng)一調(diào)用draw()方法,或游戲開(kāi)發(fā)中處理不同角色的共同行為。3.Python實(shí)現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫(xiě)該方法,但不要求繼承同一父類,只要對(duì)象實(shí)現(xiàn)相同方法即可,這稱為“鴨子類型”。4.注意事項(xiàng)包括保持方

解釋Python發(fā)電機(jī)和迭代器。 解釋Python發(fā)電機(jī)和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實(shí)現(xiàn)__iter__()和__next__()方法的對(duì)象,生成器是簡(jiǎn)化版的迭代器,通過(guò)yield關(guān)鍵字自動(dòng)實(shí)現(xiàn)這些方法。1.迭代器每次調(diào)用next()返回一個(gè)元素,無(wú)更多元素時(shí)拋出StopIteration異常。2.生成器通過(guò)函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無(wú)限序列。3.處理已有集合時(shí)用迭代器,動(dòng)態(tài)生成大數(shù)據(jù)或需惰性求值時(shí)用生成器,如讀取大文件時(shí)逐行加載。注意:列表等可迭代對(duì)象不是迭代器,迭代器到盡頭后需重新創(chuàng)建,生成器只能遍歷一次。

如何處理Python中的API身份驗(yàn)證 如何處理Python中的API身份驗(yàn)證 Jul 13, 2025 am 02:22 AM

處理API認(rèn)證的關(guān)鍵在于理解并正確使用認(rèn)證方式。1.APIKey是最簡(jiǎn)單的認(rèn)證方式,通常放在請(qǐng)求頭或URL參數(shù)中;2.BasicAuth使用用戶名和密碼進(jìn)行Base64編碼傳輸,適合內(nèi)部系統(tǒng);3.OAuth2需先通過(guò)client_id和client_secret獲取Token,再在請(qǐng)求頭中帶上BearerToken;4.為應(yīng)對(duì)Token過(guò)期,可封裝Token管理類自動(dòng)刷新Token;總之,根據(jù)文檔選擇合適方式,并安全存儲(chǔ)密鑰信息是關(guān)鍵。

如何一次迭代兩個(gè)列表 如何一次迭代兩個(gè)列表 Jul 09, 2025 am 01:13 AM

在Python中同時(shí)遍歷兩個(gè)列表的常用方法是使用zip()函數(shù),它會(huì)按順序配對(duì)多個(gè)列表并以最短為準(zhǔn);若列表長(zhǎng)度不一致,可使用itertools.zip_longest()以最長(zhǎng)為準(zhǔn)并填充缺失值;結(jié)合enumerate()可同時(shí)獲取索引。1.zip()簡(jiǎn)潔實(shí)用,適合成對(duì)數(shù)據(jù)迭代;2.zip_longest()處理不一致長(zhǎng)度時(shí)可填充默認(rèn)值;3.enumerate(zip())可在遍歷時(shí)獲取索引,滿足多種復(fù)雜場(chǎng)景需求。

解釋Python斷言。 解釋Python斷言。 Jul 07, 2025 am 12:14 AM

Assert是Python用于調(diào)試的斷言工具,當(dāng)條件不滿足時(shí)拋出AssertionError。其語(yǔ)法為assert條件加可選錯(cuò)誤信息,適用于內(nèi)部邏輯驗(yàn)證如參數(shù)檢查、狀態(tài)確認(rèn)等,但不能用于安全或用戶輸入檢查,且應(yīng)配合清晰提示信息使用,僅限開(kāi)發(fā)階段輔助調(diào)試而非替代異常處理。

什么是Python型提示? 什么是Python型提示? Jul 07, 2025 am 02:55 AM

typeHintsInpyThonsolverbromblemboyofambiguityandPotentialBugSindyNamalytyCodeByallowingDevelopsosteSpecefectifyExpectedTypes.theyenhancereadability,enablellybugdetection,andimprovetool.typehintsupport.typehintsareadsareadsareadsareadsareadsareadsareadsareadsareaddedusidocolon(

什么是Python迭代器? 什么是Python迭代器? Jul 08, 2025 am 02:56 AM

Inpython,IteratorSareObjectSthallowloopingThroughCollectionsByImplementing_iter __()和__next __()。1)iteratorsWiaTheIteratorProtocol,使用__ITER __()toreTurnterateratoratoranteratoratoranteratoratorAnterAnteratoratorant antheittheext__()

Python Fastapi教程 Python Fastapi教程 Jul 12, 2025 am 02:42 AM

要使用Python創(chuàng)建現(xiàn)代高效的API,推薦使用FastAPI;其基于標(biāo)準(zhǔn)Python類型提示,可自動(dòng)生成文檔,性能優(yōu)越。安裝FastAPI和ASGI服務(wù)器uvicorn后,即可編寫(xiě)接口代碼。通過(guò)定義路由、編寫(xiě)處理函數(shù)并返回?cái)?shù)據(jù),可以快速構(gòu)建API。FastAPI支持多種HTTP方法,并提供自動(dòng)生成的SwaggerUI和ReDoc文檔系統(tǒng)。URL參數(shù)可通過(guò)路徑定義捕獲,查詢參數(shù)則通過(guò)函數(shù)參數(shù)設(shè)置默認(rèn)值實(shí)現(xiàn)。合理使用Pydantic模型有助于提升開(kāi)發(fā)效率和準(zhǔn)確性。

See all articles