3

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

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

我把它分配在一行上

one, two, three, four = multiReturn()

有没有办法清理上面的行

就像是:

one,
two,
three,
four = multiReturn()

因为我有一些变量名变大了,页面的宽度让我很困扰。

任何清理它的想法

4

4 回答 4

10

您可以使用括号:

(
    one,
    two,
    three,
    four
) = range(4)
于 2013-07-24T21:06:43.273 回答
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()
于 2013-07-24T21:07:25.220 回答
2

在每行的末尾使用反斜杠。

one, \
two, \
three, \
four = multiReturn()
于 2013-07-24T21:06:14.067 回答
-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 读取......)而不会弄乱我的代码的要点。

于 2013-07-24T21:09:17.470 回答