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

八個重構技巧使得Python代碼更Pythonic

開發 前端
我們可以把這個 else 子句移到最開始。這也稱為警示聲明。所以如果條件不成立,我們就不會執行其余的函數代碼。這樣就去掉了一個 else 子句,現在整個代碼中的縮進少了一層。這看起來更清晰,也更容易理解。

1.合并嵌套的if語句

我們從簡單的開始。不要像這樣嵌套 if 語句,只需將它們合并為一個即可。

if a:
if b:
pass

# -> refactor
if a and b:
pas

2.使用 any 而不是循環

這里我們要檢查列表中是否至少有一個正元素。更長的解決方案是遍歷所有數字,檢查當前數字,然后在條件為真時中斷。但是對于這個任務,在 Python 中有一個專門的方法,即 any? 函數。如果可迭代對象的任何元素為真,則 any 返回 True。這比手動循環要短得多,也更像 pythonic。

numbers = [-1, -2, -4, 0, 3, -7]
has_positives = False
for n in numbers:
if n > 0:
has_positives = True
break

# -> refactor
has_positives = any(n > 0 for n in numbers)

3.從 for/while 循環中提取語句

很多時候你會看到循環中定義了一個變量,但它永遠不會改變。這些都是不必要的操作,所以把它從循環中拉出來,然后你只需要創建一次。

for building in buildings:
city = 'London'
addresses.append(building.street_address, city)

# -> refactor
city = 'London'
for building in buildings:
addresses.append(building.street_address, city)

4.去除只使用一次并立即返回的內聯變量

很多時候你會看到代碼在最后一個函數中定義了一個變量,一行之后它立即返回。如果清楚函數是干什么的,直接返回結果即可。這樣更簡潔并且避免了不必要的變量。但是,有時如果不是很清楚函數在做什么,可以給最后一個變量一個有意義的名稱并將其用作自文檔代碼。

def state_attributes(self):
"""Return the state attributes."""
state_attr = {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}
return state_attr

# -> refactor
def state_attributes(self):
"""Return the state attributes."""
return {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}

5.用if表達式替換if語句

不用 if else? 語句來設置變量的值,你可以像這樣用 if 表達式在一行中設置它。不過,這種重構技術有點值得商榷。有些人仍然喜歡第一個選項,這很好。

if condition:
x = 1
else:
x = 2

# -> refactor
x = 1 if condition else 2

6.添加警示聲明

查看此代碼時,很難快速掌握正在發生的事情。有多個 if-else 語句和多個縮進。一旦你仔細觀察,你可能會發現第一個 if 語句幾乎覆蓋了整個函數代碼,只是在最后我們有相應的 else 子句,我們只返回 False。

我們可以把這個 else 子句移到最開始。這也稱為警示聲明。所以如果條件不成立,我們就不會執行其余的函數代碼。這樣就去掉了一個 else 子句,現在整個代碼中的縮進少了一層。這看起來更清晰,也更容易理解。

def should_i_wear_this_hat(self, hat):
if isinstance(hat, Hat):
current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish
else:
return False

# -> refactor
def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish

7.將分配移近用法位置

這是上一個示例的改進代碼,但仍然需要一些時間才能理解這里發生的事情。所以我們想檢查我們是否應該戴帽子。邏輯是這樣的:如果正在下雨,我們總是說 True?,如果沒有下雨,如果帽子很時尚,我們就說 True?。我們可以大大提高此邏輯的可讀性的一種簡單方法是將分配移至更接近其用法的位置。在使用 if? 語句之前我們需要先了解天氣情況。現在 fashion? 和 style? 變量只在 else 子句中需要,所以將它們向下移動。現在應該更清楚發生了什么。

前面第 4 條中,我們可以進一步縮短代碼并立即返回評估樣式結果。而在這個例子中,is_stylish? 是個更好名字,因為它告訴你,知道如果帽子很時尚,你就說 True?,否則就說 False。所以這里把多余的變量留著就好了。

def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

current_fashion = get_fashion()
weather_outside = self.look_out_of_window()
is_stylish = self.evaluate_style(hat, current_fashion)
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
return is_stylish

# -> refactor
def should_i_wear_this_hat(self, hat):
if not isinstance(hat, Hat):
return False

weather_outside = self.look_out_of_window()
if weather_outside.is_raining:
print("Damn.")
return True
else:
print("Great.")
current_fashion = get_fashion()
return self.evaluate_style(hat, current_fashion)
# is_stylish = self.evaluate_style(hat, current_fashion)
# return is_stylish

8.簡化序列檢查

這是我經常看到的另一件事。當你需要檢查集合中是否有元素時,例如在列表中,你不需要寫if len(your_list) > 0?. 你可以簡單地說if your_list。這是 pep 8 推薦的方法,也稱為真值測試。這是可能的,因為在 Python 中,空序列和集合的計算結果為 False。所以這可以應用于字符串、元組、列表、字典和集合。

if len(list_of_hats) > 0:
hat_to_wear = choose_hat(list_of_hats)

# -> refactor
if list_of_hats:
hat_to_wear = choose_hat(list_of_hats)
責任編輯:武曉燕 來源: 數據STUDIO
相關推薦

2023-09-26 12:04:15

重構技巧Pythonic

2023-01-11 11:35:40

重構PythonPythonic

2025-02-17 08:50:00

CSS代碼JavaScript

2025-02-13 12:52:27

JavaScrip代碼開發

2024-03-27 14:06:58

Python代碼開發

2025-04-03 08:27:00

Python代碼開發

2012-10-29 11:01:17

2025-06-04 08:15:00

Python編程代碼

2025-05-09 09:26:12

2024-04-01 07:51:49

Exclude?工具類型TypeScript

2024-03-21 09:58:27

ExtractTypeScript工具類型

2022-12-15 16:38:17

2021-12-10 13:06:37

低代碼無代碼開發人員

2024-06-27 10:45:27

2025-01-02 15:08:36

SpringBoot自動配置Java

2010-08-25 11:14:05

云安全數據安全網絡安全

2011-09-25 10:46:18

云計算安全

2010-09-09 13:44:06

DIVCSS

2025-02-07 15:01:49

Promise數組前端

2022-05-30 00:04:16

開源Github技巧
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色综合久久久 | 亚洲综合视频一区 | 久久最新 | 亚洲网站在线观看 | 国产午夜精品一区二区三区 | 精品久久久久久久久久久下田 | 国产成人一区二区三区 | 一区在线视频 | 亚洲成人免费在线观看 | 国产精品一区久久久 | 精品中文字幕久久 | 日日日干干干 | 亚洲经典一区 | 日本一区二区三区在线观看 | 免费日本视频 | 成人av激情| 国产精品久久亚洲7777 | 亚洲高清在线 | 97久久精品午夜一区二区 | 蜜桃特黄a∨片免费观看 | 高清免费在线 | 99久久精品免费看国产四区 | 午夜免费视频 | 久久久精品久久 | 美国一级黄色片 | 午夜一级做a爰片久久毛片 精品综合 | 日韩精品一区二区三区视频播放 | 国产69精品久久99不卡免费版 | 国产午夜精品一区二区三区嫩草 | 男女视频在线观看免费 | 国产精品美女久久久久aⅴ国产馆 | 日本a视频 | 精品熟人一区二区三区四区 | 国产精品久久久久久亚洲调教 | 欧美亚洲国语精品一区二区 | 国产精品一区在线观看 | 中文字幕精品一区久久久久 | 一区二区三区视频在线观看 | 日日骚网 | 国产午夜精品一区二区三区四区 | 国产一区二区三区视频 |