我有一个模块,在模块中是一个包含多种功能的子组件。我需要遍历包含模块名称的名称列表,并调用函数。这不起作用,“因为模块没有属性列表”。如何使listx作为模块的子组件而不是"list“名称调用。
档案1:
def x():
print('x')
def y():
print('y')
def z():
print('z')档案2:
import module # containing functions x(),y(),z()
list = ['x','y','z']
for x in list:
module.list[x]()发布于 2022-06-28 19:07:21
import module
lst = ["x", "y", "z"]
for item in lst:
getattr(module, item)()指纹:
<function x at 0x7f2c56129e50>
<function y at 0x7f2c56129f70>
<function z at 0x7f2c560e4c10>发布于 2022-06-28 19:06:52
您可以使用getattr访问模块的“内容”。
使用dir“内省”模块的内容:
import my_module
func_names = ['x','y','z']
callable_funcs = []
for stuffs in dir(my_module):
if stuff in func_names:
callable_funcs.append(getattr(my_module, stuff))
# make a dictionary
funcs = dict(zip(func_names, callable_funcs))
# usage
x = funcs['x']
print(x())另一种使用getattr和hasattr的方法
import my_module
func_names = ['x','y','z']
callable_funcs = []
for f_name in func_names:
if hasattr(my_module, f_name):
callable_funcs.append(getattr(my_module, f_name))
# make a dictionary
funcs = dict(zip(func_names, callable_funcs))
# usage
x = funcs['x']
print(x())这也可以通过字典理解来完成:
import my_module
func_names = ['x','y','z']
funcs = {f_name: getattr(my_module, f_name) for f_name in func_names if hasattr(my_module, f_name)}发布于 2022-06-29 07:33:34
你为什么不把函数存储在列表中呢?
>>> def x():
... print("x")
...
>>> def y():
... print("y")
...
>>> functions = [x, y]
>>> for f in functions:
... f()
...
x
y
>>> https://stackoverflow.com/questions/72791585
复制相似问题