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

五大代碼異味:你需要提高警惕了!

開發(fā) 前端
代碼異味是弱點(diǎn)或設(shè)計(jì)缺陷的標(biāo)志,可能會(huì)在可讀性、可維護(hù)性和可拓展性上導(dǎo)致問題,通常是由不當(dāng)做法和未使用正確的工具導(dǎo)致的。

 本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。

作為廣泛應(yīng)用的警告標(biāo)志,與字面意思不同,代碼異味并不是指代碼中需要立即注意的漏洞。相反,它反映出代碼中更深層次的問題,更確切地說是代碼中的裂縫,如果不加以糾正,這些問題可能會(huì)在未來導(dǎo)致更嚴(yán)重的后果。

代碼異味是弱點(diǎn)或設(shè)計(jì)缺陷的標(biāo)志,可能會(huì)在可讀性、可維護(hù)性和可拓展性上導(dǎo)致問題,通常是由不當(dāng)做法和未使用正確的工具導(dǎo)致的。

Python是最流行的語言之一,這在很大程度上與其相當(dāng)容易的學(xué)習(xí)曲線和高度偽英語句法有關(guān),而這卻容易令人陷入單一的做事方法。本文中,我們將了解一些典型的Python代碼異味案例以及如何避免它們。

[[335928]]

可變默認(rèn)參數(shù)

在Python中,使用默認(rèn)參數(shù)是一個(gè)很常見的操作,你可以設(shè)置一個(gè)預(yù)定值,并在調(diào)用時(shí)選擇更改。這在設(shè)置文字、數(shù)字或布爾值時(shí)很有用,因?yàn)橛兄诒苊獬霈F(xiàn)較長的有冗余值的參數(shù)列表。

但是將可變的值設(shè)置為默認(rèn)參數(shù)可能是危險(xiǎn)的,并且會(huì)導(dǎo)致bug。來看以下示例:

  1. def addElements(a=[]): 
  2.     a.append(5) 
  3.     return aaddElements() 
  4. # [5] 
  5. addElements() 
  6. # [5, 5] 

相同的函數(shù)在每次調(diào)用時(shí)給出不同的結(jié)果。Python中可變默認(rèn)值的問題是它們只在定義函數(shù)時(shí)計(jì)算一次。每次調(diào)用函數(shù)時(shí),使用變異值,可能會(huì)導(dǎo)致意外的問題,因?yàn)楦櫤瘮?shù)調(diào)用真的很麻煩。

因此,使用None作為默認(rèn)值,并在函數(shù)中分配可變變量是更安全的,因?yàn)槟悴粫?huì)以可維護(hù)性問題結(jié)束,只有在確定需要時(shí)才使用可變的默認(rèn)參數(shù)。

選擇 `range` 而不是`enumerate`

Python的for循環(huán)不是最常用的代碼編寫方式,但有時(shí)也會(huì)需要到。現(xiàn)在,Python中的for 循環(huán)的運(yùn)行與其他語言不同,你可能會(huì)本能地以非慣用的方式編寫傳統(tǒng)風(fēng)格的range(len()),如下所示:

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

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

使用enumerator能提供一個(gè)元組的優(yōu)勢(shì),該元組負(fù)責(zé)同時(shí)跟蹤索引值和元素。除了更簡便,優(yōu)化程度還更高,它還提供了可選的第二個(gè)參數(shù)來設(shè)置數(shù)值。

  1. for i, name in enumerate(names): 
  2.    print(i, name) 

忽略內(nèi)置函數(shù)和過度循環(huán)

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

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

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

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

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

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

濫用列表解析

列表解析能靈活創(chuàng)建列表,功能強(qiáng)大,但很容易被誤用或?yàn)E用,來看一些案例。

(1) 在不需要時(shí)過度進(jìn)行列表解析

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

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

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

列表解析有助于輕松定義和創(chuàng)建列表,但它們始終存儲(chǔ)于內(nèi)存中。如果不使用系統(tǒng)進(jìn)程,將有可能損害大數(shù)量的數(shù)據(jù)。因此,使用生成器表達(dá)式是更好的選擇,因?yàn)樗葱枰淮渭虞d一個(gè)值。

