如何根据获取的内容作为变量名,并赋予相应的值
有两个列表listA = ['a','b','c','d','e']
listB =
通过代码实现,从listB中获取的元素,从listA中获取的元素做为变量名,按相应位置赋值变量
得到以下变量
a = 1
b = 3
c = True
d = 1.12
e = '测试'
#默认listA,listB存在且len(listA)<=len(listB)
for index in len(listA):
exec('%(key)s=%(value)s'%{'key':listA,'vaule':listB}) listA = ['a','b','c','d','e']
listB =
dict={}
for i in listA:
globals() = listB listA = ['a','b','c','d','e']
listB =
for i in range(0,len(listA)):
# 这里用try的原因是如果类型为str的话会报NameError的错误
try:
exec(str(listA) + "=" + str(listB))
except NameError:
exec(str(listA) + "=" + "'" + str(listB) + "'")
listA = ['a','b','c','d','e']
listB =
for i,j in zip(listA,listB):
print(i,'=',j)
白two 发表于 2021-8-15 19:04
我的天,你这提醒了我,这globals()还可以当做一般的字典来用! 哈哈
所以,直接update() , 简直是骚操作呀,
>>> listA = ['a','b','c','d','e']
>>> listB =
>>> globals().update(dict(zip(listA, listB)))
>>> a
1
>>> e
'测试'
>>> 楼上正解 Pliosauroidea 发表于 2021-8-15 18:22
代码复制上去貌似执行不了呢?
不过感谢告知exec()函数,已自行百度了。谢谢 临时号 发表于 2021-8-15 19:09
谢谢 白two 发表于 2021-8-15 19:04
刚刚百度了globals()函数作用,是将全部全局变量,以字典的形式返回,现在将key和value加到globals()字典中去,就直接等于创建了这个变量了? 本帖最后由 白two 于 2021-8-17 20:15 编辑
非凡 发表于 2021-8-17 16:18
刚刚百度了globals()函数作用,是将全部全局变量,以字典的形式返回,现在将key和value加到globals()字典 ...
我是这样理解的,返回的字典应该只是一个呈现方式,返回结果应该是内存里的变量,也就是全局命名空间的内存,但它也有字典的特性,所以可以增加键值对,但是内存地址对应的是全局命名空间,所以就相当于直接增加了一个变量
a = 1
b = 2
print(globals())
print(id(globals()))
c = 3
d = 4
print(globals())
print(id(globals()))
运行结果:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001FF96CF6D00>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\21064\\Desktop\\pyPractice\\spider\\test.py', '__cached__': None, 'a': 1, 'b': 2}
2197259772544
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001FF96CF6D00>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\21064\\Desktop\\pyPractice\\spider\\test.py', '__cached__': None, 'a': 1, 'b': 2, 'c': 3, 'd': 4}
2197259772544
你看哈,加了新的变量,但是全局命名空间的id没有变 白two 发表于 2021-8-17 20:07
我是这样理解的,返回的字典应该只是一个呈现方式,返回结果应该是内存里的变量,也就是全局命名空间的内 ...
明白了,谢谢~{:5_109:}
页:
[1]