![](/img/trans.png)
[英]Why is that __init__ function of python doesn't have a return statement even though its a function
[英]Why doesn't Python have a “continue if” statement?
我認為這是一個非常易讀的代碼塊,
for i in range(100):
continue if i % 2 == 0
但它在語法上並不正確。 我們可以在Python中做其他好事,比如
for i in things:
total += 3 if i % 2 == 0 else 1
或者可能,
return a if b > a else c
為什么我們不能continue if
聲明?
流程:
for i in range(100):
continue if i % 2 == 0
相當於:
for i in range(1, 100, 2):
...
或者,更一般地說,:
for i in range(100):
if i % 2 == 0:
continue
Python語言設計者有一個投票反對語法變化的歷史,它只提供了略微不同的方法來做同樣的事情(“應該有一種明顯的方法來做”)。
你提到的單線結構的類型
x if cond else y
在這里是一個例外。 它被添加到語言中,以提供一種不易出錯的方式來實現許多用戶已經嘗試使用and
/ or
短路黑客( 來源:Guido )。 野外代碼使用:
cond and x or y
這在邏輯上是不相同的,但對於已經熟悉三元cond ? : x : y
用戶來說,這是一個容易犯的錯誤cond ? : x : y
cond ? : x : y
來自C的cond ? : x : y
語法。正確的等價物是:
(cond and [x] or [y])[0]
但是,這很難看。 因此, x if cond else y
加上x if cond else y
,則添加表達式x if cond else y
的基本原理強於僅僅是方便。
因為x if cond else y
實際上是一個表達式 。 表達式是對值進行求值的語句,在本例中為x
或y
。
continue
不是一個價值,所以就是這樣。 也,
if cond:
continue
實際上並不比continue if cond
更難或更容易“出錯”,而v = x if cond else y
可能比
if cond:
v = x
else:
v = y
還有一個事實是,如果我們允許continue if cond
,我們添加一種新的方式來使用這個_ if cond
模式,即我們允許它沒有else
。
Python確實有這樣的東西,語法有點不同。 而不是將“if和”continue“合並為一個語句,如果它的計算結果為true,則將它們分為條件語句(如果,等等)和控制流(繼續,傳遞,中斷等)。代碼示例,語法為:
for i in range(100):
if i % 2 == 0:
continue
else:
#you could also add an else like this do something else if the
#number evaluated to odd
這將繼續進行外循環的下一次迭代。還有其他有用的迭代工具,稱為“控制流工具”。 我將包含一個解釋這個的Python文檔的鏈接。 那里有很多有用的東西,所以請看看。
這里的其他人也提出了單行語法,它也有效。 然而,理解這兩種方法是有益的; 通過這種方式,您可以使代碼盡可能簡單,但如果您的算法將從中受益,您還可以嵌套循環和條件。
快樂的編碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.