fromkeys,eval,join的使用
下面有两个字典dic2,dic3,一个是通过fromkeys生成,一个是手动创建。
dic2 = dict.fromkeys(['k1', 'k2', 'k3', 'k4'], []) dic3 = {'k3': [], 'k2': [], 'k1': [], 'k4': []} # 最初两个字典是key value 是一样的 print(dic2) print(dic3) print("****************") # 对字典的value增加一个值 dic3['k3'].append('123') # 对fromkeys 的字典也增加相同的value dic2['k3'].append('123') print(dic3) print(dic2)
虽然说都对两个相同的字典,更新相同的value,但是通过fromkeys创建的字典却更新了所有key的值
这是为什么呢?
原因是通过fromkeys创建的字典,其value值对应的是同一个内存地址,更新了其中一个value的值,内存地址值被更新
当默认的值不是列表,而是字符串时,不会出现这种情况,只会更新要更新的value值
eval
可以将指定来源的字符串转为这个字符串所在的内存地址
class P: def func(self): print("0") p = P() getattr(eval("p"),"func")() #输出0 print(eval("P")) #输出<class '__main__.P'>
join
使用方法:"变量".join"变量"
将join前面的变量循环插入到后面的变量中间
s = ":".join("我的还是我的")
print(s) #输出 我:的:还:是:我:的