欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python中常見的陷阱有哪些-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

為樊城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及樊城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、網(wǎng)站設(shè)計、樊城網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

這篇文章主要介紹Python中常見的陷阱有哪些,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

Python的編碼規(guī)范基本遵從PEP8準(zhǔn)則,使用四個空格作為縮進(jìn),避免空格鍵和tab鍵混用,善于添加注釋,當(dāng)一行代碼寫不下時,右括號要放到行首,和變量對齊,導(dǎo)入順序 標(biāo)準(zhǔn)庫、第三方、本地庫,各組之間有個空行隔開。通常,Python 旨在成為一門簡潔一致的語言,避免發(fā)生意外。然而,有些情況可能會給新手們造成困惑。

在這些情況中,有一些雖是有意為之,但還是有潛在風(fēng)險。還有一些則可以說是語言設(shè)計缺陷了??傊?,下面列出的這些情況都是些乍一看很不好理解的行為,不過一旦您了解了這些奇怪行為背后的機理,也就基本上能理解了。

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

似乎每個 Python 新手都會感到驚訝的一點是 Python 在函數(shù)定義中對待可變默認(rèn)參數(shù)的方法。

您所寫的

def append_to(element, to=[]):
    to.append(element)
    return to

您可能期待的結(jié)果

my_list = append_to(12)
print my_list

my_other_list = append_to(42)
print my_other_list

函數(shù)每次被調(diào)用時,如果不提供第二個參數(shù),就創(chuàng)建一個新的列表。所以結(jié)果就應(yīng)該是:

[12]
[42]

實際上的結(jié)果

[12]
[12, 42]

一旦 完成了函數(shù)定義,一個新的列表就創(chuàng)建出來了,而且在隨后的每一次函數(shù)調(diào)用中被使用的都是這個列表。

一旦 完成了函數(shù)定義,Python 的默認(rèn)參數(shù)就被賦值了,而且在隨后的每一次函數(shù)調(diào)用中都不會再被默認(rèn)值重復(fù)賦值(就像是在,嗯,Ruby 里那樣)。這就意味著如果您使用了一個可變默認(rèn)參數(shù),并且改變了它,您也會且 將會 在未來的所有函數(shù)調(diào)用中改變這同一個參數(shù)對象。

您實際上應(yīng)該做的

使用一個默認(rèn)值來表示我們并不想給這個參數(shù)賦值,從而每次在函數(shù)被調(diào)用時我們都創(chuàng)建一個新的對象。(None 作為默認(rèn)值通常是個好選擇)。

def append_to(element, to=None):
    if to is None:
        to = []
    to.append(element)
    return to

可別忘了,您所傳遞的第二個參數(shù)仍應(yīng)該是個 列表 對象。

利用好『缺陷』

有時你可以專門 利用(或者說特地使用)這種行為來維護函數(shù)調(diào)用間的狀態(tài)。這通常用于編寫緩存函數(shù)。

延遲綁定閉包

另一個常見的困惑是 Python 在閉包(或在周圍全局作用域)中綁定變量的方式。

當(dāng)你寫下

def create_multipliers():
    return [lambda x : i * x for i in range(5)]

你期望發(fā)生

for multiplier in create_multipliers():
    print multiplier(2)

一個包含五個函數(shù)的列表,每個函數(shù)有它們自己的封閉變量 i 乘以它們的參數(shù),得到:

0
2
4
6
8

而事實是:

8
8
8
8
8

五個函數(shù)被創(chuàng)建了,它們?nèi)加?4 乘以 x 。

Python 的閉包是 延遲綁定的 。 這意味著閉包中用到的變量的值,是在內(nèi)部函數(shù)被調(diào)用時查詢得到的。

這里,不論 任何 返回的函數(shù)是如何被調(diào)用的, i 取的是調(diào)用時周圍作用域里的值。 當(dāng)循環(huán)完成時, i 的值最終變成了 4。

