国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

八個(gè)重構(gòu)技巧使得Python代碼更Pythonic

開發(fā) 前端
如果你已經(jīng)熟悉生成器,那么這是一個(gè)高級技巧。一個(gè)經(jīng)常被忽略的小技巧是 Python 的 yield? 關(guān)鍵字對于可迭代對象有一個(gè)對應(yīng)的yield from。

1.合并追加到列表聲明

我們從一個(gè)簡單的開始。不是聲明一個(gè)空列表然后附加到它,而是直接用所有元素初始化列表。這縮短了代碼并使意圖更加明確。它的性能也稍微好一些,因?yàn)樗苊饬藢?nbsp;append() 的函數(shù)調(diào)用。

players = []
players.append("Patrick")
players.append("Max")
players.append("Jessi")

# -> refactor
players = ["Patrick", "Max", "Jessi"]

這同樣適用于填充其他集合類型,如集合和字典。

2 使用items()直接解包字典值

當(dāng)遍歷字典時(shí),你需要鍵和值,那么不要手動訪問值。而是迭代dictionary.items(),它同時(shí)為你提供鍵和值。

這節(jié)省了我們過去分配給 players 的行,代碼現(xiàn)在讀起來更自然,重復(fù)更少。

teams_by_color = {"blue": ["Patrick", "Jessi"]}

for team_color in teams_by_color:
players = teams_by_color[team_color]
if is_winning(team_color):
advance_level(players)

# -> refactor
for team_color, players in teams_by_color.items():
if is_winning(team_color):
advance_level(players)

3. 將 range(len) 替換為枚舉

如果我們需要遍歷列表并且需要同時(shí)跟蹤索引和當(dāng)前項(xiàng),請使用內(nèi)置enumerate()?函數(shù)而不是range(len)。這會將當(dāng)前索引和當(dāng)前項(xiàng)目作為元組返回。所以我們可以直接在這里查看值,也可以訪問帶有索引的項(xiàng)目。

for i in range(len(players)):
print(i, players[i])

# -> refactor
for i, player in enumerate(players):
print(i, player)

Enumerate? 還帶有一個(gè)可選的start參數(shù)。如果你使用它,計(jì)數(shù)器將從該值開始。但請注意,這些項(xiàng)目仍然從第一個(gè)開始。

for i, player in enumerate(players, start=1):
print(i, player)

4. 用枚舉調(diào)用替換手動循環(huán)計(jì)數(shù)器

這與之前非常相似。有時(shí)我會看到直接對項(xiàng)目執(zhí)行迭代的代碼——這本身并不壞——但隨后需要一個(gè)計(jì)數(shù)器,它會在循環(huán)內(nèi)手動遞增。同樣在這里你可以簡單地使用 enumerate 函數(shù)。這更簡單,也更快。

i = 0
for player in players:
print(i, player)
i += 1

# -> refactor
for i, player in enumerate(players):
print(i, player)

4.1 不要手動更新計(jì)數(shù)器

如果你只需要計(jì)算項(xiàng)目的數(shù)量,也不要遍歷循環(huán)并手動計(jì)算所有項(xiàng)目。相反,只需使用len()函數(shù)來獲取列表中的元素?cái)?shù)。

num_players = 0
for player in players:
num_players += 1

# -> refactor
num_players = len(players)

5.將條件簡化為return語句

當(dāng)我們到達(dá)一個(gè)方法的末尾并想要返回 True? 或 False? 時(shí),一種常見的做法是這樣的。如果條件為 True?,我們返回 True?。否則我們最后返回 False。然而,直接返回結(jié)果更簡潔:

def function():
if isinstance(a, b) or issubclass(b, a):
return True
return False

# -> refactor
def function():
return isinstance(a, b) or issubclass(b, a)

我們在這里應(yīng)該注意的一件事是,只有當(dāng)表達(dá)式的計(jì)算結(jié)果為布爾值時(shí)才能這樣做。isinstance()和issubclass()都是返回布爾值的函數(shù),所以這很好。但在下一個(gè)示例中,第一個(gè)表達(dá)式pythonistas是一個(gè)列表而不是布爾值。

如果pythonistas?是一個(gè)有效的非空列表,這將返回列表而不是預(yù)期的布爾值,然后可能是你的應(yīng)用程序中的錯(cuò)誤。因此,為了確保我們在這里返回一個(gè)布爾值,我們可以將返回包裝在對 bool()函數(shù)的調(diào)用中。

def any_pythonistas():
pythonistas = [coder for coder in coders if is_good_in_python(coder)]
if pythonistas or self.is_pythonista():
return True
return False

# -> refactor
def any_hats():
pythonistas = [coder for coder in coders if is_good_in_python(coder)]
return bool(pythonistas or self.is_pythonista())

6.合并條件中的重復(fù)塊

我們應(yīng)該始終尋找機(jī)會刪除重復(fù)的代碼。這樣做的好地方是if …elif鏈中有多個(gè)相同的塊。

