成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python for循環(huán)如何更加Pythonic

開發(fā) 前端
討論了不同的Python編程策略,包括優(yōu)化嵌套結(jié)構(gòu)代碼,列表推導(dǎo)式和生成器表達(dá)式的使用,map和reduce函數(shù)的應(yīng)用以及高效使用多函數(shù)并在適當(dāng)?shù)牡胤绞褂脙?nèi)建庫。

討論了不同的Python編程策略,包括優(yōu)化嵌套結(jié)構(gòu)代碼,列表推導(dǎo)式和生成器表達(dá)式的使用,map和reduce函數(shù)的應(yīng)用以及高效使用多函數(shù)并在適當(dāng)?shù)牡胤绞褂脙?nèi)建庫。

為何需避免循環(huán)?

面對(duì)這個(gè)問題,可能會(huì)有疑慮,為何要對(duì)自己的編程提出挑戰(zhàn),盡量避免在代碼中使用for循環(huán)?實(shí)際上,要避免在Python里使用for循環(huán),并不是因?yàn)閒or循環(huán)差勁或低效。相反,這是一種通過探索其他結(jié)構(gòu)和功能以深化對(duì)Python理解的方式,也能讓代碼更加簡(jiǎn)潔、易讀和更"Python"。

通常,for循環(huán)用于以下場(chǎng)景:

  • 從序列中提取特定信息。
  • 從當(dāng)前序列創(chuàng)建新序列。
  • 使用for循環(huán)已經(jīng)成為習(xí)慣。

好消息是,Python 為這些任務(wù)提供了一系列工具,只需要改變思考方式并獲得新的視角就可以解決它們。

避免編寫for循環(huán),您可以收獲如下益處:

減少代碼的數(shù)量:利用Python內(nèi)置函數(shù)或者列表推導(dǎo)式,可以更簡(jiǎn)潔地執(zhí)行常見的操作,通常這可以在完成相同的任務(wù)時(shí),用更少的代碼替代for循環(huán)。

增強(qiáng)代碼的可讀性:使用列表推導(dǎo)式或內(nèi)置函數(shù)的代碼,通常比使用等效的for循環(huán)的代碼更容易一看就明白。這是因?yàn)檫@些構(gòu)造抽象了循環(huán)機(jī)制,更關(guān)注正在執(zhí)行的操作。

減少縮進(jìn)(這在Python里尤為重要):Python高度依賴于縮進(jìn)來定義代碼塊的結(jié)構(gòu)。避免使用循環(huán)可以減少額外縮進(jìn)級(jí)別的需求,使代碼更簡(jiǎn)潔、更易于理解。這在Python 中特別有用,它強(qiáng)調(diào)可讀性和簡(jiǎn)單性。

下面的例子中:

with open('example_file.txt', 'r') as file:
    for line in file:
        if 'keyword' in line:
            try:
                value = int(line.strip())
                print(value)
            except ValueError:
                print("Conversion error occurred.")
        else:
            print("Keyword not found in line.")

在這個(gè)例子中,代碼有許多嵌套結(jié)構(gòu),因此可讀性會(huì)變得困難。這個(gè)例子展示了深度嵌套代碼的運(yùn)用。

在此代碼片段中,通過不加選擇地將控制流結(jié)構(gòu)(如 with 和 try-except 塊)與業(yè)務(wù)邏輯(如 for循環(huán)和 if語句)混雜在一起,產(chǎn)生了過多的縮進(jìn)。如果能夠堅(jiān)持主要為控制流結(jié)構(gòu)保留縮進(jìn),核心業(yè)務(wù)邏輯應(yīng)該就會(huì)變得更加清晰,更易于理解。

列表推導(dǎo)及生成器

Python中的列表推導(dǎo)和生成器表達(dá)式為處理和操作諸如列表或可迭代對(duì)象的集合提供了緊湊的方式。

列表推導(dǎo)

列表推導(dǎo)是創(chuàng)建新列表的簡(jiǎn)潔方式。包含一個(gè)表達(dá)式,然后是一個(gè) for 子句,接著是零個(gè)或多個(gè)for或if子句,最后得到一個(gè)新的列表。這個(gè)表達(dá)式可以是任何物件,代表可以放入列表的任何類型。最后的結(jié)果是新列表,它由后面的 for和 if 子句的上下文中進(jìn)行評(píng)估后產(chǎn)生。它通常比通過正常的函數(shù)和循環(huán)創(chuàng)建列表更緊湊、更快捷。

