在 Python 中通过字符串名称调用函数
通过字符串名称调用函数:
- 导入定义函数的模块。
-
使用
getattr()
函数获取函数。 - 调用函数。
main.py
# ✅ 如果函数位于不同的模块中 import example_module func = getattr(example_module, 'example_function') print(func('ab', 'cd')) # 👉️ 'abcd' # ----------------------------------------------- # ✅ 如果函数位于同一模块中 def do_math(a, b): return a + b func = globals()['do_math'] print(func(10, 5)) # 👉️ 15 # ----------------------------------------------- # ✅ 调用给定字符串名称的类方法 class Employee(): def __init__(self, first, last): self.first = first self.last = last def get_name(self): return self.first + ' ' + self.last cls = globals()['Employee'] emp1 = cls('fql', 'jiyik') func = getattr(emp1, 'get_name') print(func()) # 👉️ fql jiyik
如果我们需要调用给定字符串名称的函数并且该函数在不同的模块中定义,则首先必须导入该模块。
import example_module
func = getattr(example_module, 'example_function')
print(func('ab', 'cd')) # 👉️ 'abcd'
代码示例假定在同一目录中有一个名为 example_module
的模块。
example_module.py
def example_function(a, b): return a + b
一旦我们有了定义导入函数的模块,我们就可以使用 getattr()
函数通过字符串名称获取函数。
getattr
函数返回对象提供的属性的值。
该函数采用以下参数:
- object 应检索其属性的对象
- name 命名属性的名称
- default 对象上不存在该属性时的默认值
getattr()
函数将返回该函数,因此最后一步是调用它并提供所有必需的参数。
import example_module
func = getattr(example_module, 'example_function')
print(func('ab', 'cd')) # 👉️ 'abcd'
如果函数在同一个模块中定义,请使用 globals()
函数。
使用 globals() 通过字符串名称调用函数
通过字符串名称调用函数:
-
使用
globals()
函数获取包含当前作用域的全局变量的字典。 - 使用字符串作为字典键来获取函数。
- 调用函数。
def do_math(a, b):
return a + b
func = globals()['do_math']
print(func(10, 5)) # 👉️ 15
globals()
函数返回一个实现当前模块命名空间的字典。
def do_math(a, b):
return a + b
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f151f799de0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/borislav/Desktop/bobbyhadz_python/main.py', '__cached__': None, 'do_math': <function do_math at 0x7f151f8e3d90>}
print(globals())
我们可以使用字符串来访问字典中的特定键。
有一个带有函数名称的键指向实际函数。
如果模块中不存在具有给定名称的函数,则会出现 KeyError
异常。
最后一步是使用括号调用函数,为其提供所需的任何参数。
或者,我们可以定义一个将函数名称映射到实际函数的字典。
def do_math(a, b):
return a + b
functions_dict = {
'do_math': do_math,
}
function_name = 'do_math'
if function_name in functions_dict:
# 👇️ 15
print(functions_dict[function_name](10, 5))
functions_dict
字典将函数名称作为键,将实际函数作为值。
If if 语句在调用函数之前检查指定的字符串是否存在于字典中。
如果需要通过字符串名称调用类方法,可以使用 getattr()
函数。
在 Python 中通过字符串名称调用方法
通过字符串名称调用方法:
- 实例化类以获取对象。
-
使用
getattr()
函数来访问该方法。 - 调用方法。
class Employee():
def __init__(self, first, last):
self.first = first
self.last = last
def get_name(self):
return self.first + ' ' + self.last
cls = globals()['Employee']
emp1 = cls('fql', 'jiyik')
func = getattr(emp1, 'get_name')
print(func()) # 👉️ fql jiyik
如果我们必须从另一个类方法中通过字符串名称调用方法,我们可以将
self
作为第一个参数传递给getattr()
函数。
如果该类是在不同的模块中定义的,则必须导入它。
我们可以直接导入类或使用 importlib.import_module()
方法。
这是一个直接导入类并通过字符串名称调用方法的示例。
import example_module
cls = getattr(example_module, 'Employee')
emp1 = cls('fql', 'jiyik')
func = getattr(emp1, 'get_name')
print(func()) # 👉️ fql jiyik
代码示例假定在同一目录中有一个名为 example_module
的模块。
class Employee():
def __init__(self, first, last):
self.first = first
self.last = last
def get_name(self):
return self.first + ' ' + self.last
我们使用 getattr()
函数获取类,然后使用该函数获取方法。
最后一步是调用该方法。
这是一个使用
importlib.import_module()
方法在调用给定字符串名称的特定方法之前导入模块的示例。
import importlib
module = importlib.import_module('example_module')
cls = getattr(module, 'Employee')
emp1 = cls('fql', 'jiyik')
func = getattr(emp1, 'get_name')
print(func()) # 👉️ fql jiyik
代码示例假定在同一目录中有一个名为 example_module
的模块,并且该模块定义了一个 Employee
类。
importlib.import_module
方法采用模块的名称并导入它。
name 参数可以是绝对的或相对的,例如 pkg.module 或 ..module 。
如果我们使用相对包名称,例如 ..module,我们必须将第二个参数传递给 import_module()
方法,例如 import_module('..module', pkg.subpkg')
导入 pkg.module
。
相关文章
Python for 循环中的下一项
发布时间:2023/04/26 浏览次数:179 分类:Python
-
本文讨论了 Python 中的 for 循环以及如何通过使用 for 循环和示例来跳过列表的第一个元素。
Python While 循环用户输入
发布时间:2023/04/26 浏览次数:148 分类:Python
-
我们可以在 while 循环中使用 input() 函数来输入数据,直到在 Python 中满足某个条件。
在 Python 中将整数转换为罗马数字
发布时间:2023/04/26 浏览次数:87 分类:Python
-
本篇文章将介绍在 Python 中将整数转换为罗马数字。以下是一个 Python 程序的实现,它将给定的整数转换为其等效的罗马数字。
在 Python 中将罗马数字转换为整数
发布时间:2023/04/26 浏览次数:144 分类:Python
-
本文讨论如何在 Python 中将罗马数字转换为整数。 我们将使用 Python if 语句来执行此操作。 我们还将探讨在 Python 中将罗马数字更改为整数的更多方法。
在 Python 中读取 gzip 文件
发布时间:2023/04/26 浏览次数:70 分类:Python
-
本篇文章强调了压缩文件的重要性,并演示了如何在 Python 中使用 gzip 进行压缩和解压缩。
在 Python 中锁定文件
发布时间:2023/04/26 浏览次数:141 分类:Python
-
本文解释了为什么在 Python 中锁定文件很重要。 这讨论了当两个进程在没有锁的情况下与共享资源交互时会发生什么的示例,为什么在放置锁之前知道文件状态很重要,等等
在 Python 中将 PDF 转换为文本
发布时间:2023/04/26 浏览次数:196 分类:Python
-
在本教程中,我们将学习如何使用 Python 使用 PyPDF2、Aspose 和 PDFminer 将 PDF 文档转换为文本文件。
在 Python 中创建临时文件
发布时间:2023/04/26 浏览次数:53 分类:Python
-
本文讲解了tempfile库函数的四个子函数:TemporaryFile、NamedTemporaryFile、mkstemp、TemporaryDirectory。 每个部分都提供了适当的程序,以简化对概念的理解。