【发布时间】:2016-08-23 23:22:09
【问题描述】:
希望通过使用命名元组来清理一些代码,以保存多个变量以传递多个函数。下面是一个简化的例子(我实际上还有一些额外的参数)。
之前:
def my_function(session_cass, session_solr, session_mysql, some_var, another):
"""Blah blah.
Args:
session_cass (Session): Cassandra session to execute queries with.
session_solr (SolrConnection): Solr connection to execute requests with.
session_mysql (connection): MySQL connection to execute queries with.
some_var (str): Yada yada.
another (int): Yada yada.
"""
之后:
def my_function(sessions, some_var, another):
"""Blah blah.
Args:
sessions (namedtuple): Holds all the database sessions.
some_var (str): Yada yada.
another (int): Yada yada.
"""
对于文档字符串,我一直遵循 Google 样式指南,并添加了类型(灵感来自 this post),我非常喜欢它,因为它可以更轻松地跟踪传入的类型。
我的问题是,在这种情况下,您将如何记录命名元组?显然,正如当前设置的那样,您没有关于命名元组中类型的信息。是否有一种可接受的方式来在这里扩展文档字符串,或者在它定义的地方记录命名元组(未显示)?
我知道你可以在这个庄园中记录一个类,但我试图远离使用一个类,因为除了保存变量之外我没有任何目的。
【问题讨论】:
-
为什么是命名元组?为什么不直接使用 {ident:session} 的(任意)字典,甚至只是一个会话列表......你是否真的在验证它是一个传入的命名元组(根据我的经验,命名元组作为返回值比方法参数)
-
没有特别的原因。我考虑了两者并任意选择了 namedtuple - 它似乎更“轻量级”,并且通常我在值都是相同类型时使用字典(我知道你可以混合类型)。无论如何,我认为两者的问题是相同的 - 从更一般的意义上说,当您将其中任何一个传递给一个函数并且它们包含混合类型时,记录它的最佳方法是什么?也许最好只使用一个类(在类文档中记录类型),或者不要担心它并回溯到初始化命名元组/字典的位置。