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

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

生活随笔

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

python

python一个函数调用另一个函数的返回值_在python函数中使用True,False和None作为返回值...

發(fā)布時(shí)間:2025/3/12 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python一个函数调用另一个函数的返回值_在python函数中使用True,False和None作为返回值... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

建議不是你不應(yīng)該使用True,False或None。這只是你不應(yīng)該使用如果x == True。

如果x == True是愚蠢的,因?yàn)?#61;=只是一個(gè)二進(jìn)制運(yùn)算符!它的返回值為True或False,取決于它的參數(shù)是否相等。如果條件為真,則條件將繼續(xù)。所以當(dāng)你寫如果x == True Python將首先評(píng)估x == True,如果x是True和False否則將變?yōu)門rue,然后繼續(xù),如果結(jié)果是真的。但是如果你期望x是True或False,為什么不直接使用x?

同樣,x == False通常可以由x替換。

在某些情況下,你可能想使用x == True。這是因?yàn)閕f語(yǔ)句條件是“在布爾上下文中評(píng)估”,以查看它是否為“真實(shí)”,而不是完全對(duì)照True。例如,非空字符串,列表和字典都被if語(yǔ)句視為真實(shí)的,以及非零數(shù)字值,但這些都不等于True。所以如果你想測(cè)試一個(gè)任意值是否正確的值True,不只是它是否為真,當(dāng)你會(huì)使用如果x == True。但我?guī)缀鯊膩?lái)沒有看到一個(gè)用途。它是如此罕見,如果你需要寫,這是值得添加一個(gè)評(píng)論,所以未來(lái)的開發(fā)人員(包括可能自己)不只是假設(shè)== True是多余的,并刪除它。

使用x是真的,而實(shí)際上更糟。你永遠(yuǎn)不應(yīng)該使用基本的內(nèi)置不可變類型,如布爾值(True,False),數(shù)字和字符串。原因是,對(duì)于這些類型,我們關(guān)心價(jià)值,而不是身份。 ==測(cè)試這些類型的值是否相同,而始終是測(cè)試標(biāo)識(shí)。

測(cè)試標(biāo)識(shí)而不是值是壞的,因?yàn)橐粋€(gè)實(shí)現(xiàn)可以理論上構(gòu)造新的布爾值,而不是去找到現(xiàn)有的值,導(dǎo)致您有兩個(gè)True值具有相同的值,但存儲(chǔ)在不同的內(nèi)存中,具有不同的身份。在實(shí)踐中我很確定True和False總是被Python解釋器重用,所以這不會(huì)發(fā)生,但這是一個(gè)實(shí)現(xiàn)細(xì)節(jié)。這個(gè)問(wèn)題使人們一直使用字符串,因?yàn)橹苯映霈F(xiàn)在程序源中的短字符串和字符串會(huì)被Python重用,所以’foo’是’foo’總是返回True。但是很容易構(gòu)造相同的字符串2種不同的方式,并讓Python給他們不同的身份。請(qǐng)注意以下事項(xiàng):

>>> stars1 = ''.join('*' for _ in xrange(100))

>>> stars2 = '*' * 100

>>> stars1 is stars2

False

>>> stars1 == stars2

True

編輯:所以事實(shí)證明,Python的平等布爾是一個(gè)有點(diǎn)意想不到的(至少對(duì)我):

>>> True is 1

False

>>> True == 1

True

>>> True == 2

False

>>> False is 0

False

>>> False == 0

True

>>> False == 0.0

True

正如the notes when bools were introduced in Python 2.3.5中解釋的那樣,使用整數(shù)1和0來(lái)表示True和False的舊行為是好的,但是我們只是想要更多描述性的名稱用于表示真值的數(shù)字。

一種實(shí)現(xiàn)方法是在內(nèi)置函數(shù)中只有True = 1和False = 0;那么1和True真的會(huì)無(wú)法區(qū)分(包括by)。但這也意味著一個(gè)函數(shù)返回True將在交互式解釋器中顯示為1,因此所做的是將bool創(chuàng)建為int的子類型。唯一不同的是bool是str和repr; bool實(shí)例仍然具有與int實(shí)例相同的數(shù)據(jù),并且仍然以相同的方式比較等式,所以True == 1。

所以這是錯(cuò)誤的使用x是True,當(dāng)x可能已經(jīng)設(shè)置了一些代碼,希望“真是只是另一種方式拼寫1”,因?yàn)橛泻芏喾椒▉?lái)構(gòu)造值等于True,但沒有相同的身份:

