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

2024-06-17 16:03:03 发布

您现在位置: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(不是列表、字典、集合。)


Tags: 代码列表数量foomybar手动variables
3条回答

您可以有一个默认字典,它将在您需要时为键创建一个新值。然后应该使用字典中的值,而不是作为独立变量。变量名应该在程序中进行硬编码-如果名称或数量不同,则应该使用字典并通过键访问值,而键本来就是动态的:

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

您可以在一行中将所有变量链接在一起。你知道吗

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

编辑:在下面说明您的数据是string或NoneType。这两种方法都适用。你知道吗

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

可以在同一行上使用多个等号:

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

相关问题 更多 >