日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python代码风格_Python编码风格,看这篇就够了

發(fā)布時(shí)間:2024/9/19 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python代码风格_Python编码风格,看这篇就够了 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果有人問(wèn)起 Python 程序員他們最喜歡 Python 哪一點(diǎn),他們一定會(huì)提到 Python 的高可讀性。確實(shí),對(duì)于 Python 來(lái)說(shuō),其高可讀性一直是 Python 這門(mén)語(yǔ)言設(shè)計(jì)的核心。一個(gè)不爭(zhēng)的事實(shí)是,相對(duì)于寫(xiě)代碼而言,讀代碼才是更加平常的事情。

Python 代碼有高可讀性的一個(gè)原因就是其有著相對(duì)而言更加完善的編碼風(fēng)格準(zhǔn)則和 「Python 化」習(xí)語(yǔ)。

當(dāng) Python 老手(Pythonista)認(rèn)為一段代碼不「Python 化」,他們通常的意思是這段代碼沒(méi)有遵循一般準(zhǔn)則,同時(shí)亦沒(méi)有以最佳的(最具可讀性的)方式表達(dá)出代碼的意圖。

在一些極端的情況下,沒(méi)有公認(rèn)最佳的方式來(lái)表達(dá) Python 代碼的意圖,不過(guò)這種極端情況非常罕見(jiàn)。

一般概念

明確代碼意義

盡管 Python 可以寫(xiě)出從各種意義上來(lái)說(shuō)都像是黑魔法的代碼,但最簡(jiǎn)單直白的表達(dá)才是正道。

不好def?make_complex(*args):

x,?y?=?args????return?dict(**locals())

好def?make_complex(x,?y):

return?{'x':?x,?'y':?y}

在上述好的代碼中,x 和 y 清晰明了的從參數(shù)中獲取值,并清晰明了的返回了一個(gè)字典。當(dāng)開(kāi)發(fā)者看到這個(gè)函數(shù)后就可以明了這個(gè)函數(shù)的用途,而不好的代碼則不行。

一行一個(gè)聲明語(yǔ)句

雖然在 Python 中我們推崇使用形如列表生成式這種簡(jiǎn)潔明了的復(fù)合語(yǔ)句,但是除此以外,我們應(yīng)該盡量避免將兩句獨(dú)立分割的代碼寫(xiě)在同一行。

不好的風(fēng)格print?'one';?print?'two'

if?x?==?1:?print?'one'

if??and?:

#?do?something

好的風(fēng)格print?'one'

print?'two'

if?x?==?1:

print?'one'

cond1?=?

cond2?=?

if?cond1?and?cond2:

#?do?something

函數(shù)的參數(shù)

函數(shù)的參數(shù)可以使用四種不同的方式傳遞給函數(shù)。

必選參數(shù) 是沒(méi)有默認(rèn)值的必填的參數(shù)。 必選參數(shù)是最簡(jiǎn)單的參數(shù)構(gòu)成,用于參數(shù)較少的函數(shù)的構(gòu)成,是該函數(shù)意義的一部分,使用他們的順序是按照定義自然排序的。舉個(gè)例子,對(duì)于 send(message, recipient) 和? point(x, y) 這兩個(gè)函數(shù),使用函數(shù)的人需要知道這個(gè)函數(shù)需要兩個(gè)參數(shù),并且記住兩個(gè)參數(shù)的順序。

在調(diào)用函數(shù)的時(shí)候,我們也可以使用參數(shù)的名稱(chēng)調(diào)用。使用參數(shù)的名稱(chēng)的方式可以調(diào)換參數(shù)的順序,就像 send(recipient='World',message='Hello') 和 point(y=2, x=1) 這樣。但這樣的做法會(huì)降低代碼的可讀性,并且使代碼冗長(zhǎng),因此更建議使用 send('Hello', 'World') 和 point(1,2) 這樣的方式調(diào)用。

