最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談如何重構(gòu)冗長的Python代碼

 更新時間:2023年04月10日 10:43:15   作者:程序員老華  
這篇文章主要介紹了淺談如何重構(gòu)冗長的Python代碼,編寫干凈的?Pythonic?代碼就是盡可能使其易于理解,但又簡潔,過長的代碼如何做到簡潔高效,需要的朋友可以參考下

【導語】:對自己寫的冗長代碼,想重構(gòu)但又無思路?小編整理了系列介紹python代碼重構(gòu)優(yōu)化的方法,助你一臂之力。

編寫干凈的 Pythonic 代碼就是盡可能使其易于理解,但又簡潔。

這是 Python 重構(gòu)系列中的之一,本系列文章的重點是為什么這些重構(gòu)是好主意,而不僅僅是如何做。

1.將for循環(huán)轉(zhuǎn)換為list/dictionary/set 表達式

我們在時經(jīng)常遇到的一個情況是,創(chuàng)建一個值的集合。

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

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

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

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

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

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

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

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

2.用增量賦值替換賦值

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

只要有這樣的代碼:

count = count + other_value

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

count += other_value

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

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

3.只使用一次的內(nèi)聯(lián)變量

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

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

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

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

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

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

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

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

if condition:
    x = 1
else:
    x = 2

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

x = 1 if condition else 2

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

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

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

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

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

可以將代碼改成:

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

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

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

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

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

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

6.將條件簡化為return語句

最后介紹的重構(gòu)技巧是,函數(shù)需要返回結(jié)果是True或False的情況。一種常見的方法是:

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

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

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

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

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())

到此這篇關(guān)于淺談如何重構(gòu)冗長的Python代碼,的文章就介紹到這了,更多相關(guān)重構(gòu)Python代碼,內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python手繪可視化工具cutecharts使用實例

    Python手繪可視化工具cutecharts使用實例

    這篇文章主要介紹了Python手繪可視化工具cutecharts使用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • django model通過字典更新數(shù)據(jù)實例

    django model通過字典更新數(shù)據(jù)實例

    這篇文章主要介紹了django model通過字典更新數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python創(chuàng)建一個功能齊全的隨機驗證碼生成器

    Python創(chuàng)建一個功能齊全的隨機驗證碼生成器

    驗證碼通過生成一張包含難以識別的文本、數(shù)字或圖像的圖像,要求用戶正確輸入其中的內(nèi)容,用于驗證用戶身份,本篇教程將帶領(lǐng)您一步步使用Python創(chuàng)建一個功能齊全的隨機驗證碼生成器,我們將通過導入必要的庫、定義輔助函數(shù)以及編寫主函數(shù)check_code()
    2024-04-04
  • Python實例解析圖像形態(tài)學運算技術(shù)

    Python實例解析圖像形態(tài)學運算技術(shù)

    形態(tài)學處理方法是基于對二進制圖像進行處理的,卷積核決定圖像處理后的效果。本文將為大家詳細介紹一下OpenCV中的圖像形態(tài)學,感興趣的可以了解一下
    2022-03-03
  • Python局部變量與全局變量區(qū)別原理解析

    Python局部變量與全局變量區(qū)別原理解析

    這篇文章主要介紹了Python局部變量與全局變量區(qū)別原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 在python3中實現(xiàn)查找數(shù)組中最接近與某值的元素操作

    在python3中實現(xiàn)查找數(shù)組中最接近與某值的元素操作

    今天小編就為大家分享一篇在python3中實現(xiàn)查找數(shù)組中最接近與某值的元素操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python構(gòu)建指數(shù)平滑預測模型示例

    python構(gòu)建指數(shù)平滑預測模型示例

    今天小編就為大家分享一篇python構(gòu)建指數(shù)平滑預測模型示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python腳本實現(xiàn)小猿口算

    Python腳本實現(xiàn)小猿口算

    最近小猿口算已經(jīng)被不少大學生攻占,一個好好的給小學生的口算題已經(jīng)變成了大學生的計算機大戰(zhàn),下面我們就來看看如何使用Python腳本就行吧小猿口算
    2024-10-10
  • Django 實現(xiàn)購物車功能的示例代碼

    Django 實現(xiàn)購物車功能的示例代碼

    這篇文章主要介紹了Django 實現(xiàn)購物車功能的示例代碼,實現(xiàn)了刪除產(chǎn)品和顯示購物車的一系列購物車的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 關(guān)于python xlwings模塊用法詳解

    關(guān)于python xlwings模塊用法詳解

    xlwings是一個用于在Excel和Python之間進行交互的庫,它允許您使用Python操作Excel文件,包括讀取和寫入數(shù)據(jù),運行宏,設(shè)置格式等等,我們可以使用xlwings來處理Excel文件中的數(shù)據(jù),執(zhí)行各種操作,所以本文小編就給大家python xlwings模塊用法
    2023-09-09

最新評論

白银市| 秀山| 伊春市| 八宿县| 玛多县| 闵行区| 于都县| 诏安县| 昌邑市| 合肥市| 扬中市| 洮南市| 安泽县| 印江| 阳泉市| 江城| 忻城县| 龙门县| 修水县| 大城县| 定结县| 余庆县| 望江县| 忻州市| 临洮县| 上蔡县| 大宁县| 竹溪县| 无极县| 江永县| 乌拉特后旗| 景德镇市| 锡林郭勒盟| 克什克腾旗| 油尖旺区| 东方市| 呼伦贝尔市| 团风县| 涞源县| 枣阳市| 武鸣县|