例如,[x**2 For x in range(10)]將輸出包含0到9的數(shù)字平方的列表。

生成器表達(dá)式

生成器表達(dá)式類似于列表推導(dǎo),不過它們不是創(chuàng)建整個(gè)列表并一次性存儲(chǔ)所有的項(xiàng)目,而是逐個(gè)生成項(xiàng)目,然后丟棄。這意味著生成器表達(dá)式的內(nèi)存效率是優(yōu)于相應(yīng)的列表推導(dǎo)式的。

例如,(x**2 for x in range(10))創(chuàng)建一個(gè)生成器,它一次計(jì)算一個(gè),對(duì)0至9的數(shù)字進(jìn)行平方。

示例:

result = []
for item in item_list:
    new_item = do_something_with(item)
    result.append(item)

可改寫為:

result = [do_something_with(item) for item in item_list]

Map/Reduce函數(shù)

在Python中,map和reduce功能是把指定的函數(shù)應(yīng)用于可迭代序列(如列表),并分別將其縮小為一個(gè)累積值。

map 函數(shù)

map函數(shù)把特定的函數(shù)適用于可迭代對(duì)象(如列表)的每一項(xiàng),并返回一個(gè)結(jié)果列表。語法是map(function, iterable, ...)。當(dāng)你想對(duì)集合中的每一個(gè)項(xiàng)目執(zhí)行相同的操作而不需要編寫顯式循環(huán)時(shí),此功能十分有用。

例如,.map(lambda x: x * 2, [1, 2, 3, 4])會(huì)返回[2, 4, 6, 8]

reduce 函數(shù)

reduce函數(shù)是functools模塊的一部分,它重復(fù)將給定函數(shù)應(yīng)用于序列元素,并以單一值形式返回它。傳遞給reduce的函數(shù)必須接受兩個(gè)參數(shù),這個(gè)函數(shù)從左到右地累積應(yīng)用于可迭代項(xiàng)目,以便將可迭代項(xiàng)目減少為單個(gè)值。

例如,reduce(lambda x, y: x+y, [1, 2, 3, 4])會(huì)把列表中的數(shù)加在一起并得到10。

map表述變換,reduce表述累加。兩者都是Python中函數(shù)式編程風(fēng)格的示例,可以將函數(shù)應(yīng)用于序列和其他可迭代對(duì)象。

多函數(shù)使用

上述的方法非常適合處理簡(jiǎn)單的邏輯。但對(duì)于更復(fù)雜的邏輯呢?作為程序員,我們編寫函數(shù)來簡(jiǎn)化復(fù)雜的操作。同樣的概念也適用于這里。如果你的代碼像這樣:

results = []
for item in item_list:
    # 建立
    # 判斷
    # 處理
    # 計(jì)算
    results.append(result)

很明顯,你為單個(gè)代碼塊分配了太多工作。相反,我建議你考慮下面的方法:

def process_item(item):
    # 建立
    # 判斷
    # 處理
    # 計(jì)算
    return result


results = [process_item(item) for item in item_list]

有時(shí),你可能需要使用嵌套函數(shù),比如這樣:

results = []
for i in range(10):
    for j in range(i):
        results.append((i, j))

它可以被改寫為:

results = [(i, j)
           for i in range(10)
           for j in range(i)]

有時(shí),你的代碼需要保持一些內(nèi)部狀態(tài),例如:

my_list = [10, 4, 13, 2, 1, 9, 0, 7, 5, 8]
results = []
current_max = 0
for i in my_list:
    current_max = max(i, current_max)
    results.append(current_max)

這可以被重寫為:

from itertools import accumulate

my_list = [10, 4, 13, 2, 1, 9, 0, 7, 5, 8]
results = list(accumulate(my_list, max))

現(xiàn)在是不是已經(jīng)看起來更像Python了?此外,第二種方法,使用accumulate from itertools模塊,拿來做累積運(yùn)算通常更有效率且更Pythonic,原因有以下幾點(diǎn):

內(nèi)置函數(shù)效率:accumulate是Python中的內(nèi)置函數(shù),特地被優(yōu)化來執(zhí)行累積運(yùn)算的任務(wù),基本上比手動(dòng)實(shí)現(xiàn)的for循環(huán)來得快。

可讀性:accumulate函數(shù)清楚地傳達(dá)了用特定的操作(在本例中為max)累積值的意圖,使代碼更容易理解。

