簡體   English   中英

python賦值在條件操作的其他部分失敗

[英]python assignment fails in else part of conditional operation

為什么分配在其他部分失敗? 我試圖根據一行下面的條件來增加兩個變量。

>>> a=0
>>> b=0
>>> a+=1 if True else b
>>> a
>>> 1
>>> a if True else b+=1
  File "<input>", line 1
SyntaxError: can't assign to conditional expression
>>> a if False else b+=1
  File "<input>", line 1
SyntaxError: can't assign to conditional expression
>>> a+=1 if False else b
>>> a
>>> 1
>>> a+=1 if True else b+=1
  File "<input>", line 1
    a+=1 if True else b+=1
                        ^
SyntaxError: invalid syntax

a+=1 if True else b解析為

a += (1 if True else b)

在Python中,賦值不是表達式。

在python中,在一行中,賦值運算符的右側不能再使用賦值。

例如a = b + (c = d) ,無法在python中完成。

再次參考上面的示例:

有效操作

b = 10
a = 20

a+=1 if True else b  # this is valid.
a+=1 if False else b  # this is valid.

無效的操作

a if True else b+=1  # this is invalid.
a if False else b+=1  # this is invalid.
a+=1 if True else b+=1  # this is invalid.
t = a if True else b=1  # this is invalid.

在這些語句中,如果我們嘗試打印a if True else b會打印b值。 但是上面的代碼嘗試在表達式中使用賦值,因此在python中是不允許的。

這種語法在C語言中是允許的,但在python中是不允許的。 例如,在C語言中,我們可以這樣寫

if (a=10): printf("%d", a); 

實際上會在條件內對a進行賦值並通過條件並執行(如果執行)。

在python中,如果將代碼編寫為:

if a=10: print a

一個只能用python這樣寫

if a==10 : print a

你想要的是

if True: a+=1
else: b+=1

原因是x if cond else y在python中包含x if cond else y則表示語法x if cond else y的含義。 此語法的含義不是, operation_a if condition else operation_boperation_a if condition else operation_b ,而是value_a if condition else value_b

這意味着使用它的正確方法是

var = val1 if condition else val2

並不是:

var1=val1 if condition else var2=val2

在以下位置閱讀更多信息有關oneliner運算符的詳細信息

PS:使用類似以下的技巧:

(var1=val1)  if condition else (var2=val2) 

可能有效,但是不要使用它,因為它不是pythonic的,而且乍一看該語句的返回值並不明顯(“顯式更好,然后隱式”)

暫無
暫無

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

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