📅  最后修改于: 2023-12-03 15:19:07.119000             🧑  作者: Mango
在Python中,我们常常需要动态地调用函数,同时我们有时候需要通过函数名称的字符串来获取函数本身,这时候就需要用到Python中的一些内置函数和方法了。本文将会介绍如何从字符串名称中获取函数。
eval()函数是Python中的一个内置函数,它可以将字符串作为Python代码来执行。这样,我们就可以通过字符串名称来获取函数。下面是一个简单的例子:
def func():
print("Hello World!")
func_str = "func"
eval(func_str + "()")
这个例子中,我们定义了一个函数func()
和一个字符串变量func_str
,这个字符串变量存储了函数名称。我们通过将字符串变量与括号组合成函数调用的形式,使用eval()
函数动态地调用了函数。
这种方法可以用于执行任何Python代码,但是也存在着一些潜在的安全隐患。因此,如果可以避免使用eval()
函数,就尽量避免使用。
在Python中,每个模块都有一个全局命名空间,我们可以使用globals()
函数获取这个命名空间中的所有全局变量和函数。
我们可以通过globals()
函数获取函数的引用,然后再根据函数名称来调用函数。下面是一个示例:
def func():
print("Hello World!")
func_str = "func"
func_ref = globals()[func_str]
func_ref()
在这个示例中,我们首先定义了一个函数func()
和一个字符串变量func_str
,func_str
变量存储了函数名称。
使用globals()
函数获取全局命名空间中的变量和函数,然后将函数名称作为键来获取函数的引用。
最后,我们调用函数func_ref()
来调用函数。
在Python中,可以使用getattr()
函数来获取对象的属性或方法。我们可以使用这个函数来获取函数的引用。
def func():
print("Hello World!")
func_str = "func"
func_ref = getattr(__main__, func_str)
func_ref()
在这个示例中,我们首先定义了一个函数func()
和一个字符串变量func_str
,func_str
变量存储了函数名称。
使用getattr()
函数获取模块中的函数,模块名称可以使用内置模块__main__
表示,然后将函数名称作为第二个参数传递给getattr()
函数。
最后,我们调用函数func_ref()
来调用函数。
以上就是从字符串名称中获取函数的三种方法。eval()
函数可以执行任何Python代码,但是存在安全隐患,使用时需要小心。globals()
函数可以获取全局命名空间中的变量和函数的引用,getattr()
函数可以获取模块中的函数的引用。在实际使用中,可以根据具体情况选择合适的方法来获取函数的引用。