我正在开发一个项目,我批量生成可以导入工业触摸屏IDE的XML文件。
每个XML文件代表一个屏幕,大多数屏幕需要相同的功能,处理它们的过程是相同的,除了每个屏幕类型都有一个独特的配置功能。</ p>
我正在使用ScreenType
类来保存特定于屏幕类型的属性,因此我决定为每种类型编写一个唯一的配置,并将其作为参数传递给此__init__()
类。这样,当我根据需要传递ScreenType
时,它的配置功能将保持捆绑状态,并可在需要时使用。
但是我不确定如果配置函数本身具有依赖性会发生什么。例如:
def configure_inputdiag(a, b, c):
numerical_formatting = get_numerics(a)
# ...
return configured_object
然后,当创建ScreenType
myscreentype = ScreenType(foo, man, shoe, configure_inputdiag)
get_numerics
是一个模块作用域函数,但myscreentype
可以(并且确实)在其他模块中传递。
这是否会产生依赖性问题?我会尝试自己测试一下,但是当我将一个函数作为参数传递时,我似乎没有基本的理解。我不想对正在发生的事情得出错误的结论。
我尝试过:谷歌搜索,搜索SO,我没有找到任何专门针对Python的内容。
提前致谢。
答案 0 :(得分:2)
你想要做的是在Python中以非常自然的形式工作 -
在上面的示例中,您不需要在命名空间(模块)中导入“get_numerics”函数,其中“configure_inputdiag”是 - 您只需将其作为普通参数传递(例如,将其称为“函数”) )你会像这个例子一样:
模块A:
def get_numerics(parm):
...
input diag = module_B.configure_inputdiag(get_numerics, a)
模块B:
def configure_inputdiag(function, parm):
result = function(parm)
哦 - 我看到你的疑问我是另一种方式 - 无论如何,没有问题 - 在Python中,函数是一流的对象 - 像int和字符串一样,它们可以作为参数传递给其他函数你想要的模块。我认为上面的例子澄清了这一点。
答案 1 :(得分:2)
get_numerics
在函数体的范围内得到解析,因此它也不需要在调用者的范围内。
答案 2 :(得分:2)
没问题。
函数configure_inputdiag
将始终在定义它的上下文中引用get_numerics
。因此,即使您从对configure_inputdiag
一无所知的其他模块中调用get_numerics
,它也能正常工作。
将函数作为参数传递会生成对该函数的引用。通过该引用,您可以像调用名称一样调用该函数,而无需实际知道名称(或其来自的模块)。该引用对程序的生命周期有效,并始终引用相同的函数。如果存储函数引用,它基本上会成为同一函数的不同名称。