簡體   English   中英

Python一行if-else與不同的運算符

[英]Python one line if-else with different operators

我在python中的if和for語句中擺弄了一行,遇到了以下問題:

我可以進行以下工作:

state = 1 if state == 4 else 2

但是我想在相同的上下文中使用=和+ =,如下所示:

state = 1 if state == 4 else state+=1

如何在一行中實現呢?

+=不是運算符,它是一個語句 您不能在表達式中使用語句。

由於state是一個整數,所以只需使用+ ,它一個運算符:

state = 1 if state == 4 else state + 1

最終結果與使用+=就地加法完全相同。

更好的是,使用%模量運算符:

state = (state % 4) + 1

首先實現您想要實現的目標; state限制為14之間的值。

這是不可能的,因為賦值不是Python中的表達式

Python中只有表達式才有值,例如,它與JavaScript有所不同-幾乎所有東西(包括賦值)都具有值。

您可以這樣編寫程序,但是:

state = 1 if state == 4 else state + 1

這使值取決於狀態,而不是賦值。 由於狀態變量始終被分配一個新值,因此可以使用。

在一般情況下,假設您要根據當前狀態更新不同的變量,則應堅持常規的if語句。 不要過度使用三元運算符( x if C else y使用x if C else y )-僅當它使您的代碼更具可讀性時才使用它。

您已經將結果指定為state因此您可以:

state = 1 if state == 4 else state + 1

替代方法是:var = test和“ when true”或“ when false”

state = state == 4 and 1 or state + 1

模數答案對此更好,但以上是有用的捷徑

使用lambda:

state = (lambda n:[n+1,0][n==4] )(state)

因此,本質上:

[n+1,0][1] #True(1):表示獲取索引#1,即0
[n+1,0][0] #False(0):表示獲取索引#0,即n + 1

為了使其更具可讀性,我將其分解為一個函數:

def myfunc(n):
    ans = [ n+1, 0 ]
    if n==4:
        return ans[1] # which is the value 0
    else:
        return ans[0] # which is n+1

state=6
state=myfunc(state) # returns 7
state=4
state=myfunc(state) # returns 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM