91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么重構冗長的Python代碼

發布時間:2023-05-06 14:56:39 來源:億速云 閱讀:98 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么重構冗長的Python代碼”,在日常操作中,相信很多人在怎么重構冗長的Python代碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么重構冗長的Python代碼”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.將for循環轉換為list/dictionary/set 表達式

我們在時經常遇到的一個情況是,創建一個值的集合。

比如我們創建一個列表,然后迭代地用值填充它,這里我們想創建一個立方數字的列表。大多數語言的標準方法如下:

cubes = []
for i in range(20):
    cubes.append(i ** 3)

在Python中,我們可以使用列表表達式,生成需要的數據。就可以將代碼簡化為一行,省去定義列表,然后再去填充列表的略顯繁瑣的操作。

cubes = [i ** 3 for i in range(20)]

看,我們已經將三行代碼轉換成一行,這無疑是不錯的選擇——你的眼睛不用上下左右的檢查代碼。

把代碼壓縮到一行會使閱讀變得更加困難,但對于推導表達式來說,情況并非如此。您需要的所有元素都被很好地呈現出來,一旦您習慣了語法,它實際上比for循環版本更具可讀性。

另一點是賦值現在更像是一個原子操作——我們聲明什么是cubes,而不是給出如何構建它的指令。這使得代碼讀起來更舒適,因為我們關心變量cubes是什么,而不是它的構造細節。

最后,表達式通常比在循環中構建集合更快,如果考慮性能,這也是重要因素。

2.用增量賦值替換賦值

增量賦值是一種快速而簡單的Python語法。

只要有這樣的代碼:

count = count + other_value

都可以替換成下面的代碼:

count += other_value

代碼是簡短和清晰的-我們不需要考慮計數變量兩次。其他可以使用的運算符包括-=, =,/=和 *=。

不過有件事需要稍微小心一點,你要分配給的類型必須定義適當的運算符。例如,numpy數組不支持/=操作。

3.只使用一次的內聯變量

我們在人們的代碼中經常看到的一種情況是將結果賦給臨時變量,然后立即返回它。

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

其實更好的方法是直接返回結果,而不是再用一個臨時變量存放結果

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

這樣可以縮短代碼并刪除不必要的變量,從而減少閱讀代碼的腦力消耗。

臨時變量可能有用的地方是,如果它們被用作參數或條件,并且名稱可以代表內容。在上面的例子中,返回的是state屬性,并且state_attr沒有提供任何額外的信息。因此不必將結果賦給臨時變量。

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

經常會遇到的一種情況是,您經常希望將一個變量設置為兩個不同值中的一個。

if condition:
    x = 1
else:
    x = 2

這可以使用Python的條件表達式語法(python的三元運算符版本)在一行上編寫:

x = 1 if condition else 2

這肯定更簡潔,但它是一個更有爭議的重構(就像列表表達式)。一些程序員不喜歡這樣的表達式,因為覺得它們比完全寫出if條件更難解析。

我們的觀點是,只要條件表達式很短并且適合合并,那就是一種改進,提升效率。與列表表達式的示例類似,當我們閱讀代碼時,通常不需要知道x是如何分配的,只需看到它被賦值,然后繼續向前。

5.用生成器代替不需要的表達式

一個技巧是像any、all和sum這樣的函數允許傳入generator而不是collection。這意味著,與其這樣做:

hat_found = any([is_hat(item) for item in wardrobe])

可以將代碼改成:

hat_found = any(is_hat(item) for item in wardrobe)

這將刪除一對括號,使代碼稍微清晰一些。如果any函數找到結果,會立即返回,而不必構建整個列表。這可以導致性能提升。

請注意,我們實際上是將生成器傳遞到any()中,嚴格地說,代碼應該如下所示:

hat_found = any(is_hat(item) for item in wardrobe)

但是Python允許您省略這對括號。下面是接受generator的標準庫函數:

'all', 'any', 'enumerate', 'frozenset', 'list', 'max', 'min', 'set', 'sum', 'tuple'

6.將條件簡化為return語句

最后介紹的重構技巧是,函數需要返回結果是True或False的情況。一種常見的方法是:

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

但是,直接返回結果會更簡潔,如下所示:

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

只有當表達式的計算結果為布爾值時,才能這樣操作。例如

def any_hats():
    hats = [item for item in wardrobe if is_hat(item)]
    if hats or self.wearing_hat():
        return True
    return False

這個示例,可以通過bool()將hat和self.wearing_hat()合成bool列表,就可以消除if條件,達到簡化程序的目的。

def any_hats():
    hats = [item for item in wardrobe if is_hat(item)]
    return bool(hats or self.wearing_hat())

到此,關于“怎么重構冗長的Python代碼”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五原县| 尼木县| 锡林郭勒盟| 牟定县| 扎囊县| 绵阳市| 萝北县| 青铜峡市| 普定县| 鄂州市| 临海市| 余姚市| 民丰县| 宜宾市| 灌阳县| 陆良县| 呼图壁县| 星子县| 会同县| 永宁县| 铁岭市| 石首市| 舞阳县| 获嘉县| 瑞昌市| 铜山县| 抚顺县| 静海县| 金川县| 华容县| 南平市| 大同市| 曲松县| 台安县| 内江市| 都昌县| 屏东县| 菏泽市| 新乐市| 周口市| 丽江市|