📜  如何以字符串形式调用任何函数 - Python (1)

📅  最后修改于: 2023-12-03 14:51:48.749000             🧑  作者: Mango

如何以字符串形式调用任何函数 - Python

在Python中,我们可以使用字符串形式调用函数。这对于撰写动态代码或根据用户输入调用函数非常有用。在本文中,我们将介绍如何使用字符串调用函数。

使用 eval() 函数

在Python中,我们可以使用 eval() 函数将字符串转换为可执行代码。因此,我们可以将一个字符串作为函数名称传递给 eval() 函数,然后在代码中调用该函数。下面是一个使用 eval() 函数调用函数的例子:

def hello():
    print("Hello, World!")

func_name = "hello()"
eval(func_name)

输出结果为:

Hello, World!

在上面的代码中,我们首先定义了一个函数 hello(),然后将它的名称存储在变量 func_name 中。接下来,我们使用 eval() 函数执行函数调用。

需要注意的是,如果该函数需要传递参数,我们可以在 eval() 函数中传递参数。例如:

def add(a, b):
    return a + b

func_name = "add(2, 3)"
result = eval(func_name)
print(result)

输出结果为:

5

在上面的代码中,我们定义了一个 add() 函数,该函数接受两个参数并返回它们的和。然后,我们将该函数的名称和参数字符串存储在变量 func_name 中,并使用 eval() 函数执行该函数调用。

使用 getattr() 函数

除了 eval() 函数外,还可以使用 getattr() 函数来根据字符串调用函数。这个方法更适合通过字符串调用类方法。

class Hello:
    def __init__(self):
        self.message = "Hello, World!"
     
    def say_hello(self):
        print(self.message)
 
obj = Hello()
method_name = "say_hello"
method = getattr(obj, method_name)
method()

输出结果为:

Hello, World!

在上面的代码中,我们定义了一个类 Hello,它包括一个名为 say_hello() 的方法。然后,我们创建了一个对象 obj,并将方法名称存储在变量 method_name 中。接下来,我们使用 getattr() 函数获取该对象的方法,并在代码中执行该方法。

需要注意的是,如果该方法需要传递参数,我们可以在 getattr() 函数中传递参数。例如:

class Maths:
    def add(self, a, b):
        return a + b
     
obj = Maths()
method_name = "add"
method = getattr(obj, method_name)
result = method(2, 3)
print(result)

输出结果为:

5

在上面的代码中,我们定义了一个 Maths 类和一个 add() 方法。接下来,我们创建了一个对象 obj,并将方法名称和参数存储在变量 method_name 和参数值中。然后,我们使用 getattr() 函数获取该对象的方法,并在代码中执行该方法。

结论

在本文中,我们学习了如何使用 Python 中的 eval() 和 getattr() 函数调用任何函数或类方法。这将使我们可以根据需要动态地执行代码或调用函数。但我们应该注意,eval() 函数存在安全风险,因此我们应该避免不必要的使用。