清理python返回任务

时间:2013-07-24 21:04:20

标签: python

我有一个返回多个项目的方法。

def multiReturn():
   return 1,2,3,4

我将它分配到一行

one, two, three, four = multiReturn()

有没有办法清理上面一行

类似的东西:

one,
two,
three,
four = multiReturn()

因为我有一些变量名变大了,页面的宽度让我烦恼。

任何清理它的想法

4 个答案:

答案 0 :(得分:10)

您可以使用括号:

(
    one,
    two,
    three,
    four
) = range(4)

答案 1 :(得分:8)

如果您已经返回了这么多项目,请考虑创建某种数据结构。一个班级应该没问题,但是如果你觉得它太过分了,你可以使用dict甚至是namedtuple

# First define the structure
myStruct = namedtuple('myStruct', ['item1', 'item2', 'item3', 'item4'])

# Then use it
def multiReturn():
    return myStruct(1,2,3,4)

# No unpacking required!
this_is_awesome = multiReturn()

答案 2 :(得分:2)

在每行末尾使用反斜杠。

one, \
two, \
three, \
four = multiReturn()

答案 3 :(得分:-1)

缩短变量名称。

不,真的。如果你不能适应通常的宽度约束,那么暗示你需要进行一些重构。让我谈谈。

要保持清醒,名称应保持简短。另一方面,您需要它们来描述它们持有的值,或者它们正在执行的代码(我的功能等)。

如果您难以描述值保持名称简短,则意味着对任何人而言 阅读你的代码,你很有可能甚至更难阅读和理解,因为你做了 他们专注于多种事情。

对于comaprison,如果我要写类似的东西:

class App():

    def __init__(self):

        self.config = {}
        self.error = ""
        # ...
        configDatabaseConnection = mydbmodule.conect(credentials)
        configQuery = "this and that"
        config = configDatabaseConnection.query(configQuery)
        configDatabaseConnectionErrorString = (configDatabaseConection.error)
        if configDatabaseConnectionErrorString:
            raise configError(configDatabaseConnectionErrorString)
        # ...

通常意味着我需要将配置分离到另一个方法,而是使用它:

class App():

    def __init__(self, credentials):

        self.config = self.load_config(credentials)
        self.error = ""
        # ...

        self.load_config()

     def load_config(self, credentials):

        conn = mydbmodule.conect(credentials)
        q = "this and that"
        config = conn.query(q)
        if conn.error:
            raise configError(conn.error)
        self.config = config

更具可读性,并且允许在配置过程中添加更多逻辑(例如,回退,从文件读取而不是db ...),而不会混淆我的代码的要点。