關(guān)鍵字參數(shù) 是非強(qiáng)制的,且有默認(rèn)值。它們經(jīng)常被用在傳遞給函數(shù)的可選參數(shù)中。 當(dāng)一個(gè)函數(shù)有超過(guò)兩個(gè)或三個(gè)位置參數(shù)時(shí),函數(shù)簽名會(huì)變得難以記憶,使用帶有默認(rèn)參數(shù)的關(guān)鍵字參數(shù)有時(shí)候會(huì)給你帶來(lái)便利。比如,一個(gè)更完整的 send 函數(shù)可以被定義為 send(message, to, cc=None, bcc=None)。這里的 cc 和 bcc 是可選的, 當(dāng)沒(méi)有傳遞給它們其他值的時(shí)候,它們的值就是 None。

Python 中有多種方式調(diào)用帶關(guān)鍵字參數(shù)的函數(shù)。比如說(shuō),我們可以按照定義時(shí)的參數(shù)順序而無(wú)需明確的命名參數(shù)來(lái)調(diào)用函數(shù),就像 send('Hello', 'World', 'Cthulhu', 'God') 是將密件發(fā)送給上帝。我們也可以使用命名參數(shù)而無(wú)需遵循參數(shù)順序來(lái)調(diào)用函數(shù),就像 send('Hello again', 'World', bcc='God', cc='Cthulhu') 。沒(méi)有特殊情況的話,這兩種方式都需要盡力避免,最優(yōu)的調(diào)用方式是與定義方式一致:send('Hello', 'World', cc='Cthulhu',bcc='God') 。

任意參數(shù)列表 是第三種給函數(shù)傳參的方式。如果函數(shù)的參數(shù)數(shù)量是動(dòng)態(tài)的,該函數(shù)可以被定義成 *args 的結(jié)構(gòu)。在這個(gè)函數(shù)體中, args 是一個(gè)元組,它包含所有剩余的位置參數(shù)。舉個(gè)例子, 我們可以用任何容器作為參數(shù)去調(diào)用 send(message, *args) ,比如 send('Hello', 'God', 'Mom','Cthulhu')。 在此函數(shù)體中, args 相當(dāng)于 ('God','Mom', 'Cthulhu')。

然而,這種結(jié)構(gòu)有一些缺點(diǎn),使用時(shí)應(yīng)該特別注意。如果一個(gè)函數(shù)接受的參數(shù)列表具有相同的性質(zhì),通常把它定義成一個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)列表或者其他任何序列會(huì)更清晰。 在這里,如果 send 參數(shù)有多個(gè)容器(recipients),將之定義成 send(message,recipients) 會(huì)更明確,調(diào)用它時(shí)就使用 send('Hello', ['God', 'Mom', 'Cthulhu'])。這樣的話, 函數(shù)的使用者可以事先將容器列表維護(hù)成列表(list)形式,這為傳遞各種不能被轉(zhuǎn)變成其他序列的序列(包括迭代器)帶來(lái)了可能。

任意關(guān)鍵字參數(shù)字典 是最后一種給函數(shù)傳參的方式。如果函數(shù)要求一系列待定的命名參數(shù),我們可以使用 **kwargs 的結(jié)構(gòu)。在函數(shù)體中, kwargs 是一個(gè)字典,它包含所有傳遞給函數(shù)但沒(méi)有被其他關(guān)鍵字參數(shù)捕捉的命名參數(shù)。

和 任意參數(shù)列表 中所需注意的一樣,相似的原因是:這些強(qiáng)大的技術(shù)在非特殊情況下,都要盡量避免使用,因?yàn)槠淙狈?jiǎn)單和明確的結(jié)構(gòu)來(lái)足夠表達(dá)函數(shù)意圖。

編寫(xiě)函數(shù)的時(shí)候采用何種參數(shù)形式,是用位置參數(shù),還是可選關(guān)鍵字參數(shù),是否使用形如任意參數(shù) 的高級(jí)技術(shù),這些都由程序員自己決定。如果能明智地遵循上述建議,即可輕松寫(xiě)出這樣的 Python 函數(shù):

易讀(名字和參數(shù)無(wú)需解釋)

易改(添加新的關(guān)鍵字參數(shù)不會(huì)破壞代碼的其他部分)

避免魔法方法

Python 對(duì)駭客來(lái)說(shuō)是一個(gè)強(qiáng)有力的工具,它擁有非常豐富的鉤子(hook)和工具,允許你施展幾乎任何形式的技巧。比如說(shuō),它能夠做以下:

