python调用模块函数_如何调用导入的python模块中的每个函数

本文探讨了如何在Python中动态地获取并调用导入模块中的所有函数,避免每次添加新函数时都需要更新主文件。通过遍历模块的__dict__属性并检查__call__属性,可以获取模块中的函数列表,然后进行调用。另外,还提到了使用inspect模块来判断是否为函数的方法。需要注意的是,这种做法可能存在顺序不确定的问题,并且要谨慎使用。
摘要由CSDN通过智能技术生成

我编写了一个程序,它创建和维护一个数组,我编写了另一个模块,它具有操作数组的功能。是否可以调用导入模块中的每个函数而不必对每个函数调用进行硬编码?意思是这样的:

#Some way I don't know of to get a list of function objects

listOfFunctions = module.getAllFunctions()

for function in listOfFunctions:

array.function()

我希望这样做,这样我就不必每次向操纵模块添加函数时都更新主文件。

我发现了这些:

如何从python目录中的每个模块调用函数?

是否可以列出模块中的所有功能?

列出python模块中的所有函数

而且也只能在python文档的模块中列出函数。我可以用一些字符串操作和eval()函数来实现这一点,但我觉得必须有一种更好的、更Python式的方法。

在某些单元测试中,这看起来是一种非常脆弱的方法。如果这正是您所追求的,那么为什么不连接一个合法的单元测试框架呢?否则我不太明白你的意图。

@赛博,我不是为了测试而使用它,所以我不是在追求一个单元测试框架。如果有什么问题,我是否会对导入的模块中的实际函数运行单元测试,以确保这些函数正常工作?

我将在模块中创建一个列表,然后当我创建一个函数时,在函数的范围内,将它添加到列表中。这样,帮助器函数就不需要出现在列表中。然后getAllFunctions将返回列表。

导入模块时,__dict__属性包含模块中定义的所有内容(变量、类、函数等)。您可以对其进行迭代,并测试该项是否为函数。例如,可以通过检查__call__属性来完成:

listOfFunctions = [f for f in my_module.__dict__.values()

if hasattr(f,'__call__')]

然后,我们可以通过调用__call__属性来调用列表中的每个函数:

for f in listOfFunctions:

f.__call__()

但是要小心!这本词典没有保证的顺序。函数将以某种随机顺序调用。如果顺序很重要,您可能希望使用强制执行此顺序的命名方案(fun01-do-u-something、fun02-do-u-something等),并首先对字典的键进行排序。

这可能是我写过的最黑客的Python。小心踩踏。

我想你想做这样的事情:

import inspect

listOfFunctions = [func_name for func_name, func in module.__dict__.iteritems()\

if inspect.isfunction(func)]

for func_name in listOfFunctions:

array_func = getattr(array, func_name)

array_func()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值