>>> a = 1L

>>> b = 1L

>>> c = 1

>>> d = 1.0

>>> a == True, b == True, c == True, d == True

(True, True, True, True)

>>> a is b, a is c, a is d, c is d

(False, False, False, False)

并且使用x == True是錯(cuò)誤的,當(dāng)x可以是一個(gè)任意的Python值,你只想知道它是否是布爾值True。我們唯一確定的是,只是使用x是最好的,當(dāng)你只是想測(cè)試“誠(chéng)實(shí)”。幸好這通常是所有必需的,至少在我寫的代碼!

一個(gè)更確定的方式是x == True和type(x)是bool。但是對(duì)于一個(gè)很晦澀的情況,這變得很冗長(zhǎng)。它也不看起來(lái)非常Pythonic通過(guò)進(jìn)行顯式類型檢查…但這真的是你在做什么,當(dāng)你試圖精確測(cè)試True而不是真實(shí);鴨式鍵入方式將接受真值,并允許任何用戶定義的類聲明自己是真實(shí)的。

如果你處理這個(gè)非常精確的真理概念,你不僅不認(rèn)為非空集合是真的,但也不認(rèn)為1是真的,那么只是使用x是True可能是好的,因?yàn)榇蟾拍敲茨阒纗沒有來(lái)自認(rèn)為1是真的代碼。我不認(rèn)為有任何純python的方式來(lái)提出另一個(gè)True,生活在一個(gè)不同的內(nèi)存地址(雖然你可能從C做),所以這不應(yīng)該打破,盡管理論上是“錯(cuò)誤的”事情去做。

我以前認(rèn)為布爾人很簡(jiǎn)單!

結(jié)束編輯

然而,在None的情況下,如果x是None,則使用慣用法。在許多情況下,你可以使用if不是x,因?yàn)镹one對(duì)于if語(yǔ)句是一個(gè)“falsey”值。但是最好只有這樣做,如果你想要以相同的方式來(lái)處理所有falsey值(零值數(shù)值類型,空集合和無(wú))。如果你正在處理的值是一些可能的其他值或無(wú)表示“無(wú)值”(例如,當(dāng)一個(gè)函數(shù)返回None失敗),那么更好的使用如果x是無(wú),這樣你不會(huì)意外地假定函數(shù)失敗,當(dāng)它剛剛發(fā)生返回一個(gè)空列表,或數(shù)字0。

我使用==而不是為不可變的值類型的參數(shù)建議你應(yīng)該使用如果x ==無(wú),而不是如果x是無(wú)。但是,在無(wú)Python的情況下,顯式保證在整個(gè)Universe中只有一個(gè)None,而正常的慣用Python代碼使用的是。

關(guān)于是返回None還是引發(fā)異常,它取決于上下文。

對(duì)于像get_attr這樣的例子,我希望它引發(fā)異常,因?yàn)槲乙馾o_something_with(get_attr(file))一樣調(diào)用它。調(diào)用者的正常期望是,他們將獲得屬性值,并讓他們獲得無(wú),并假設(shè)屬性值是一個(gè)更大的危險(xiǎn),比忘記處理異常,當(dāng)你可以實(shí)際繼續(xù),如果屬性不能被發(fā)現(xiàn)。此外,返回None以指示失敗意味著None不是該屬性的有效值。這在某些情況下可能是一個(gè)問(wèn)題。

對(duì)于像see_if_matching_file_exists這樣的虛函數(shù),我們提供了一個(gè)模式,它檢查幾個(gè)地方,看看是否有匹配,如果找到一個(gè)匹配可以返回一個(gè)匹配,如果沒有匹配,則返回None。但也可以返回一個(gè)匹配列表;那么沒有匹配只是空列表(這也是“falsey”;這是其中一種情況,我只是使用如果x看看是否有什么回來(lái))。

因此,當(dāng)選擇異常和無(wú)指示失敗時(shí),必須確定None是否為預(yù)期的非失敗值,然后查看調(diào)用函數(shù)的代碼的期望值。如果“正常”期望是將返回有效值,并且只有偶爾會(huì)調(diào)用者能夠正常工作,無(wú)論是否返回有效值,那么您應(yīng)該使用異常來(lái)指示失敗。如果沒有有效的值會(huì)很常見,因此調(diào)用者將期望處理這兩種可能性,那么您可以使用None。

總結(jié)

以上是生活随笔為你收集整理的python一个函数调用另一个函数的返回值_在python函数中使用True,False和None作为返回值...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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