嵌套分析也需要關(guān)注,因?yàn)檫@可能導(dǎo)致可讀性問題,知道什么時(shí)候使用它,什么時(shí)候回退到for循環(huán)上是很重要的。

喜歡布爾標(biāo)志參數(shù)和全局變量

布爾是最容易學(xué)習(xí)的數(shù)據(jù)類型。在Python中,提供命名參數(shù)使工作輕松得多。但是,它們很容易產(chǎn)生嵌套if else塊的復(fù)雜代碼并導(dǎo)致可讀性問題。多個(gè)布爾存在隱藏的依賴關(guān)系,會(huì)產(chǎn)生一些問題。因而最好使用枚舉,而不是多布爾邏輯。Enum數(shù)據(jù)類型是可擴(kuò)展的,可以確保更好的代碼結(jié)構(gòu)。

全局變量在所有語言中都是麻煩的,Python也是如此。雖然有時(shí)我們確實(shí)需要使用它們,但將其誤用作傳遞或訪問數(shù)據(jù)的快捷方式可能很危險(xiǎn),因?yàn)樗勺儭?/p>

跟蹤它的狀態(tài)會(huì)很棘手,因?yàn)槟阌肋h(yuǎn)不知道誰可能會(huì)改變它。如果開始到處使用全局變量,命名沖突則會(huì)導(dǎo)致命名空間受到不好的影響。

[[335929]]

圖源:unsplash

我們都見過代碼異味,神秘的注釋、多余的字符串文字和神奇的數(shù)字也算代碼異味。在編寫注釋時(shí),重要的是要說明“為什么”部分,因?yàn)?ldquo;什么”部分應(yīng)該從代碼本身得到解釋。

你得學(xué)會(huì)快速定位到代碼異味并將其去除。

 

責(zé)任編輯:趙寧寧 來源: 讀芯術(shù)
相關(guān)推薦

2011-07-27 10:37:28

IT安全安全錯(cuò)誤

2015-07-07 10:03:55

2009-09-03 20:24:43

2014-02-14 13:32:29

2024-02-06 12:05:43

2022-04-22 08:00:00

TEE安卓手機(jī)

2011-03-21 11:02:40

2016-11-02 16:13:19

代碼開發(fā)技能

2023-02-19 15:20:19

2021-09-09 14:59:56

智能家居設(shè)備智能家居物聯(lián)網(wǎng)

2010-05-06 08:55:23

ADO.NET

2010-09-09 14:22:58

2019-06-04 10:40:07

2017-11-02 06:18:26

2018-02-01 07:05:34

2015-01-21 15:01:32

手游開發(fā)中小開發(fā)者

2020-11-03 10:09:46

機(jī)器學(xué)習(xí)論文代碼

2018-10-15 11:24:49

2016-10-28 15:52:04

數(shù)據(jù)中心數(shù)據(jù)中心效率

2013-09-24 10:20:35

代碼代碼異味
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 午夜在线观看视频 | 成人精品 | 91香蕉嫩草 | 国产成人精品一区二区在线 | 81精品国产乱码久久久久久 | 一道本在线 | 欧美一级二级三级视频 | 欧美激情在线播放 | 久久久综合色 | 在线资源视频 | 亚洲精品免费在线 | 日本色综合 | 中文字幕成人在线 | 久久精品电影 | 午夜小电影 | 精品久久中文字幕 | 三级高清 | 欧美成人专区 | 中文在线视频 | 中文字幕亚洲精品 | 国产精品久久久久久久久久免费看 | 精品国产乱码久久久久久闺蜜 | 久草精品在线 | 人人爱干 | 久久国产婷婷国产香蕉 | 麻豆久久久9性大片 | 欧美日韩亚洲视频 | 国产精品中文字幕在线观看 | 黄色av网站在线观看 | 亚洲精品一区二区 | 欧美精品久久久 | 丁香婷婷久久久综合精品国产 | www.youjizz.com日韩 | 91精品国产91久久久久久三级 | 欧美乱大交xxxxx另类电影 | 久久久国产网站 | 久久久成 | 日本成人中文字幕在线观看 | 日本精品免费 | 狠狠干网站 | 国产精品一区二区三区四区五区 |