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

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

開(kāi)發(fā) 前端
我們可以把這個(gè) else 子句移到最開(kāi)始。這也稱為警衛(wèi)聲明。所以如果條件不成立,我們就不會(huì)執(zhí)行其余的函數(shù)代碼。這樣就去掉了一個(gè) else 子句,現(xiàn)在整個(gè)代碼中的縮進(jìn)少了一層。這看起來(lái)更清晰,也更容易理解。

1.合并嵌套的if語(yǔ)句

我們從簡(jiǎn)單的開(kāi)始。不要像這樣嵌套 if 語(yǔ)句,只需將它們合并為一個(gè)即可。

if a:
    if b:
        pass

# -> refactor
if a and b:
    pass

2.使用 any 而不是循環(huán)

這里我們要檢查列表中是否至少有一個(gè)正元素。更長(zhǎng)的解決方案是遍歷所有數(shù)字,檢查當(dāng)前數(shù)字,然后在條件為真時(shí)中斷。但是對(duì)于這個(gè)任務(wù),在 Python 中有一個(gè)專門的方法,即 any 函數(shù)。如果可迭代對(duì)象的任何元素為真,則 any 返回 True。這比手動(dòng)循環(huán)要短得多,也更像 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 循環(huán)中提取語(yǔ)句

很多時(shí)候你會(huì)看到循環(huán)中定義了一個(gè)變量,但它永遠(yuǎn)不會(huì)改變。這些都是不必要的操作,所以把它從循環(huán)中拉出來(lái),然后你只需要?jiǎng)?chuàng)建一次。

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.去除只使用一次并立即返回的內(nèi)聯(lián)變量

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

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表達(dá)式替換if語(yǔ)句

不用 if else 語(yǔ)句來(lái)設(shè)置變量的值,你可以像這樣用 if 表達(dá)式在一行中設(shè)置它。不過(guò),這種重構(gòu)技術(shù)有點(diǎn)值得商榷。有些人仍然喜歡第一個(gè)選項(xiàng),這很好。

if condition:
    x = 1
else:
    x = 2

# -> refactor
x = 1 if condition else 2

6.添加保護(hù)條款

查看此代碼時(shí),很難快速掌握正在發(fā)生的事情。有多個(gè) if-else 語(yǔ)句和多個(gè)縮進(jìn)。一旦你仔細(xì)觀察,你可能會(huì)發(fā)現(xiàn)第一個(gè) if 語(yǔ)句幾乎覆蓋了整個(gè)函數(shù)代碼,只是在最后我們有相應(yīng)的 else 子句,我們只返回 False。

我們可以把這個(gè) else 子句移到最開(kāi)始。這也稱為警衛(wèi)聲明。所以如果條件不成立,我們就不會(huì)執(zhí)行其余的函數(shù)代碼。這樣就去掉了一個(gè) else 子句,現(xiàn)在整個(gè)代碼中的縮進(jìn)少了一層。這看起來(lái)更清晰,也更容易理解。

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.將分配移近它們的用途

這是上一個(gè)示例的改進(jìn)代碼,但仍然需要一些時(shí)間才能理解這里發(fā)生的事情。所以我們想檢查我們是否應(yīng)該戴帽子。邏輯是這樣的:如果正在下雨,我們總是說(shuō) True,如果沒(méi)有下雨,如果帽子很時(shí)尚,我們就說(shuō) True。我們可以大大提高此邏輯的可讀性的一種簡(jiǎn)單方法是將分配移至更接近其用法的位置。在使用 if 語(yǔ)句之前讓我們先了解天氣情況?,F(xiàn)在 fashion 和 style 變量只在 else 子句中需要,所以將它們向下移動(dòng)?,F(xiàn)在應(yīng)該更清楚發(fā)生了什么。

還記得我的第 4 條提示嗎?我們可以進(jìn)一步縮短代碼并立即返回評(píng)估樣式結(jié)果。然而,在這個(gè)例子中,我也喜歡 is_stylish 這個(gè)名字,因?yàn)樗屇阒廊绻弊雍軙r(shí)尚,你就說(shuō) True,否則就說(shuō) 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.簡(jiǎn)化序列檢查

這是我經(jīng)??吹降牧硪患?。當(dāng)你需要檢查集合中是否有元素時(shí),例如在列表中,你不需要寫if len(your_list) > 0. 你可以簡(jiǎn)單地說(shuō)if your_list。這是 pep 8 推薦的方法,也稱為真值測(cè)試。這是可能的,因?yàn)樵?Python 中,空序列和集合的計(jì)算結(jié)果為 False。所以這可以應(yīng)用于字符串、元組、列表、字典和集合。

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)
責(zé)任編輯:武曉燕 來(lái)源: 數(shù)據(jù)STUDIO
相關(guān)推薦

2023-01-11 11:35:40

重構(gòu)PythonPythonic

2023-02-06 12:00:00

重構(gòu)PythonPythonic

2025-02-13 12:52:27

JavaScrip代碼開(kāi)發(fā)

2025-02-17 08:50:00

CSS代碼JavaScript

2012-10-29 11:01:17

2024-03-27 14:06:58

Python代碼開(kāi)發(fā)

2025-06-04 08:15:00

Python編程代碼

2025-04-03 08:27:00

Python代碼開(kāi)發(fā)

2025-05-09 09:26:12

2024-04-01 07:51:49

Exclude?工具類型TypeScript

2024-06-27 10:45:27

2025-01-02 15:08:36

SpringBoot自動(dòng)配置Java

2010-08-25 11:14:05

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

2011-09-25 10:46:18

云計(jì)算安全

2010-09-09 13:44:06

DIVCSS

2025-02-07 15:01:49

Promise數(shù)組前端

2022-05-30 00:04:16

開(kāi)源Github技巧

2010-08-11 16:43:05

職場(chǎng)

2023-10-24 09:25:23

IT技巧文化

2024-03-21 09:58:27

ExtractTypeScript工具類型
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产一区二区三区久久 | 亚洲在线 | 国产精品久久久久久久久久久久 | 欧美视频免费在线 | 日韩精品在线观看视频 | 免费99视频 | 久久精品免费一区二区 | 一级黄色片网站 | 亚洲精品久久久久久一区二区 | 国产欧美一区二区三区久久手机版 | 国产特一级黄色片 | 日本电影网站 | 一级黄在线观看 | 欧美一区二区三区在线观看视频 | 亚洲福利视频网 | 久久不卡日韩美女 | 国产亚洲网站 | 成人国产精品久久 | 一区二区免费高清视频 | 在线观看免费观看在线91 | 久久精品国产一区二区电影 | 男女网站免费观看 | aaa大片免费观看 | 成人午夜免费网站 | 淫片专区| a国产视频 | 欧美精品一区二区三区一线天视频 | 在线看免费的a | 成人一区av偷拍 | 国产日韩一区二区三区 | 亚洲色片网站 | 91精品国产一区二区三区蜜臀 | 欧美日韩精品一区 | 91手机精品视频 | 在线看91 | 亚洲成人网在线观看 | 在线观看亚洲 | 欧美一区不卡 | 成人福利网 | 欧美一级黄色免费看 | 欧美一级片在线 |