在Perl中,如果我想爲$ myVar賦值$ var1,$ var2或$ var3,根據哪一個的求值爲真,我會編寫以下代碼:根據所存在的值分配多個值中的一個
$myVar = $var1 || $var2 || $var3;
我工作在Python和PHP單獨的項目,我還沒有想出如何在兩種語言簡潔的代碼這種情況。
在Python中對此進行編碼的最佳方式是什麼?
在PHP中對此進行編碼的最佳方式是什麼?
在Perl中,如果我想爲$ myVar賦值$ var1,$ var2或$ var3,根據哪一個的求值爲真,我會編寫以下代碼:根據所存在的值分配多個值中的一個
$myVar = $var1 || $var2 || $var3;
我工作在Python和PHP單獨的項目,我還沒有想出如何在兩種語言簡潔的代碼這種情況。
在Python中對此進行編碼的最佳方式是什麼?
在PHP中對此進行編碼的最佳方式是什麼?
Perl'autovivifies'首次引用時的變量(據我所知)。如果變量不存在,Python將引發一個NameError
。但是,你可以做這樣的事情。
var1 = var2 = var3 = None
# code that might change the value of three variables mentioned above
myvar = var1 or var2 or var3
一般來說,檢查一個變量是否定義(並根據它來改變控制流)在Python中是一件壞事。你應該使用字典和鍵。
關於Perl,你有錯誤的術語。如果你不使用'strict'編譯指示,變量不需要在使用前聲明(就像PHP一樣)。始終嚴格使用並被視爲最佳做法,並儘可能在最小範圍內根據需要將其關閉。 Autovivification是不同的。這意味着如果你有一個深層次的數據結構(例如一個4維數組),你可以簡單地說'$ array [1] [3] [2] [0] = 5;''而不必做'$ array [1] = []; $陣列[1] [3] = []; $ array [1] [3] [2] = []; $ array [1] [3] [2] [0] = 5;'。所有的中間結構都是自動的。 – daotoad 2010-02-02 16:33:35
感謝您的澄清! :) – 2010-02-02 17:10:26
在Python,我相信你可以說
myVar = var1 or var2 or var3
Python文檔描述x or y
作爲
如果x是假的,那麼y,否則x
編輯 :theatrus提出了一個有趣的觀點 - 我甚至沒有考慮到變量可能不是def獨立非執行董事。我發現對此事的討論:
Python沒有一個特定的 功能測試一個變量是否被定義 ,因爲所有的變量都 之前預期 使用已定義的 - 即使最初只是None對象分配了 。試圖訪問 以前未定義的變量會引發異常。
它通常被認爲是不常見的 Python不知道變量 是否已被定義。但是,如果你 是仍然在這種情況下, 你可以嘗試 訪問它一個「嘗試」塊內, 爲其分配確保給定 變量實際上定義(如無, 如果沒有別的) 不應該引發NameError異常。
所以,如果你不能保證變量存在,並且你想一個接一個地檢查存在性和真實性,你可能會遇到一些混亂的代碼。
這僅適用於聲明瞭var1/2/3但可能爲False的情況。如果未聲明var1/2/3,則會導致名稱錯誤。 – 2010-01-13 16:56:43
如果'var1'不存在*,會導致異常。 – badp 2010-01-13 17:01:08
你可以檢查'locals()'和'globals()'字典來查看變量是否被定義,但所有這些都不是Python的方式。 – 2010-01-13 17:48:25
在PHP中,您可以使用isset()
來測試變量是否已設置,而不是空值。爲了實現你在找什麼,你可以檢查是否$var1
,$var2
或$var3
設置,然後將值設置爲$myVar
但是這取決於你想設置你$myVar
來,這將評估的條件提防true:
$str = '';
var_dump(isset($str)); // TRUE
也有conditional expressions在Python在Python 2.5增加:
x = true_value if condition else false_value
我無法PHP說話。
有一點需要注意的是,試圖評估一個不存在的變量總會引發錯誤。使用Python,你可以解決此通過捕捉將發生NameError
異常,如果你這樣做,並回退到默認:
>>> try:
... myVar = var1 or var2 or var3
... except NameError:
... myVar = 'default'
...
>>> myVar
'default'
所以,如果var1
,var2
,或var3
可能是沒有設置,那麼myVar
將收到「默認」的回退值。否則,您將獲得評估爲True
的任何一組var的值。
在PHP中,你可以這樣做(假設變量被設置):
$vars = array($var1, $var2, $var3);
foreach ($vars as $var) {
if ($myvar = $var) {
break;
}
}
或者使它稍微佩爾利:):
foreach(array($var1,$var2,$var3)as$var)if($myvar=$var)break;
你真的不應該這樣做蟒蛇。如果你需要名稱存在或不存在,那麼你應該使用dict來代替。 – 2010-01-13 16:57:38
正如其他人指出的那樣,變量在Python中的存在並不能很好地映射到PHP。如果您可以更多地告訴我們「存在」的含義,您將得到更好的Python答案。 – 2010-01-13 17:20:36
在perl中,假設您使用的是現代perl,您應該真的在說'$ myVar = $ var1 // $ var2 // $ var3;'。 – dave4420 2010-01-13 17:21:33