Jos*_*del 128
除非需要创建一堆变量名称,否则我只会使用一个字典,您可以在其中动态创建密钥名称并将值与每个名称相关联.
a = {}
k = 0
while k < 10:
<dynamically create key>
key = ...
<calculate value>
value = ...
a[key] = value
k += 1
Run Code Online (Sandbox Code Playgroud)
新的"集合"模块中还有一些有趣的数据结构可能适用:
http://docs.python.org/dev/library/collections.html
eyq*_*uem 55
使用globals()可以实现:
import random
alphabet = tuple('abcdefghijklmnopqrstuvwxyz')
print '\n'.join(repr(u) for u in globals() if not u.startswith('__'))
for i in xrange(8):
globals()[''.join(random.sample(alphabet,random.randint(3,26)))] = random.choice(alphabet)
print
print '\n'.join(repr((u,globals()[u])) for u in globals() if not u.startswith('__'))
Run Code Online (Sandbox Code Playgroud)
一个结果:
'alphabet'
'random'
('hadmgoixzkcptsbwjfyrelvnqu', 'h')
('nzklv', 'o')
('alphabet', ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'))
('random', <module 'random' from 'G:\Python27\lib\random.pyc'>)
('ckpnwqguzyslmjveotxfbadh', 'f')
('i', 7)
('xwbujzkicyd', 'j')
('isjckyngxvaofdbeqwutl', 'n')
('wmt', 'g')
('aesyhvmw', 'q')
('azfjndwhkqgmtyeb', 'o')
Run Code Online (Sandbox Code Playgroud)
我使用随机因为你没有解释要给出的"变量"的名称,以及要创建的值.因为我不认为可以在不将其绑定到对象的情况下创建名称.
小智 45
使用exec()方法.例如,假设您有一个字典,并且您希望将每个键转换为具有原始字典值的变量,则可以执行以下操作.
Python 2
>>> c = {"one": 1, "two": 2}
>>> for k,v in c.iteritems():
... exec("%s=%s" % (k,v))
>>> one
1
>>> two
2
Run Code Online (Sandbox Code Playgroud)
Python 3
>>> c = {"one": 1, "two": 2}
>>> for k,v in c.items():
... exec("%s=%s" % (k,v))
>>> one
1
>>> two
2
Run Code Online (Sandbox Code Playgroud)
Joh*_*hin 28
将东西填充到全局和/或本地命名空间中并不是一个好主意.使用dict是如此的一些其他语言... d['constant-key'] = value只是看起来很尴尬.Python是OO.用大师的话来说:"""命名空间是一个很棒的主意 - 让我们做更多的事情!"""
像这样:
>>> class Record(object):
... pass
...
>>> r = Record()
>>> r.foo = 'oof'
>>> setattr(r, 'bar', 'rab')
>>> r.foo
'oof'
>>> r.bar
'rab'
>>> names = 'id description price'.split()
>>> values = [666, 'duct tape', 3.45]
>>> s = Record()
>>> for name, value in zip(names, values):
... setattr(s, name, value)
...
>>> s.__dict__ # If you are suffering from dict withdrawal symptoms
{'price': 3.45, 'id': 666, 'description': 'duct tape'}
>>>
Run Code Online (Sandbox Code Playgroud)
vars()['meta_anio_2012'] = 'translate'
Run Code Online (Sandbox Code Playgroud)
关键字参数允许您将变量从一个函数传递到另一个函数。通过这种方式,您可以使用字典的键作为变量名(可以在while循环中填充)。字典名称只需要在**调用时放在前面。
# create a dictionary
>>> kwargs = {}
# add a key of name and assign it a value, later we'll use this key as a variable
>>> kwargs['name'] = 'python'
# an example function to use the variable
>>> def print_name(name):
... print name
# call the example function
>>> print_name(**kwargs)
python
Run Code Online (Sandbox Code Playgroud)
没有**,kwargs只是一个字典:
>>> print_name(kwargs)
{'name': 'python'}
Run Code Online (Sandbox Code Playgroud)