避免全局变量但也有太多函数参数(Python)

时间:2015-10-08 18:33:50

标签: python arguments global-variables parameter-passing

让我们说我有一个python模块,它有很多相互依赖的函数,处理彼此的结果。有很多凝聚力。

这意味着我会来回传递很多的论据。要不然,或者我正在使用全局变量。

如果处理这种情况,最佳做法是什么?想到的事情将是用字典替换这些参数。但我不一定喜欢将函数签名改为不那么具有表现力的东西。或者我可以把所有东西都包装成一个类。但这感觉就像我在欺骗和使用"伪" - 全局变量?

我专门询问如何在Python中处理这个问题,但我知道其中许多内容也适用于其他语言。

我没有正确的代码示例,这只是我在思考这个问题时想到的东西。

示例可能是:您有一个计算某事的函数。在这个过程中,计算了很多辅助材料。您的处理程序需要访问这些辅助内容,而您并不想重新计算它。

2 个答案:

答案 0 :(得分:3)

这是一个非常通用的问题,因此很难具体。您似乎要描述的是一组共享数据的相互关联的函数。该模式通常作为Object实现。

使用大量方法创建一个类,而不是一堆函数。对于公共数据,请使用属性。设置属性,然后调用方法。这些方法可以引用属性,而不将它们作为参数显式传递。

答案 1 :(得分:-1)

正如RobertB所说,一个物体似乎是最清晰的方式。可以这么简单:

{{1}}

如果某些函数不应该是这样一个对象的一部分,你可以将它们定义为(非成员,独立)函数,并将blob作为一个参数传递。例如,通过取消缩进messWithDist的def,然后调用messWithDist(blob)而不是blob.messWithDist()。

-s