在 Python 中根据函数的字符串名称调用函数

Rayven Esplanada 2023年1月30日 2020年12月19日
  1. 在 Python 中使用 getattr() 将一个函数赋值到一个变量中
  2. 在 Python 中使用 locals()globals() 从一个字符串中调用一个函数
在 Python 中根据函数的字符串名称调用函数

本教程将介绍如何在 Python 中根据函数的字符串名称调用函数。

这个问题的用例是将一个模块或类中的函数赋值到一个变量中,不管它有什么用途。

在 Python 中使用 getattr() 将一个函数赋值到一个变量中

函数 getattr() 从对象或模块中返回一个属性值。这个函数有两个必要的参数,第一个参数是对象或模块的名称,第二个参数是一个包含属性名称的字符串值。

有关的属性可以是一个变量、一个函数或一个子类的形式。

假设我们有一个名为 User 的类,具有给定的属性:

# Filename: user.py
class User():
  name = 'John'
  age = 33
  def doSomething():
    print(name + ' did something.')

现在,我们想把属性函数 doSomething() 存储到一个方法中并调用它。要做到这一点,我们将使用 getattr() 函数。

from user import User as user

doSomething = getattr(user, 'doSomething')

doSomething(user)

输出:

John did something.

现在,函数 user.doSomething() 被封装在变量 doSomething 中。这样一来,调用函数时就不需要指定对象 user 了。

在 Python 中使用 locals()globals() 从一个字符串中调用一个函数

另一种从字符串调用函数的方法是使用内置函数 locals()globals。这两个函数返回一个 Python 字典,表示当前给定源代码的符号表。

这两个函数的区别在于命名空间。如名称所示,locals() 返回包括局部变量的字典,globals() 返回包括局部变量的字典。函数名也会以字符串的格式返回。

让我们将这些方法作为示例。声明两个随机函数,并使用两个内置函数调用它。

def myFunc():
    print('This is a function.')

def myFunc2():
    print('This is another function.')

locals()['myFunc']()
globals()['myFunc2']()

输出:

This is a function.
This is another function.

总而言之,根据字符串来调用一个函数,需要使用 getattr()locals()globals() 等函数。getattr() 会要求你知道函数所在的对象或模块,而 locals()globals() 会在自己的范围内定位函数。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相关文章 - Python Function

相关文章 - Python String