假设我们在Python 3.x中(我猜想在Python 2.6和Python 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)
在这种情况下,每个函数都会返回元组,但我的问题仍然保持不变。
答案 0 :(得分:32)
return value
是“正确的”方式 - return是语言结构,而不是函数。
如果要返回元组,请使用return your, values, here
不需要任何括号(元组由,
“运算符创建”,而不是()
)
答案 1 :(得分:23)
Python中的括号()
通常有4种用途。
\
。这主要是风格。
decision = (is_female and under_30 and single
or
is_male and above_35 and single)
括号是一种替代语法,可避免达到80列限制,并且必须使用\
进行语句延续。
在任何其他情况下,例如在if
,while
,for
谓词和return
语句中,我强烈建议您不要使用()
除非必要或辅助可读性(由上述4点定义)。获得这一点的一种方法是,在数学中,(1)
和1
只意味着完全相同的事情。在Python中也是如此。
来自C语言系列的人将需要一点点习惯,因为出于历史原因,这些语言中的控制流谓词需要()
。
return
语句的最后一个单词,如果只返回1个值,则省略()
。但是如果你要返回多个值,可以使用()
,因为现在你要返回一个分组,()
可以直观地强制执行。然而,最后一点是风格的,并且受到偏好。请注意,return
关键字会返回语句的结果。因此,如果您只在多个赋值语句和元组结构中使用,
,请省略()
,但如果您使用()
进行值解包和元组结构,请在()
时使用return
您将在{{1}}中返回多个值。保持一致。
答案 2 :(得分:6)
通常,惯例是不在return语句中使用括号,因为它不是函数。在这种情况下,解析器只是完全忽略括号。
元组通常用括号表示,以提高可读性,但不需要它们。
然而,最终,它们的功能完全相同,而且归结为偏好。
答案 3 :(得分:2)
return_stmt ::= “return” [expression_list]
return只能在语法上嵌套在函数定义中,而不能嵌套在类定义中。
如果存在表达式列表,则对其进行评估,否则替换为无。
return将当前函数调用与表达式列表(或None)一起作为返回值。
当return返回带有finally子句的try语句的控制权时,在真正离开函数之前执行finally子句。
在生成器函数中,return语句指示生成器已完成并将引发StopIteration。返回值(如果有)用作构造StopIteration的参数,并成为StopIteration.value属性。
在异步生成器函数中,空的return语句指示异步生成器已完成并将引发StopAsyncIteration。非空返回语句是异步生成器函数中的语法错误。
所以基本上return是一个带有可选表达式列表作为参数的语句。因此,括号不是必需的,只有在需要时才是优选的(即,为了打破优先权)。
答案 4 :(得分:-3)
在(几乎)任何情况下,如有疑问,请使用括号!
看到他们都完全一样,我认为这是个人偏好的问题。我会选择最后一个。
但话说回来,我对python并不熟悉。