看了很多文章,有很多介绍的很详细。但一直都不能正确使用,总是出现这样那样的问题。但学到了很多名词和描述。
继续和AI对话过程中,找到了解决方案。这里只针对个人问题做一个记录。
npz_data是一个字典,
方案2原因:由于它在函数内,所以在exec函数里添加globals(),也是错的。
但在此基础上,问了AI几个问题,就得到了正确方案。
根据你提供的错误追踪信息,问题出现在以下这行代码:
eval(f"{key} = npz_data['{key}']")
这是因为在eval函数中,你试图执行一个赋值操作,但这不是有效的Python语法。eval函数只能用于执行表达式,而不能执行赋值语句。
如果你想将npz_data字典中的值赋给相应的变量名,你可以使用字典解析来实现。这里是一个示例:
for key in npz_data:
globals()[key] = npz_data[key]
这里,globals()函数返回当前全局符号表,然后我们通过key将npz_data中的值赋给全局变量。
但是,请注意,这种方法可能会导致命名冲突和意外的副作用,因为它直接修改了全局符号表。更好的做法是使用一个临时字典来存储结果,或者创建一个新的命名空间来存储这些变量。
def update_mark2npz(self, prd_uni):
npz_data, df = self.read_npz(prd_uni)
# 方案1:失败
# for key in npz_data:
# exec(f"{key} = npz_data['{key}']")
# 方案2:失败
# for key in npz_data:
# exec(f"{key} = npz_data['{key}']", globals())
# 方案3:失败
# for key in npz_data:
# eval(f"{key} = npz_data['{key}']")
for key in npz_data:
globals()[key] = npz_data[key]
还是不能在函数内修改,只能调用。
想修改还是要再次global var1…
所以仅调用,可以方便使用。但如果要做修改,还是常规引用吧。
有时候优化代码会上瘾,这里先自我妥协了**-_-!!!**