改變對(duì)象創(chuàng)建和實(shí)例化的方式;

改變 Python 解釋器導(dǎo)入模塊的方式;

甚至可能(如果需要的話也是被推薦的)在 Python 中嵌入 C 程序。

盡管如此,所有的這些選擇都有許多缺點(diǎn)。使用最直接的方式來(lái)達(dá)成目標(biāo)通常是最好的方法。它們最主要的缺點(diǎn)是可讀性不高。許多代碼分析工具,比如說(shuō) pylint 或者 pyflakes,將無(wú)法解析這種『魔法』代碼。

我們認(rèn)為 Python 開(kāi)發(fā)者應(yīng)該知道這些近乎無(wú)限的可能性,因?yàn)樗鼮槲覀児噍斄藳](méi)有不可能完成的任務(wù)的信心。然而,知道何時(shí) 不能 使用它們也是非常重要的。

總結(jié)

以上是生活随笔為你收集整理的python代码风格_Python编码风格,看这篇就够了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看成人小视频 | 午夜免费高清视频 | 亚洲人成电影在线播放 | 中文字幕第100页 | 日韩成人精品视频 | 国产欧美日韩激情 | 精品成人av | 日韩欧美99| 黄色三级在线播放 | 成人污在线 | 人妻无码一区二区三区四区 | 成人区人妻精品一熟女 | 久久人人爽爽 | 性欧美bb | 欧美激情区 | 用舌头去添高潮无码视频 | 国内偷拍av| 国产精品99久久久久久www | 91嫩草欧美久久久九九九 | 91丨porny丨国产 | 国产精品一二三四 | 一区二区在线免费视频 | 国产精品日韩av | 天天色天天 | 国产理论片 | 极品尤物在线观看 | 国产ts三人妖大战直男 | 国产午夜电影 | 久久久久久久久久久91 | 中文字幕一区二区三区免费看 | 日韩不卡一二三区 | 免费的av片 | 黑人操白妞 | 免费看91视频 | 日本一二三区在线视频 | 日韩欧美中文字幕在线视频 | 日韩三级免费观看 | 亚洲精品1区 | 二区三区在线观看 | 欧美激情一二三区 | 一区二区三区四区视频 | www.狠狠艹 | 免费精品国产 | 亚洲国产aⅴ成人精品无吗 日韩乱论 | 欧美精品久久天天躁 | 狗爬女子的视频 | 一级做a爰片久久毛片 | 久久成人免费网站 | 99精品久久久| 韩国妻子的朋友 | 亚洲三级伦理 | 欧美无专区| 狂野欧美性猛交xxxx | 亚洲天堂高清 | 无码少妇一级AV片在线观看 | 精品国产一区二区三区久久狼黑人 | 中文字幕日韩精品亚洲一区小树林 | 国产精品欧美在线 | 日本一级免费视频 | av在线电影网站 | 一级黄色片在线观看 | 国产98在线 | 影音先锋中文字幕人妻 | 99精品免费视频 | 欧美日韩一卡二卡三卡 | 金瓶狂野欧美性猛交xxxx | 性欧美ⅹxxxx极品护士 | 亚洲淫片| 日本a一级片 | 日本视频黄 | 国产成a人亚洲精v品无码 | 中国a一片一级一片 | 精品在线观看一区二区 | 日韩黄色三级 | 欧美亚洲一区二区三区四区 | 波多野结衣有码 | 欧美日韩一区二区三区免费 | 日本大胆裸体做爰视频 | 天海翼一二三区 | 熟妇高潮一区二区高潮 | 亚洲午夜在线观看 | 岛国大片在线免费观看 | www.日本在线 | 日韩一区二区三区免费 | 夜夜天堂 | 男男play视频 | 亚洲红桃视频 | 91 色| 九九久视频 | 亚洲日日夜夜 | 最近免费中文字幕 | 国产精品国产a级 | 西西午夜视频 | 国产精品天天操 | 国产又大又粗又爽的毛片 | 婷婷爱五月天 | 日本一区二区三区免费在线观看 | 国产专区一区 | 国模少妇一区二区三区 |