2016-06-09 72 views
2

我想創建很多變量,都包含相同的值。Python:將許多變量設置爲相同的值 - 自動計數變量數

目前,我這樣做:

foo, bar, qaxx, spat = ("1Value4All",)*4 

我想保持代碼的足跡最小(一行在這裏),但在同一時間,如果存在很多變數的麻煩,因爲我有手動分配變量數量(*4)。

可以這樣做沒有人工計數的變量數量 - 而是自動分配給*4


如果變量可以放在列表中,則可以迭代該列表中的項目的數目。但是這樣的事情是不可能的,因爲變量在賦值之前被引用。

my_variables = [foo, bar, qaxx, spat, dung, polo] 

for v in my_variables: 
    v = "1Value4All" 

編輯:爲變量的數據類型將永遠是strNone(未列出,http://stardict.sourceforge.net/Dictionaries.php下載,套)。

+1

foo = bar = qaxx = spat =「1Value4All」 –

+4

請注意,這不會創建4個單獨的值的副本。它創建_one_副本,綁定到四個名字。 –

+0

@JohnGordon啊 - 不,那不是我想要的。我想要創建許多不同的對象,順便說一下包含相同的東西。 – Winterflags

回答

3

你可以鏈中的所有變量一行在一起。

foo = bar = qaxx = spat = "1Value4All" 

編輯:下面你說你的數據是字符串或NoneType。這對兩者都有效。

>>> foo = bar = None 
>>> type(foo); type(bar) 
<type 'NoneType'> 
<type 'NoneType'> 
>>> foo = bar = "1Value4All" 
>>> type(foo); type(bar) 
<type 'str'> 
<type 'str'> 
+0

謝謝!如果我也想讓他們成爲'None'(不可迭代?) – Winterflags

+0

@Winterflags:同樣的事情。 'foo = bar = qaxx = spat = None'。 – user2357112

+0

數據是什麼類型?這將適用於字符串或數字或無,但不是列表或字典或集。 –

2

您可以在同一行上使用多個等號:

foo = bar = qaxx = spat = "1Value4All" 
1

您可以擁有一個默認字典,它會爲您隨時創建一個新的值。那麼你應該使用該字典中的值 - 而不是作爲獨立變量。變量名都應該在你的程序被硬編碼 - 如果名稱或數量都不同,你應該使用字典,通過按鍵,這意味着可以是動態的,反正訪問你的價值觀:

>>> from collections import defaultdict 
>>> data = defaultdict(lambda: None) 
>>> data["foo"], data["bar"] 
>>> data.keys() 
dict_keys(['foo', 'bar']) 

>>>[data[key] for key in "foo bar baz fnord blip blargh".split()] 
>>> data.keys() 
dict_keys(['fnord', 'bar', 'foo', 'blargh', 'baz', 'blip']) 

我你真的需要更新的變量,你可以得到全局變量一樣簡單的:

>>> globals().update(data) 
>>> bar 
>>> fnord is None 
True 

這並不適用於局部變量的工作 - 更新這些,你必須從點子PIP安裝extradict和使用它的MapGetter上下文管理。 (https://github.com/jsbueno/extradict)。

$ pip install extradict 
$ python 
... 
>>> from extradict import MapGetter 
>>> with MapGetter(default="1Value4All") as tmp: 
... from tmp import foo, bar, baz, qaxx, spat 
... 
>>> foo 
'1Value4All'