Ruby支持這一點:python中的短路評估分配?
name = name || "default"
如果我嘗試在Python:
name = name or "default"
解釋報告:
NameError: name 'name' is not defined
什麼是蟒蛇短路評價任務的相同呢?
Ruby支持這一點:python中的短路評估分配?
name = name || "default"
如果我嘗試在Python:
name = name or "default"
解釋報告:
NameError: name 'name' is not defined
什麼是蟒蛇短路評價任務的相同呢?
name = globals()['name'] if 'name' in globals() else 'default'
,或者更簡潔:
name = globals().get('name','default')
替代locals()
內部功能。
可能會更好,只是try/except
:
try:
name
except NameError:
name = 'default'
作爲一個方面說明,我永遠不會使用這兩個成語在我的代碼。 (當然,我不會使用你提到的Javascript或Ruby中的其他成語)。我會確保我的變量在一開始就被聲明爲默認值,然後在需要時將它們更改爲非默認值。
你經常遇到動態生成的本地人或全局變量? *通常*(在Ruby和JavaScript中)你只是偶然發現了一個編程錯誤。至少Python引發了一個異常! –
+1例外 - 這是處理這個問題的正確方法。 (儘管在大多數情況下,你可能應該使用字典)。另一種方法,我不會使用。 –
@MartijnPieters - 我非常頻繁地在'bash'中遇到未定義變量只是空的地方。我從來沒有在python中遇到過,但我唯一使用的python代碼是我自己的......我不知道別人做了什麼,除非我通過足夠長的時間來推斷它。 – mgilson
如果你真的定義name
它會工作:
name = None
name = name or 'default'
短路是獨立於實際上有定義的變量。一般來說,name
已經從地方拉昇,但空(falsy)值:
name = somefunction('name') or 'default'
爲什麼這不是被接受的答案? – dreftymac
這是一個可怕的,可怕的想法,但...
name = globals().get("name", locals().get("name", "default"))
...會做你想做的(同時使你在黑暗中,你是否現在有一個全局或局部變量)並且足夠醜陋,希望讓你試試它。
這適用於紅寶石由於[瘋''X == x''其中''x''未定義爲''nil''](https://www.destroyallsoftware.com/talks/wat) 。這在Ruby中是一種罕見的愚蠢行爲。 Javascript是...好吧,讓我們不要去那裏。 –
@Lattyware Ruby支持甚至更短以上的版本,'名|| =「默認」' –
不知道關於Ruby,JavaScript的,但不支持這樣的:'節點-e「富= FOO || 1'' =>'ReferenceError:foo沒有定義' – georg