python 中的 globals 和 locals

from IC import avgIC, randomWeightsIC, uniformWeightsIC
Ew_type = config['Ew_type']
如果Ew_type是一个str,例如:'randomWeightsIC'。randomWeightsIC是一个函数,如何将Ew_type变为这个函数

在 Python 中,如果你有一个字符串名称表示的函数,想要将这个字符串转换为实际的函数对象,可以使用 globals()locals() 函数来实现这个转换。这些函数分别返回当前的全局和局部符号表,这是一个字典,其中包含了当前作用域中定义的所有变量和函数。

假设 randomWeightsIC 是在当前模块定义的一个函数,而 Ew_type 是一个包含函数名(如 "randomWeightsIC")的字符串,你可以这样做:

from IC import avgIC, randomWeightsIC, uniformWeightsIC

# 假设这是从某个配置中获取的字符串,指向一个特定的函数
Ew_type = 'randomWeightsIC'

# 使用 globals() 查找并将字符串转换为函数对象
Ew_function = globals()[Ew_type]

# 现在 Ew_function 是一个函数对象,可以像任何其他函数一样调用它
# 例如:
result = Ew_function(...)

这个方法的关键是 globals()[Ew_type],它从当前的全局符号表中检索名为 Ew_type 值的对象。如果你的函数定义在一个不同的作用域中(例如,在另一个模块或是局部作用域中),你可能需要使用相应的作用域的符号表。对于模块级的作用域,你可能需要访问该模块的字典(使用模块的 __dict__ 属性),或者使用 locals() 如果函数和变量是在同一个局部作用域中定义的。

请确保你的代码中只从可信来源获取函数名字符串,以避免执行任意代码的风险。如果你从不可信的来源获取函数名,那么使用这种方法可能会导致安全漏洞。

posted @ 2024-04-09 15:49  X1OO  阅读(13)  评论(0)    收藏  举报