返回语句需要括号吗?

59 投票
5 回答
34502 浏览
提问于 2025-04-16 11:42

假设我们在 Python 3.x(我想在 Python 2.6 和 2.7 中也是这样)有以下几个函数:

>>> def dbl_a(p): return p*2
>>> def dbl_b(p): return(p*2)
>>> def dbl_c(p): return (p*2)

如果我们运行这些函数,得到的结果是:

>>> dbl_a(42)
84
>>> dbl_b(42)
84
>>> dbl_c(42)
84

这三个函数的结果(值和类型)都是一样的,看起来它们是等价的。

但是,哪一个的 return 语句更正确呢?

这些定义中有没有什么副作用呢?

同样的问题也适用于以下返回多个值的情况:

>>> def dbl_triple_a(p): return p*2, p*3
>>> def dbl_triple_b(p): return(p*2, p*3)
>>> def dbl_triple_c(p): return (p*2, p*3)

>>> dbl_triple_a(42)
(84, 126)
>>> dbl_triple_b(42)
(84, 126)
>>> dbl_triple_c(42)
(84, 126)

在这种情况下,每个函数返回一个元组,但我的问题依然是一样的。

5 个回答

7

一般来说,返回语句不需要用括号,因为它不是一个函数。在这种情况下,解析器会完全忽略这些括号。

元组通常用括号来提高可读性,但其实括号并不是必须的。

总的来说,它们的功能是一样的,主要还是看个人喜好。

47

return value 是“正确”的写法——因为 return 是一种语言结构,而不是一个函数。

如果你想返回一个元组,可以用 return your, values, here

不需要加任何括号(元组是通过 , 这个“运算符”来创建的,而不是通过 ())。

39

在Python中,括号()一般有四种用法。

  1. 它的作用和大多数其他主流编程语言一样,主要是用来控制运算的优先级,就像数学公式一样。也就是说,只有在必要的时候才使用,比如你想确保加法和减法先于乘法和除法进行。
  2. 它可以用来创建一个空的元组,并提升运算符的优先级。
  3. 在导入模块时,可以用括号把多个名字放在一起,这样就不需要用多行符号\了。这主要是为了代码的美观。
  4. 在一些长语句中,比如

    decision = (is_female and under_30 and single
                or
                is_male and above_35 and single)

使用括号是一种替代语法,可以避免超过80列的限制,也不需要用\来继续语句。

在其他情况下,比如在ifwhilefor条件和return语句中,我强烈建议除非必要或者能提高可读性,否则不要使用()(这由上面提到的四点来定义)。可以用数学来说明这一点,(1)1的意思是完全一样的。在Python中也是如此。

来自C语言家族的人可能需要一点时间来适应,因为在那些语言中,控制流条件是必须使用()的,这主要是历史原因。

关于return语句,如果你只返回一个值,可以省略()。但如果返回多个值,使用()是可以的,因为这表示你在返回一组值,括号在视觉上也能帮助理解。不过,这个最后一点主要是个人风格问题。记住,return关键字返回的是一个语句的结果。所以如果你在多个赋值语句和元组构造中只使用,,可以省略(),但如果你在值解包和元组构造中使用了(),在return中返回多个值时也要使用()。保持一致性。

撰写回答