我想创建很多变量,都包含相同的值。
目前,我这样做:
foo, bar, qaxx, spat = ("1Value4All",)*4
我想将代码占用空间保持在最低限度(此处为一行),但同时如果有很多变量则会很麻烦,因为我必须分配变量数量{{1手动。
这可以在没有人工统计变量的情况下完成 - 而是自动将其分配给*4
吗?
如果变量可以放在列表中,则可以迭代该列表中的项目的编号。但是这样的事情是不可能的,因为变量在赋值之前就被引用了。
*4
修改:变量的数据类型始终为my_variables = [foo, bar, qaxx, spat, dung, polo]
for v in my_variables:
v = "1Value4All"
或str
。
(不列出,字母,集合。)
答案 0 :(得分: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'>
答案 1 :(得分:2)
您可以在同一行使用多个等号:
foo = bar = qaxx = spat = "1Value4All"
答案 2 :(得分: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'