關(guān)于這個陷阱有一個普遍嚴(yán)重的誤解,它被認(rèn)為只針對 Python 的 閉包 lambda 定義方式。 事實上,由 lambda 表達(dá)式創(chuàng)建的函數(shù)并沒什么特別,同樣的問題也出現(xiàn)在使用普通的 def 上:

def create_multipliers():
    multipliers = []

    for i in range(5):
        def multiplier(x):
            return i * x
        multipliers.append(multiplier)

    return multipliers

以上正確的做法應(yīng)該是:

def create_multipliers():
    return [lambda x, i=i : i * x for i in range(5)]

或者,使用 functools.partial 函數(shù):

from functools import partial
from operator import mul

def create_multipliers():
    return [partial(mul, i) for i in range(5)]

有時你就想要閉包有如此表現(xiàn),延遲綁定在很多情況下是一個很贊的特性。不幸的是,循環(huán)創(chuàng)建獨立函數(shù)是一種會使它們出差錯的情況。

字節(jié)碼(.pyc)文件無處不在!

默認(rèn)情況下,當(dāng)你直接執(zhí)行 Python 腳本文件時,Python 解釋器會自動將該文件的字節(jié)碼版本寫入同目錄下。 比如, module.pyc。

這些 .pyc 文件不應(yīng)該被納入源代碼倉庫。

理論上,出于性能原因,此行為默認(rèn)為開啟。 沒有這些字節(jié)碼文件, Python 會在每次加載文件時重新生成字節(jié)碼文件。

禁用字節(jié)碼(.pyc)文件

幸運的是,生成字節(jié)碼的過程非???,在開發(fā)代碼時不需要擔(dān)心。

那些文件很討厭,所以讓我們擺脫他們吧!

$ export PYTHONDONTWRITEBYTECODE=1

使用 $PYTHONDONTWRITEBYTECODE 環(huán)境變量來命令 Python 不將這些文件寫入磁盤, 開發(fā)環(huán)境將會保持整潔和干凈。

我建議在你的 ~/.profile 里設(shè)置這個環(huán)境變量。

以上是Python中常見的陷阱有哪些的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

網(wǎng)站名稱:Python中常見的陷阱有哪些-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://aaarwkj.com/article28/cogijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站建設(shè)標(biāo)簽優(yōu)化、網(wǎng)站制作外貿(mào)網(wǎng)站建設(shè)、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
日本高清免费黄色录像| 2004年亚洲中文字幕| 日本加勒比一本在线观看| 日本高清不卡在线观看| 国产青草视频免观看视频| 日本精品动漫一区二区三区| 国产亚洲高清一区二区| 91九色视频官网在线观看| 国产精品国产三级国产av一区| 中文字幕久久亚洲一区| 日韩欧美亚洲国产资源| 美女诱惑丝袜国产国产av丝袜| 欧美日韩精品视频专区| 线上免费看黄色亚洲片| 九九蜜桃视频香蕉视频| 亚洲伊人久久一区二区| 91成人国产综合久久精品| 日韩性生活视频免费播放| 国产日韩精品激情另类综合| 可以免费看的欧美黄片| 国产成人免费高清av| 超碰97精品在线观看| 日韩精品一区二区一牛| 在线观看视频免费午夜| 五月婷婷色丁香综合激情| 成人爱爱视频在线免费观看| 国产91黑丝在线视频| 日本区一区二区三高清视频| 欧美日韩国产一下老妇| 中文字幕乱码熟女人妻视频| 日本亚洲欧美男人的天堂| 日韩高清精品一区二区| 国产又猛又黄又爽无遮挡| 亚洲熟妇av一区二区三区l| 亚洲日本精品免费在线观看| 亚洲人妻激情一区二区| 中文字幕乱码日韩在线| 亚洲欧洲成熟熟女妇专区乱| 丁香六月综合激情啪啪啪| 天堂av在线观看播放| 欧美三级影院网上在线|