回答
爲什麼不試試呢?
>>> def some_func():
... return 2
...
>>> a = 2
>>> if (a = some_func()):
File "<stdin>", line 1
if (a = some_func()):
^
SyntaxError: invalid syntax
>>>
所以,沒有。
這是故意禁止的,因爲Guido,仁慈的python獨裁者,發現他們沒有必要,而且比有用的更混亂。沒有後增或前增操作符(++)的原因是一樣的。 – 2010-04-08 22:53:36
他確實允許在2.0中增加*增加的assigment *,因爲'x = x + 1'需要額外的查找時間,而'x + = 1'的速度稍快,但我確信他甚至不喜歡* *很多。 :-) – wescpy 2010-04-08 23:56:53
編號在Python中的賦值是一個語句,而不是一個表達式。
Guido不會有任何其他的方式。 – 2010-04-08 22:51:55
@MarkRansom所有人都熱衷於Guido。 *對*感嘆。 – javadba 2017-12-11 04:49:10
@javadba這個傢伙比他錯了很多次。我明白,讓一個負責這個願景的人能夠產生比委員會設計更加連貫的策略;我可以與C++進行比較和對比,C++是我的主要麪包和黃油。 – 2017-12-11 04:58:04
http://docs.python.org/tutorial/datastructures.html
注意的是Python,C不同,不能內部 表情發生 分配。 C程序員可能會抱怨 這個問題,但它避免了在程序中遇到的常見的 類問題:當==打算時,在表達式 中鍵入=。
還看到:
http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm
不,在BDFL沒有這樣的功能。我們坐下來的時候,Guido van Rossum,「仁慈的生活的獨裁者」,努力保持Python儘可能的簡單,我們可以狡辯他做出的一些決定 - 我更喜歡他經常說「不」,但事實上沒有一個設計Python的委員會,而是一個值得信賴的「諮詢委員會」,它主要基於優點,通過設計師的敏感性來篩選,產生了一個地獄般的IMHO。
簡單嗎?這個功能可以簡化我的一些代碼,因爲它可以使它更緊湊,因此更具可讀性。現在我需要兩條線,我曾經需要一條線。我從來沒有明白爲什麼Python拒絕了其他編程語言多年以來的功能(並且經常出於非常好的原因)。特別是我們在這裏討論的這個特性非常非常有用。 – 2017-09-10 08:09:21
不是直接的,根據this old recipe of mine - 但作爲配方說,很容易建立語義等價物,例如,如果你需要直接從C編碼的參考算法音譯(在重構之前到更習慣Python,緩存SE ;-)。即:
class DataHolder(object):
def __init__(self, value=None): self.value = value
def set(self, value): self.value = value; return value
def get(self): return self.value
data = DataHolder()
while data.set(somefunc()):
a = data.get()
# use a
BTW,一個很地道的Python的形式爲您的特定情況下,如果你確切地知道當它返回一個falsish值(例如0
)falsish價值somefunc
可以返回,是
for a in iter(somefunc, 0):
# use a
所以在這個特定的情況下,重構將非常容易;-)。
如果退貨可能是任何種類的錯誤值(0,None
,''
,...)),一種可能性是:
import itertools
for a in itertools.takewhile(lambda x: x, iter(somefunc, object())):
# use a
但您可能更簡單的自定義生成器:
def getwhile(func, *a, **k):
while True:
x = func(*a, **k)
if not x: break
yield x
for a in getwhile(somefunc):
# use a
其中一個原因分配是非法的情況的原因是,它更容易犯了一個錯誤,並指定真題:
some_variable = 5
# This does not work
# if True = some_variable:
# do_something()
# This only works in Python 2.x
True = some_variable
print True # returns 5
在Python 3真和假是關鍵字,所以沒有風險了。
In [161]:l_empty == [] Out [161]:True In [162]:[] == [] Out [162]:True 我不認爲這是原因 – volcano 2014-01-02 13:23:57
可以定義一個函數來完成分配給你:
def assign(name, value):
import inspect
frame = inspect.currentframe()
try:
locals_ = frame.f_back.f_locals
finally:
del frame
locals_[name] = value
return value
if assign('test', 0):
print("first", test)
elif assign('xyz', 123):
print("second", xyz)
- 1. 我們可以並行執行此任務嗎?
- 2. 我們可以對數據服務執行任何操作嗎
- 3. 我們可以在smooks中進行字符串操作和條件檢查嗎?
- 4. 我們可以使用HDInsight服務進行ATS嗎?
- 5. 我可以在不返回條件列的情況下進行左連接嗎?
- 6. 我們可以在java中加速CPU密集型任務嗎?
- 7. 我們可以使用nlmrt軟件包進行nlxb預測嗎?
- 8. 我們可以在任何代碼行上使用ignore_user_abort()嗎?
- 9. 我們可以在web服務的情況下查看xml嗎?
- 10. 我們如何在交叉表中執行以下任務?
- 11. 在查詢中可以通過以下條件進行查詢嗎?
- 12. 我們可以在Docker中運行多進程程序嗎?
- 13. 我可以在「可容納」條件下使用子查詢嗎?
- 14. MSBuild中的SignFile任務:我們可以讓它更快嗎?
- 15. 我們可以限制luigi任務的吞吐量嗎?
- 16. 我們可以在SQL Server中進行內部服務器表連接嗎?
- 17. 我們可以在GWT dev模式下運行硒測試嗎?
- 18. 我們可以在IIS上運行Metro Web服務嗎?
- 19. 我們可以在服務中運行語音識別嗎?
- 20. 在什麼條件下我們可以使用css *選擇器?
- 21. 我們可以在ExplicitWait期望條件中傳遞一個條件參數嗎?
- 22. 我可以使用Content-type:application/force-download進行文件下載嗎?
- 23. WSO2 CEP:我們可以在執行計劃中有if-else條件語句嗎?
- 24. 我們可以從MDM服務器下拉配置嗎?
- 25. 我可以在草圖中自動執行任務嗎?
- 26. 我可以在生成器中運行耙子任務嗎?
- 27. 運行時,我可以在任務內改變int值嗎? c#
- 28. 我可以在Grunt中執行兩次'min'任務嗎?
- 29. 我可以在沒有任務進入前臺的情況下爲特定任務創建活動嗎?
- 30. 我可以選擇具有條件的行嗎?上一行和下一行有條件嗎?
-1:平凡的自己應答。重複:http://stackoverflow.com/questions/1663995/python-variable-assignment-and-if-statement – 2010-04-09 10:38:32
@ S.Lott不是很微不足道的知道爲什麼,如果它不是一些答案,描述這裏。 – 2017-12-31 06:40:50