假設x
是一個整數,結構if x:
在功能上與Python中的if x != 0:
相同。某些語言的風格指南明確禁止前者 - 例如,ActionScript/Flex的風格指南指出,您絕不應該隱式地將int類型轉換爲bool類型。在Python中,哪個'if x:`或`if x!= 0:`是首選的?
Python有偏好嗎?與PEP或其他權威來源的鏈接將是最好的。
假設x
是一個整數,結構if x:
在功能上與Python中的if x != 0:
相同。某些語言的風格指南明確禁止前者 - 例如,ActionScript/Flex的風格指南指出,您絕不應該隱式地將int類型轉換爲bool類型。在Python中,哪個'if x:`或`if x!= 0:`是首選的?
Python有偏好嗎?與PEP或其他權威來源的鏈接將是最好的。
構造:if x:
通常用於檢查布爾值。
對於int
S中的使用顯式x != 0
是優選的 - 沿明確的線條比隱式(PEP 20 - Zen of Python)更好。
我更喜歡'如果x:'而不是'如果x!= 0:',因爲它更簡單。 「顯式比隱式更好」可以用來證明「如果x爲真:」或甚至「如果x ==真:」也是如此。 :-) – 2010-07-09 21:42:56
@Alok - 這是你的個人偏好,這很好。但是'如果x:'是測試布爾值的Pythonic成語,而不是整數。 – 2010-07-09 21:46:40
@Yuval答:你是說'如果x:'應該只用在'x'評估爲鍵入bool的地方? '如果x:'一般「也用於'x'指向一個容器 - 你更喜歡更明確的'if len(x)!= 0:'? – 2010-07-09 21:51:02
通常情況下,我閱讀:
if(x)
是一個關於存在的問題。
if(x != 0)
是一個關於數字的問題。
不完全正確。 PEP 8(Python風格指南)特別指出:「如果你真的認爲'如果x不是None',就要小心寫作'if x' – 2010-07-09 21:35:14
@Yuval:我提供我的觀點來解釋我如何解釋兩種形式如果。 – 2010-07-09 21:37:52
公平不夠,對未來的Python用戶只是一個友好的警告:) – 2010-07-09 21:41:43
不會if x is not 0:
是Python中的首選方法,與if x != 0:
相比較?
是的,前者寫得有點長,但我的印象是is
和is not
優於==
和!=
。這使得Python作爲一種自然語言比作爲編程語言更容易閱讀。
錯了。這是CPython的實現細節,小整數(包括0)被實現。因此,使用「is」可以使用0而不是666.'0是3 +(-3)'產生'True',但'666是333 + 333'會產生'False'。 – 2010-07-09 22:47:00
這裏沒有硬性規定。以下是我將要使用的一些示例:
假設我正在接口某些函數,該函數在錯誤時返回-1,在成功時返回0。這些函數在C中很常見,並且在使用包裝C函數的庫時經常出現在Python中。在這種情況下,我會使用if x:
。
在另一方面,如果我有關x
來劃分,我想確保x
不0
,那麼我將是明確的,寫if x != 0
。
作爲一個粗略的規則,如果我把x
作爲bool
整個功能,那麼我可能會使用if x:
- 即使我能證明x
將是一個int
。如果將來我決定要將bool
(或其他類型的!)傳遞給該函數,我不需要修改它。另一方面,如果我真的使用x
就像是int
,那麼我很可能會拼出0
。
這取決於你想要什麼;如果x
是一個整數,它們是等價的,但您應該編寫與您的確切意圖匹配的代碼。
if x:
# x is anything that evaluates to a True value
if x != 0:
# x is anything that is not equal to 0
我可以建議在這個問題上爭吵的數量足以回答它嗎?
有些人認爲它「如果x」應僅用於Z,別人爲Y,別人X.
如果這樣一個簡單的語句是能夠建立這樣的大驚小怪,我很清楚,該聲明不夠清楚。寫下你的意思。
如果你想檢查x是否等於0,那麼寫下「if x == 0」。如果你想檢查x是否存在,寫「如果x不是無」。
然後沒有混亂,沒有爭論,沒有辯論。
如果你想在一個布爾上下文中測試X:
if x:
更加明確,爲X有效性(不匹配的空箱):
if x is not None:
如果您想要在整數上下文中嚴格測試:
if x != 0:
這最後一個實際上是隱式比較類型。
如果你的老闆是C人,前者可能會讓你變成布朗尼分。 :-) – corsiKa 2010-07-09 21:34:42
呵呵,如果我的老闆們很在意風格標準,我就不用問這個問題了。 ;) – 2010-07-09 22:11:48
我見過許多C和C++編碼風格,當'x'不是布爾型表達式(即比較或布爾運算符),並且也不是''if(x)''時, bool「(或者C89的類似定製類型,比如Win32'BOOL')。 – 2010-07-09 22:53:08