中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Python中五大代碼異味是什么

發布時間:2021-10-29 15:30:48 來源:億速云 閱讀:161 作者:iii 欄目:web開發

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

可變默認參數

在Python中,使用默認參數是一個很常見的操作,你可以設置一個預定值,并在調用時選擇更改。這在設置文字、數字或布爾值時很有用,因為有助于避免出現較長的有冗余值的參數列表。

但是將可變的值設置為默認參數可能是危險的,并且會導致bug。來看以下示例:

def addElements(a=[]):     a.append(5)     return aaddElements() # [5] addElements() # [5, 5]

相同的函數在每次調用時給出不同的結果。Python中可變默認值的問題是它們只在定義函數時計算一次。每次調用函數時,使用變異值,可能會導致意外的問題,因為跟蹤函數調用真的很麻煩。

因此,使用None作為默認值,并在函數中分配可變變量是更安全的,因為你不會以可維護性問題結束,只有在確定需要時才使用可變的默認參數。

選擇 `range` 而不是`enumerate`

Python的for循環不是最常用的代碼編寫方式,但有時也會需要到。現在,Python中的for  循環的運行與其他語言不同,你可能會本能地以非慣用的方式編寫傳統風格的range(len()),如下所示:

names =["a", "b", "c"]for i in range(len(names)):     print(i, names[i])

重復基于C-style索引的循環是相當常見的,但這是一種不當做法。其迫使你通過顯式索引變量訪問元素,所以它不僅Python特性不明顯,而且還存在可讀性問題。

使用enumerator能提供一個元組的優勢,該元組負責同時跟蹤索引值和元素。除了更簡便,優化程度還更高,它還提供了可選的第二個參數來設置數值。

for i, name in enumerate(names):    print(i, name)

忽略內置函數和過度循環

循環不是不能用,但在其中應用轉換操作時,它可能會導致冗長的條件代碼。在這種情況下,不要忽略已經可以使用的內置函數,如map()filter()和reduce(),這是非常重要的。更重要的是,Python提供了列表解析,這顯然是最具Python特性的替換循環方法。

嵌套for循環是代碼異味的另一個典型例子。Python程序員在進行模式匹配或一起運行多個迭代時很容易中槍。下列代碼一旦再加幾行就會看起來不美觀:

for x in listA:     for y in listB:         r.append((x, y))

使用itertools不僅可以提高性能,還更簡潔明了。看看上面的代碼在itertools.product()中有多整潔:

for x, y in itertools.product(listA,listB):         r.append((x, y))

通過使用上面的product,也可以很容易地將其傳遞到其他高階函數中。同時在多個列表上同時迭代時,使用zip()函數也不錯(如需索引,還可以使用enumerator)。

濫用列表解析

列表解析能靈活創建列表,功能強大,但很容易被誤用或濫用,來看一些案例。

(1) 在不需要時過度進行列表解析

通常,我們開始沉迷于使用列表解析是為了嘗試花哨的東西,而不是真需要它。比如在簡單的情況下可以使用列表構造函數:

names =["A","B","C"][x.lower() for x in names]#use this list(map(str.lower, names))

(2) 在實際不存儲時使用列表解析

列表解析有助于輕松定義和創建列表,但它們始終存儲于內存中。如果不使用系統進程,將有可能損害大數量的數據。因此,使用生成器表達式是更好的選擇,因為它按需一次加載一個值。

嵌套分析也需要關注,因為這可能導致可讀性問題,知道什么時候使用它,什么時候回退到for循環上是很重要的。

喜歡布爾標志參數和全局變量

布爾是最容易學習的數據類型。在Python中,提供命名參數使工作輕松得多。但是,它們很容易產生嵌套if  else塊的復雜代碼并導致可讀性問題。多個布爾存在隱藏的依賴關系,會產生一些問題。因而最好使用枚舉,而不是多布爾邏輯。Enum數據類型是可擴展的,可以確保更好的代碼結構。

全局變量在所有語言中都是麻煩的,Python也是如此。雖然有時我們確實需要使用它們,但將其誤用作傳遞或訪問數據的快捷方式可能很危險,因為它可變。

跟蹤它的狀態會很棘手,因為你永遠不知道誰可能會改變它。如果開始到處使用全局變量,命名沖突則會導致命名空間受到不好的影響。

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

向AI問一下細節

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

AI

贵德县| 太仆寺旗| 诸城市| 建宁县| 富锦市| 乌审旗| 漳平市| 略阳县| 南安市| 墨脱县| 蓬莱市| 永平县| 东至县| 博白县| 高清| 仪陇县| 泊头市| 禹州市| 基隆市| 浦江县| 蒙城县| 揭阳市| 竹山县| 海阳市| 武穴市| 南康市| 嘉荫县| 缙云县| 朔州市| 于都县| 且末县| 德保县| 三亚市| 平舆县| 兴安盟| 彰武县| 德格县| 常州市| 醴陵市| 同德县| 盘山县|