Python变量的动态创建
动态地创建变量可以使用 globals() 和 locals() 来实现。
这两个对象以字典的形式分别保存着系统的静态变量和局部变量。
所以只要将要创建的变量加入这两个字典中的任一个,就实现了变量的动态创建。
>>> ls = ['name','无奇']
>>> i=21
>>> globals()[ls[0]+str(i)]=ls[1]
>>> name21
'无奇'
动态变量的应用。
最典型的就是python内置的命名重组。
>>> dic = {'name':['胡舟', '越涵', '刘琦'], 'age':[12, 34, 56], 'time':['近代', '中古', '现代']}
def get(**keyargs):
r = []
for key, val in keyargs.items():
n,f = key.split('__')
for dk in dic:
if dk == n:
if f == 'gt':
for i in dic[dk]:
if i>val:
r.append(i)
elif f == 'gte':
for i in dic[dk]:
if i>=val:
r.append(i)
elif f == 'lt':
for i in dic[dk]:
if i<val:
r.append(i)
elif f == 'lte':
for i in dic[dk]:
if i<=val:
r.append(i)
elif f == 'include':
for i in dic[dk]:
if val in i:
r.append(i)
elif f == 'in':
for i in dic[dk]:
if val == i:
r.append(i)
return r
>>> get(age__gt=12)
[34, 56]
>>> get(age__gte=34)
[34, 56]
>>> get(age__gt=34)
[56]
>>> get(age__lt=34)
[12]
>>> get(age__lte=34)
[12, 34]
>>> get(name__include='胡')
['胡舟']
>>> get(time__in='近代')
['近代']
def gte(key, value, locals=locals()):
r = []
for k,v in locals().items():
if v == key:
key = k + '__gte'
break
exec(f're = get({key}={value})\nr.append(re)')
return r[0]
>>> age=''
>>> gte(age,12)
[12, 34, 56]