清理Python返回分配

3
我有一个返回多个项的方法。
def multiReturn():
   return 1,2,3,4

我正在将它分配在一行上

one, two, three, four = multiReturn()

有没有一种方法可以清理上面的行?
类似于:

这样做:

one,
two,
three,
four = multiReturn()

因为我的一些变量名变得很长,页面的宽度困扰着我。

有什么想法可以整理一下吗?


3
依我拙见,您的情况强烈暗示了您想要实现的那个元组行为应该抽象成自己的类,并将multiReturn()作为它的构造函数。 - Frédéric Hamidi
4个回答

10

你可以使用括号:

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

3
然而,这并不更加清洁。 - user395760
@delnan 不是... 在这种情况下 - 它比原来的更不清晰... ;) 只是展示了多行分组的“正确”方法 - Jon Clements

8

如果您已经返回了很多项,请考虑创建某种数据结构。一个类应该是可以的,但如果您认为这有些过度设计,您可以使用一个字典甚至是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()

1
我喜欢这个,因为它还有一个优点,可以使函数的返回值更加自我说明... - Jon Clements

2

在每行末尾使用反斜杠。

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

最近在SO上有人教我,当你这样做时,它告诉解释器忽略下一个字符,通常情况下使用反斜杠时,下一个字符将是换行符。但是,如果您打错字或在那里放置注释,则可能是另一个字符。所以,请注意。 - 2rs2ts

-1

缩短变量名。

不开玩笑。如果你不能符合通常的宽度限制,那说明你需要进行一些重构。让我来谈谈这个。

为了保持清晰,名称应该保持简洁。另一方面,你需要它们描述它们所持有的值或执行的代码(例如函数等)。

如果对你来说很难描述值并且保持名称简短,这意味着对于阅读你的代码的任何人来说,阅读和理解可能会更加困难,因为你让他们集中注意力在多个事物上。

作为比较,如果我要写类似于:

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

这样做更易读,而且允许在配置过程中添加更多逻辑(例如回退、从文件而不是数据库中读取...),而不会使我的代码变得混乱。


@RickyMutschlechner 是的,它有点太简洁了。我试图详细说明。 - Alois Mahdal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接