警告:此问题不是旧"How do I create a bunch of variables in a loop?"的副本,因为它使用带参数的特殊类。如果对PEP8主动不尊重的代码让你的眼睛流血,那就去吧!旅行者!
好的,我正在为详细网络中的对象图编写一些代码,我希望代码本身看起来特别。出于这个问题的目的,这意味着我不想编写代码,以便我引用一个字典,其中包含在引用我的特殊类的实例的循环中生成的键。我想以最小的方式编写代码,我知道它是非Pythonic,但我可怕的心理构成可以接受。
那么:如何编写下面显示的函数instantiate
的代码?我们的想法是,这个函数使用具有一些参数的特殊类Relay
实例化一个名称指定的变量。
import uuid
def generate_Python_variable_names(
number = 10
):
names = []
while len(names) < number:
name = str(uuid.uuid4()).replace("-", "")
if name[0].isalpha():
names.append(name)
return names
number_relays = 100
for name in generate_Python_variable_names(number = number_relays):
instantiate(name, Relay(configuration = 1)
答案 0 :(得分:1)
我假设您处于模块级别。您想要的是在当前模块中创建新变量。
为此,您可以使用globals()
功能访问模块的变量。
for name in generate_Python_variable_names(number=number_relays):
obj = globals()
obj[name] = Relay(configuration=1)
如果您打印变量,您将得到如下内容:
{'Relay': <class '__main__.Relay'>,
'__builtins__': <module '__builtin__' (built-in)>,
'__doc__': None,
'__file__': 'path/to/your/module.py',
'__name__': '__main__',
'__package__': None,
'df55cd5884924e88a4a13371b248d755': <__main__.Relay object at 0x105f66fd0>,
'e11d3a1e3afb4ada801e08d57219e9be': <__main__.Relay object at 0x105f66550>,
...
'ef93466af4a34e7b8ec28568cca664f5': <__main__.Relay object at 0x105f66ed0>,
'generate_Python_variable_names': <function generate_Python_variable_names at 0x105f670c8>,
'name': 'ef93466af4a34e7b8ec28568cca664f5',
'number_relays': 100,
'obj': <Recursion on dict with id=4394090856>,
'uuid': <module 'uuid' from 'path/to/uuid.pyc'>}
如您所见,您的模块中有一百个新变量。