在此示例中,if? 和 elif? 都導(dǎo)致相同的執(zhí)行功能。所以我們可以使用or?組合前兩個(gè)塊來刪除對函數(shù)的重復(fù)調(diào)用。現(xiàn)在,如果我們需要更改process_standard_payment()行,我們可以在一處而不是兩處進(jìn)行。

def process_payment(payment, currency):
if currency == "USD":
process_standard_payment(payment)
elif currency == "EUR":
process_standard_payment(payment)
else:
process_international_payment(payment)

# -> refactor
def process_payment(payment, currency):
if currency == "USD" or currency == "EUR":
process_standard_payment(payment)
else:
process_international_payment(payment)

7.用in運(yùn)算符替換同一個(gè)變量的多次比較

我們甚至可以進(jìn)一步重構(gòu)以前的代碼。由于我們針對多個(gè)值重復(fù)檢查同一個(gè)變量,我們可以使用 in 運(yùn)算符來縮短它。如果貨幣值在定義的列表中,我們將執(zhí)行專用操作。

def process_payment(payment, currency):
if currency == "USD" or currency == "EUR":
process_standard_payment(payment)
else:
process_international_payment(payment)

# -> refactor
def process_payment(payment, currency):
if currency in ["USD", "EUR"]:
process_standard_payment(payment)
else:
process_international_payment(payment)

為了再次改進(jìn)這一點(diǎn),我們應(yīng)該在這里使用一個(gè)集合。在集合中查找值更快,而且無論如何我們都想要這里的唯一元素,所以集合是更好的選擇。

# -> refactor
def process_payment(payment, currency):
if currency in {"USD", "EUR"}:
process_standard_payment(payment)
else:
process_international_payment(payment)

8. 將 for 循環(huán)中的 yield 替換為 yield from

如果你已經(jīng)熟悉生成器,那么這是一個(gè)高級技巧。一個(gè)經(jīng)常被忽略的小技巧是 Python 的 yield? 關(guān)鍵字對于可迭代對象有一個(gè)對應(yīng)的yield from。

如果你有一個(gè)像列表這樣的可迭代對象,而不是說for item in iterable: yield item?,你可以簡單地說yield from iterable。這更短,并且消除了對可迭代對象的手動循環(huán),這也可以提高性能。

def get_content(entry):
for block in entry.get_blocks():
yield block

# -> refactor
def get_content(entry):
yield from entry.get_blocks()
責(zé)任編輯:武曉燕 來源: 數(shù)據(jù)STUDIO
相關(guān)推薦

2023-02-06 12:00:00

重構(gòu)PythonPythonic

2023-09-26 12:04:15

重構(gòu)技巧Pythonic

2025-02-17 08:50:00

CSS代碼JavaScript

2025-02-13 12:52:27

JavaScrip代碼開發(fā)

2024-03-27 14:06:58

Python代碼開發(fā)

2025-04-03 08:27:00

Python代碼開發(fā)

2012-10-29 11:01:17

2025-06-04 08:15:00

Python編程代碼

2024-03-21 09:58:27

ExtractTypeScript工具類型

2022-12-15 16:38:17

2025-05-09 09:26:12

2024-04-01 07:51:49

Exclude?工具類型TypeScript

2021-12-10 13:06:37

低代碼無代碼開發(fā)人員

2024-06-27 10:45:27

2024-03-06 13:56:00

項(xiàng)目awaitpromise

2010-09-09 13:44:06

DIVCSS

2023-10-24 09:25:23

IT技巧文化

2010-08-25 11:14:05

云安全數(shù)據(jù)安全網(wǎng)絡(luò)安全

2010-08-11 16:43:05

職場

2011-09-25 10:46:18

云計(jì)算安全
點(diǎn)贊
收藏

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