簡(jiǎn)潔性:第二種辦法更簡(jiǎn)潔,與第一種辦法的四行代碼相比,只需兩行就可完成任務(wù)。這就減少了出錯(cuò)的可能性,也讓代碼更干凈。

擴(kuò)展性和維護(hù)性: 使用accumulate及其它內(nèi)置函數(shù),代碼更容易維護(hù),改變也更容易,比如:應(yīng)用除了max之外的其他操作。

總結(jié)

本文主要討論了不同的Python編程策略,包括優(yōu)化嵌套結(jié)構(gòu)代碼,列表推導(dǎo)式和生成器表達(dá)式的使用,map和reduce函數(shù)的應(yīng)用以及高效使用多函數(shù)并在適當(dāng)?shù)牡胤绞褂脙?nèi)建庫。

  • 嵌套結(jié)構(gòu)的優(yōu)化有助于提高代碼的可讀性和清晰度,讓控制流結(jié)構(gòu)更直觀,業(yè)務(wù)邏輯更易于理解。
  • 列表推導(dǎo)和生成器表達(dá)式是處理列表和可迭代對(duì)象的強(qiáng)大工具,它們能夠使代碼更加緊湊、高效。
  • map和reduce函數(shù)可用于將特定功能應(yīng)用于序列,進(jìn)一步提高代碼的效率和可讀性。
  • 熟練地使用函數(shù)可以簡(jiǎn)化復(fù)雜的邏輯,使代碼更易于維護(hù),也符合Python的簡(jiǎn)易優(yōu)雅原則。
  • 最后,使用Python自帶的功能,如內(nèi)置函數(shù)和模塊,可以提高代碼的效率和可讀性,讓代碼更“Python化。”

綜上,只要掌握各種編程策略和Python內(nèi)部功能,就可以優(yōu)化你的代碼,從而提高編程效率,使代碼更容易理解,維護(hù)和修改。

責(zé)任編輯:華軒 來源: 哈希編程
相關(guān)推薦

2022-08-19 14:24:30

forPythonpythonic

2025-03-11 08:30:00

Pythonretrying代碼

2022-05-14 14:40:00

開源社區(qū)社區(qū)表彰貢獻(xiàn)

2012-10-30 13:12:55

PythonicHackathon豆瓣

2010-03-11 14:15:24

Python循環(huán)

2023-09-26 12:04:15

重構(gòu)技巧Pythonic

2023-01-11 11:35:40

重構(gòu)PythonPythonic

2021-07-21 14:29:27

Python編程語言軟件開發(fā)

2023-02-06 12:00:00

重構(gòu)PythonPythonic

2015-07-27 16:21:44

云計(jì)算輕盈云服務(wù)

2010-04-16 17:51:01

CTO

2023-08-23 15:49:10

數(shù)據(jù)中心

2009-06-11 10:50:27

netbeans配置

2020-10-25 19:58:04

Pythonic代碼語言

2020-07-17 19:36:26

Python編程代碼

2020-07-29 10:41:13

云計(jì)算SaaS云平臺(tái)

2019-02-28 22:47:06

云計(jì)算數(shù)據(jù)安全企業(yè)

2021-08-16 12:13:02

SwiftUIList ArticleList

2020-03-09 10:09:18

混合云云計(jì)算

2009-02-19 20:30:04

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: av中文字幕在线播放 | 一区二区三区在线观看免费视频 | 午夜在线精品偷拍 | 精品久久久久久久久久久久 | 国产美女h视频 | 亚洲h视频 | 国产精品久久久久久久久久免费 | 97久久久久久久久 | 亚洲网站在线观看 | 欧美日韩视频 | 亚洲 精品 综合 精品 自拍 | 欧美片网站免费 | 国产一区二区小视频 | 久久精品国产亚洲 | 精品国产乱码久久久久久牛牛 | 一级毛片视频在线 | 日本又色又爽又黄又高潮 | 99在线观看视频 | 黄色a三级| 不卡一区二区在线观看 | 亚洲综合色丁香婷婷六月图片 | 毛片视频网站 | 毛色毛片免费看 | 99精品一区二区 | 91p在线观看 | 色综合99 | 日韩成人一区 | 综合色在线 | 日韩精品四区 | 国产精品激情小视频 | 日韩福利 | 免费观看成人性生生活片 | 亚洲bt 欧美bt 日本bt | 天天拍天天插 | 91精品久久久久久久 | 亚洲精品电影 | 青草青草久热精品视频在线观看 | 国产成年人视频 | 国产精品一区二区三区在线 | 免费一区二区三区 | 射久久|