2010-07-09 127 views
4

假設x是一個整數,結構if x:在功能上與Python中的if x != 0:相同。某些語言的風格指南明確禁止前者 - 例如,ActionScript/Flex的風格指南指出,您絕不應該隱式地將int類型轉換爲bool類型。在Python中,哪個'if x:`或`if x!= 0:`是首選的?

Python有偏好嗎?與PEP或其他權威來源的鏈接將是最好的。

+0

如果你的老闆是C人,前者可能會讓你變成布朗尼分。 :-) – corsiKa 2010-07-09 21:34:42

+0

呵呵,如果我的老闆們很在意風格標準,我就不用問這個問題了。 ;) – 2010-07-09 22:11:48

+0

我見過許多C和C++編碼風格,當'x'不是布爾型表達式(即比較或布爾運算符),並且也不是''if(x)''時, bool「(或者C89的類似定製類型,比如Win32'BOOL')。 – 2010-07-09 22:53:08

回答

7

構造:if x:通常用於檢查布爾值。

對於int S中的使用顯式x != 0是優選的 - 沿明確的線條比隱式PEP 20 - Zen of Python)更好。

+1

我更喜歡'如果x:'而不是'如果x!= 0:',因爲它更簡單。 「顯式比隱式更好」可以用來證明「如果x爲真:」或甚至「如果x ==真:」也是如此。 :-) – 2010-07-09 21:42:56

+0

@Alok - 這是你的個人偏好,這很好。但是'如果x:'是測試布爾值的Pythonic成語,而不是整數。 – 2010-07-09 21:46:40

+0

@Yuval答:你是說'如果x:'應該只用在'x'評估爲鍵入bool的地方? '如果x:'一般「也用於'x'指向一個容器 - 你更喜歡更明確的'if len(x)!= 0:'? – 2010-07-09 21:51:02

1

通常情況下,我閱讀:

if(x)是一個關於存在的問題。

if(x != 0)是一個關於數字的問題。

+1

不完全正確。 PEP 8(Python風格指南)特別指出:「如果你真的認爲'如果x不是None',就要小心寫作'if x' – 2010-07-09 21:35:14

+0

@Yuval:我提供我的觀點來解釋我如何解釋兩種形式如果。 – 2010-07-09 21:37:52

+0

公平不夠,對未來的Python用戶只是一個友好的警告:) – 2010-07-09 21:41:43

-1

不會if x is not 0:是Python中的首選方法,與if x != 0:相比較?

是的,前者寫得有點長,但我的印象是isis not優於==!=。這使得Python作爲一種自然語言比作爲編程語言更容易閱讀。

+5

錯了。這是CPython的實現細節,小整數(包括0)被實現。因此,使用「is」可以使用0而不是666.'0是3 +(-3)'產生'True',但'666是333 + 333'會產生'False'。 – 2010-07-09 22:47:00

2

這裏沒有硬性規定。以下是我將要使用的一些示例:

假設我正在接口某些函數,該函數在錯誤時返回-1,在成功時返回0。這些函數在C中很常見,並且在使用包裝C函數的庫時經常出現在Python中。在這種情況下,我會使用if x:

在另一方面,如果我有關x來劃分,我想確保x0,那麼我將是明確的,寫if x != 0

作爲一個粗略的規則,如果我把x作爲bool整個功能,那麼我可能會使用if x: - 即使我能證明x將是一個int。如果將來我決定要將bool(或其他類型的!)傳遞給該函數,我不需要修改它。另一方面,如果我真的使用x就像是int,那麼我很可能會拼出0

1

這取決於你想要什麼;如果x是一個整數,它們是等價的,但您應該編寫與您的確切意圖匹配的代碼。

if x: 
    # x is anything that evaluates to a True value 
if x != 0: 
    # x is anything that is not equal to 0 
0

我可以建議在這個問題上爭吵的數量足以回答它嗎?

有些人認爲它「如果x」應僅用於Z,別人爲Y,別人X.

如果這樣一個簡單的語句是能夠建立這樣的大驚小怪,我很清楚,該聲明不夠清楚。寫下你的意思。

如果你想檢查x是否等於0,那麼寫下「if x == 0」。如果你想檢查x是否存在,寫「如果x不是無」。

然後沒有混亂,沒有爭論,沒有辯論。

0

如果你想在一個布爾上下文中測試X

if x: 

更加明確,爲X有效性(不匹配的空箱):

if x is not None: 

如果您想要在整數上下文中嚴格測試:

if x != 0: 

這最後一個實際上是隱式比較類型。

相關問題