gpt4 book ai didi

python - 运行函数后,函数变成了一个ndarray

转载 作者:太空宇宙 更新时间:2023-11-03 21:26:36 25 4
gpt4 key购买 nike

我正在尝试编写带有 exec 和 eval 函数的代码,以从 numpy .npz 文件中读取变量列表。

查看之前的帖子:在迈克尔·布彻的帮助下 exec name "templet_1h" is not defined,该功能现在正在运行。然而,我又遇到了一个尴尬的情况。

在我执行函数之前,类型(read_file)是一个函数,在我执行函数之后,类型(read_file)变成了一个类“numpy.ndarry”。

有人可以帮我解释一下吗?怎么解决?

def read_file(file_names_2):
global templet_1h
import numpy as np
Delete_elements=["arr_0"]
evaluate_1= "templet_1h=np.load(\"./" +file_names_2+ ".npz\")";
exec(evaluate_1,globals())
for i in (templet_1h.files):
if not ( (i in Delete_elements) ):
evaluate_2= i+"="+"templet_1h[\"" + i + "\"]";
exec(evaluate_2,globals())
del templet_1h
return

最佳答案

此行为的唯一可能的解释是您有一个名为 read_file 的文件。添加到 templet_1h .

当你循环templet_1h.files时,在某些时候,将调用以下内容:

evaluate_2= i+"="+"templet_1h[\"" + i + "\"]";
# this results in: read_file = templet_1h["read_file"]

执行此命令后,它会重新绑定(bind) read_file到全局命名空间中的 numpy 数组而不是你的函数。

<小时/>

虽然有多种方法可以解决此问题,但真正的问题是您不应该使用 exec以这种方式。执行任意 python 代码是危险的,并且这个特定的代码片段非常容易被滥用。例如,如果用户决定将文件名设为 'np.argmax' ,您将无法调用 argmax函数,这样的例子不胜枚举。

您确实应该使用字典之类的东西来存储可变数量的变量,而不是依赖危险的行为。

关于python - 运行函数后,函数变成了一个ndarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53799500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com