Python 具有作为参数传递的依赖项的函数
我正在做一个项目,我批量生成XML文件,可以导入到工业触摸屏的IDE中 每个XML文件代表一个屏幕,大多数屏幕都需要相同的功能,处理这些功能的过程也是相同的,只是每个屏幕类型都有一个唯一的配置功能 我正在使用一个Python 具有作为参数传递的依赖项的函数,python,Python,我正在做一个项目,我批量生成XML文件,可以导入到工业触摸屏的IDE中 每个XML文件代表一个屏幕,大多数屏幕都需要相同的功能,处理这些功能的过程也是相同的,只是每个屏幕类型都有一个唯一的配置功能 我正在使用一个ScreenType类来保存特定于屏幕类型的属性,因此我决定为每个类型编写一个唯一的配置,并将其作为参数传递给这个类的\uuuu init\uuuu()。这样,当我根据需要传递我的屏幕类型时,它的配置功能将保持捆绑状态,并且可以在需要时使用 但我不确定如果我的配置函数本身有依赖性会发生什
ScreenType
类来保存特定于屏幕类型的属性,因此我决定为每个类型编写一个唯一的配置,并将其作为参数传递给这个类的\uuuu init\uuuu()
。这样,当我根据需要传递我的屏幕类型时,它的配置功能将保持捆绑状态,并且可以在需要时使用
但我不确定如果我的配置函数本身有依赖性会发生什么。例如:
def configure_inputdiag(a, b, c):
numerical_formatting = get_numerics(a)
# ...
return configured_object
然后,当需要创建屏幕类型的实例时
myscreentype = ScreenType(foo, man, shoe, configure_inputdiag)
get_numerics
是一个模块范围的函数,但是myscreentype
可以(并且确实)在其他模块中传递
这是否会造成依赖关系问题?我试着自己测试它,但似乎我对将函数作为参数传递时发生的事情没有基本的了解。我不想对正在发生的事情得出错误的结论
我尝试过的是:谷歌搜索,搜索等等,但我没有找到任何专门针对Python的东西
提前感谢。您正在尝试的工作在Python中以非常自然的形式运行-
在上面的示例中,您不需要在“configure_inputdiag”所在的名称空间(模块)中导入“get_numerics”函数-您只需将其作为普通参数传递(例如,称之为“function”),如下示例所示:
单元A:
def get_numerics(parm):
...
input diag = module_B.configure_inputdiag(get_numerics, a)
模块B:
def configure_inputdiag(function, parm):
result = function(parm)
哦-我看到了你的怀疑,我是另一种情况-无论如何,这没有问题-在Python中,函数是第一类对象-jsut像int和string,它们可以作为参数传递给其他模块中的其他函数,如你所愿。我认为上面的例子说明了这一点。您试图做的事情在Python中以非常自然的形式工作-
在上面的示例中,您不需要在“configure_inputdiag”所在的名称空间(模块)中导入“get_numerics”函数-您只需将其作为普通参数传递(例如,称之为“function”),如下示例所示:
单元A:
def get_numerics(parm):
...
input diag = module_B.configure_inputdiag(get_numerics, a)
模块B:
def configure_inputdiag(function, parm):
result = function(parm)
哦-我看到了你的怀疑,我是另一种情况-无论如何,这没有问题-在Python中,函数是第一类对象-jsut像int和string,它们可以作为参数传递给其他模块中的其他函数,如你所愿。我认为上面的示例说明了。获取数值
在函数体的范围内解析,因此它也不需要在调用者的范围内。获取数值
在函数体的范围内解析,因此它也不需要在调用者的范围内。没有问题
函数configure\u inputdiag
将始终在其定义的上下文中引用get\u numerics
。因此,即使您从一些对get\u numerics
一无所知的其他模块调用configure\u inputdiag
,它也可以正常工作
将函数作为参数传递会生成对该函数的引用。通过该引用,您可以像按名称调用函数一样调用该函数,而实际上不知道名称(或它来自的模块)。该引用在程序的生命周期内有效,并且始终引用相同的函数。如果存储函数引用,它基本上会成为同一函数的不同名称。没有问题
函数configure\u inputdiag
将始终在其定义的上下文中引用get\u numerics
。因此,即使您从一些对get\u numerics
一无所知的其他模块调用configure\u inputdiag
,它也可以正常工作
将函数作为参数传递会生成对该函数的引用。通过该引用,您可以像按名称调用函数一样调用该函数,而实际上不知道名称(或它来自的模块)。该引用在程序的生命周期内有效,并且始终引用相同的函数。如果存储函数引用,它基本上会成为同一函数的不同名称