Python:将许多变量设置为相同的值 - 自动计算变量数

时间:2016-06-09 18:06:02

标签: python

我想创建很多变量,都包含相同的值。

目前,我这样做:

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(不列出,字母,集合。)

3 个答案:

答案 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'