1

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

每个 XML 文件代表一个屏幕,大多数屏幕需要相同的功能,处理它们的过程是相同的,只是每种屏幕类型都有独特的配置功能。

我正在使用一个ScreenType类来保存特定于屏幕类型的属性,因此我决定为每种类型编写一个唯一的配置,并将其作为参数传递给__init__()这个类。这样,当我ScreenType根据需要传递 my 时,它的配置功能将保持捆绑状态,并且可以在需要时使用。

但是我不确定如果我的配置函数本身具有依赖关系会发生什么。例如:

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 的东西。

提前致谢。

4

3 回答 3

3

这里没有问题。

该函数configure_inputdiag将始终get_numerics在定义它的上下文中引用。因此,即使您configure_inputdiag从其他对 . 一无所知的模块调用get_numerics,它也可以正常工作。

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

于 2013-02-06T21:36:17.777 回答
2

您正在尝试做的事情在 Python 中以非常自然的形式工作 -

在上面的示例中,您不需要在“configure_inputdiag”所在的命名空间(模块)中导入“get_numerics”函数 - 您只需将其作为普通参数传递(例如,将其称为“函数”),然后您在这个例子中是这样的:

模块 A:

def get_numerics(parm):
    ...

input diag = module_B.configure_inputdiag(get_numerics, a)

模块 B:

def configure_inputdiag(function, parm):
     result = function(parm)

哦-我看到您的怀疑是另一种方式-无论如何,没有问题-在Python中,函数是一流的对象-就像整数和字符串一样,它们可以像您一样作为参数传递给其他模块中的其他函数希望。我认为上面的例子说明了这一点。

于 2013-02-06T21:36:02.000 回答
2

get_numerics是在函数体的范围内解析的,所以它也不需要在调用者的范围内。

于 2013-02-06T21:36:11.360 回答