返回语句需要括号吗?
假设我们在 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 个回答
一般来说,返回语句不需要用括号,因为它不是一个函数。在这种情况下,解析器会完全忽略这些括号。
元组通常用括号来提高可读性,但其实括号并不是必须的。
总的来说,它们的功能是一样的,主要还是看个人喜好。
return value
是“正确”的写法——因为 return 是一种语言结构,而不是一个函数。
如果你想返回一个元组,可以用 return your, values, here
。
不需要加任何括号(元组是通过 ,
这个“运算符”来创建的,而不是通过 ()
)。
在Python中,括号()
一般有四种用法。
- 它的作用和大多数其他主流编程语言一样,主要是用来控制运算的优先级,就像数学公式一样。也就是说,只有在必要的时候才使用,比如你想确保加法和减法先于乘法和除法进行。
- 它可以用来创建一个空的元组,并提升运算符的优先级。
- 在导入模块时,可以用括号把多个名字放在一起,这样就不需要用多行符号
\
了。这主要是为了代码的美观。 - 在一些长语句中,比如
decision = (is_female and under_30 and single
or
is_male and above_35 and single)
使用括号是一种替代语法,可以避免超过80列的限制,也不需要用\
来继续语句。
在其他情况下,比如在if
、while
、for
条件和return
语句中,我强烈建议除非必要或者能提高可读性,否则不要使用()
(这由上面提到的四点来定义)。可以用数学来说明这一点,(1)
和1
的意思是完全一样的。在Python中也是如此。
来自C语言家族的人可能需要一点时间来适应,因为在那些语言中,控制流条件是必须使用()
的,这主要是历史原因。
关于return
语句,如果你只返回一个值,可以省略()
。但如果返回多个值,使用()
是可以的,因为这表示你在返回一组值,括号在视觉上也能帮助理解。不过,这个最后一点主要是个人风格问题。记住,return
关键字返回的是一个语句的结果。所以如果你在多个赋值语句和元组构造中只使用,
,可以省略()
,但如果你在值解包和元组构造中使用了()
,在return
中返回多个值时也要使用()
。保持一致性。