久久草.com| 日韩中文字幕国产| 国产另类第一区| 欧美绝顶高潮抽搐喷水合集| 亚洲女同一区二区| av电影成人| 伊人成综合网伊人222| 国产亚洲精品综合一区91| 天堂在线中文资源| 亚洲欧洲精品一区二区三区不卡| 亚洲一区二区高清视频| 欧美日韩综合| 国产噜噜噜噜久久久久久久久| 日本在线影院| 在线观看日韩电影| 特级全黄一级毛片| 不卡的av网站| 欧美精品成人网| 国产精品久久久久久一区二区三区| 吴梦梦av在线| 国产99精品国产| 欧美一区二区激情| 成人午夜私人影院| 国产精品久久久久9999爆乳| 玖玖国产精品视频| 99国产精品白浆在线观看免费| 激情综合电影网| 日韩影视精品| 丁香六月综合激情| 国产成人无码一二三区视频| 久久久噜噜噜久噜久久综合| 免费男同深夜夜行网站| 国产欧美日韩综合| 亚洲综合图片| 亚洲成人亚洲激情| 高清精品久久| 91精品国产综合久久香蕉| 欧美aⅴ99久久黑人专区| 国产精品初高中精品久久| 免费成人在线网站| 欧美成人免费高清视频| 玉米视频成人免费看| 免费a在线观看| 亚洲欧洲日韩国产| av一区二区高清| 欧美性猛交xxx| 色偷偷色偷偷色偷偷在线视频| 久久精品成人一区二区三区| 亚洲午夜久久| 日韩精品无码一区二区三区| 国产欧美一区二区精品性| 色鬼7777久久| 久久天天躁狠狠躁夜夜av| 久久久久免费av| 九一国产精品视频| 欧美精品aⅴ在线视频| 亚洲精品一区二区三区在线| 国产精品一区二区a| 国产精品传媒视频| 麻豆视频在线观看免费网站黄| 人人爽久久涩噜噜噜网站| 国产精品综合av一区二区国产馆| 激情视频免费| 91久久久久久久久久久久久| 欧美另类亚洲| 国产亚洲福利社区| 精品欧美一区二区三区| 欧美一区二区三区另类 | 亚洲成人激情av| 青青青伊人色综合久久| 国产极品一区| 色资源网在线观看| 国产精品三级一区二区| 97视频在线观看免费高清完整版在线观看 | 国产不卡视频在线| 色综合视频一区二区三区高清| 在线播放日韩| 桃色av一区二区| 嫩草影院永久入口| 久久精品国产精品亚洲精品色| 久久久久免费视频| 久久99九九99精品| 亚洲图片88| 色多多视频在线播放| 欧美精品一区二区三区久久| 亚洲国产精品悠悠久久琪琪| 国产免费观看久久| 久久综合影音| 日韩一区二区三区免费播放| 亚洲伦乱视频| 午夜激情视频在线| 久久久精品在线视频| 日韩av不卡在线播放| 日韩成人在线播放| 天天影视色香欲综合网老头| 蜜臀av国产精品久久久久| 九九综合九九| 九九久久国产| 成入视频在线观看| 国产日韩精品在线看| 天天干天天综合| 亚洲 欧美 综合 另类 中字| 欧美日韩喷水| 波多野结衣成人在线| 亚洲精品欧美一区二区三区| 日韩美女视频免费看| 国产精品第三页| 国产精品第一区| 欧美日高清视频| 久久国产精品免费| 欧美电影在线观看完整版| a视频在线免费看| 亚州福利视频| 久久精品国产精品青草色艺| 亚洲精品在线观看www| 色天使久久综合网天天| 92国产精品观看| 女人色偷偷aa久久天堂| 午夜视频一区二区在线观看| 国产一级网站视频在线| www日韩视频| 欧美高清性xxxxhdvideosex| 7m精品福利视频导航| 日韩大片在线观看视频| 欧美三区免费完整视频在线观看| 国产亚洲一本大道中文在线| 欧美fxxxxxx另类| 精品国产aⅴ| 久久a爱视频| 青草综合视频| 少妇av在线| 在线看三级电影| 成人精品一区二区| 波多野结衣av在线| 国产精品久久久久永久免费看| 免费观看亚洲视频| 水蜜桃一区二区三区| 成人自拍爱视频| 91精品视频免费看| 国产在线一区二区三区| 日本免费久久高清视频| 97福利一区二区| 欧美在线一区二区视频| 57pao成人永久免费视频| 97免费中文视频在线观看| 欧美高清无遮挡| 国语自产精品视频在免费| 久久免费精品视频| 日韩免费在线看| 国产噜噜噜噜久久久久久久久| 成人在线观看视频网站| 国产精品一区二区欧美黑人喷潮水| 成人免费看片网站| 91制片厂免费观看| 中文字幕一区二区三区四区在线视频| 91看片在线免费观看| 日本高清好狼色视频| 国产高清美女一级毛片久久| 毛片在线不卡| 国产精品久久久久久妇女| 91欧美日韩在线| 中国成人一区| 国产一区二区0| 性久久久久久久| 免费视频久久| 中文字幕乱码久久午夜不卡| 日韩欧美一区视频| 国产亚洲精品高潮| 国产日本欧美一区二区三区| 午夜精品福利一区二区| 艹b视频在线观看| 国产网红在线观看| 色先锋久久影院av| 免费成人美女在线观看| 国产欧美日产一区| 亚洲国产成人91精品| 17婷婷久久www| 亚洲欧美日韩国产yyy| h网站在线播放| 国产免费不卡| 亚洲午夜极品| 久久麻豆一区二区| 欧美精品一区二| 精品久久sese| 午夜免费啪视频观看视频| 97人人在线视频| 石原莉奈在线亚洲三区| 亚洲一区二区三区小说| xxxxx成人.com| 亚洲日本japanese丝袜| 国产高清在线观看| 欧美电影一区| 亚洲摸摸操操av| 欧美激情videoshd| 四虎永久在线精品无码视频| 二吊插入一穴一区二区| 激情综合色丁香一区二区| 精品噜噜噜噜久久久久久久久试看 | 久久综合久久八八| 国产91porn|