Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有作为参数传递的依赖项的函数_Python - Fatal编程技术网

Python 具有作为参数传递的依赖项的函数

Python 具有作为参数传递的依赖项的函数,python,Python,我正在做一个项目,我批量生成XML文件,可以导入到工业触摸屏的IDE中 每个XML文件代表一个屏幕,大多数屏幕都需要相同的功能,处理这些功能的过程也是相同的,只是每个屏幕类型都有一个唯一的配置功能 我正在使用一个ScreenType类来保存特定于屏幕类型的属性,因此我决定为每个类型编写一个唯一的配置,并将其作为参数传递给这个类的\uuuu init\uuuu()。这样,当我根据需要传递我的屏幕类型时,它的配置功能将保持捆绑状态,并且可以在需要时使用 但我不确定如果我的配置函数本身有依赖性会发生什

我正在做一个项目,我批量生成XML文件,可以导入到工业触摸屏的IDE中

每个XML文件代表一个屏幕,大多数屏幕都需要相同的功能,处理这些功能的过程也是相同的,只是每个屏幕类型都有一个唯一的配置功能

我正在使用一个
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
,它也可以正常工作

将函数作为参数传递会生成对该函数的引用。通过该引用,您可以像按名称调用函数一样调用该函数,而实际上不知道名称(或它来自的模块)。该引用在程序的生命周期内有效,并且始终引用相同的函数。如果存储函数引用,它基本上会成为同一函数的不同名称