将'参数列表'作为python中的namedtuple传递

时间:2012-10-03 20:21:23

标签: python import namedtuple

我创建了一个名为Engine的命名元组,它包含了我想传递给程序的大部分信息。在这个元组内部,有一些参数和两个实例类,由下游方法使用。

Engine = namedtuple('Engine', 'website, browser, s, e')
engine = Engine(website, browser, s(), e())

我有一个函数download(engine),我将engine传递进去。 download传递engine中的子功能 - 其中一些使用website,其中一些使用browser,其中一些使用s,一些使用e 1}}。

现在,(我作为程序员)的认知开销显着下降,我不再需要确保参数列表在可能发生的特定更改的下游和上游都是最新的 - 我只是通过{{ 1}}下游,如果我在方法中使用参数,我使用engine

另一方面,感觉这就是'懒惰'编程 - 只需将所有内容包装到引擎'类'中,并将变量作为类中的方法似乎使一切变得非常简单。此外,我发誓,有一些我没有看到这种实现的开销。这有什么先例,因为忽视这种感觉太有用了。

我是否应该使用namedtuples作为整个程序中参数的替代,以减少传递的参数数量?

2 个答案:

答案 0 :(得分:4)

我认为这实际上是一个非常好的模式。 namedtuples非常有效,可以提高可读性。与常规元组相比,它们的空间开销实际上为零。

所以namedtuples可以看作是一种轻量级的类,如果他们的职责增加,可以成长为它们。

Raymond Hettinger在Talk from PyCon US 2011 [11:35 - 26:00]中详细解释了他们的优势和用例,比以往任何时候都要好得多。

答案 1 :(得分:2)

这听起来像parameter object pattern的一些变体。另一方面,听起来你也可以把它作为一个类来实现,即

class Engine(object):
   website = ...
   browser = ...
   s = ...
   e = ...

   def download(self):
       ...
   def _sub_function(self):
       ...