从方法返回值的推荐Pythonic方法是什么?为什么?在PEP8样式指南中有没有关于此的文档,我找不到任何文档。
方法1
def method():
a = meth2()
return a
方法2
def method():
return meth2()
答案 0 :(得分:5)
PEP8没有指定是否应该返回变量而不是函数。
然而,它确实说你应该保持一致:
在回复陈述中保持一致。函数中的所有return语句都应该返回一个表达式,或者它们都不应该返回。如果任何return语句返回一个表达式,那么任何没有返回值的return语句都应该明确地将其声明为return None,并且在函数末尾应该有一个显式的return语句(如果可以访问)。
# Yes
def myfunction(a: int, b: int) -> int:
if a % 2 == 0:
return int(a ** b)
else:
return 0
# No
def my_bad_function(a: int, b: int) -> int:
if a % 2 == 0:
return int(a ** b)
# Implicitly returns None when the above if statement evaluates False
返回相同类型的变量也是一个好主意(尽管未在PEP8中介绍)。
您将看到我在上述功能中添加了可选类型提示。第二个功能偶尔会返回None
如果使用此函数的另一个代码块期望返回值具有与int
相同的属性,例如int.bit_length()
导致异常的代码示例:
for n in range(1, 10):
nlen = my_bad_function(n * 5, n).bit_length()
答案 1 :(得分:4)
通常情况下,我很喜欢方法1,特别是在数学代码中。
方法1更容易调试并因此维护,因为您可以在return a
上放置断点,并轻松查看a
是什么。 (虽然很好,C ++ Boost程序员喜欢采用方法2,调用堆栈很大,调试非常困难 - 你必须求助于检查CPU寄存器!)
优秀的python解释器将命名返回值优化,因此您不必担心会采用不必要的值复制。
答案 2 :(得分:1)
方法2似乎很好,因为如果您只是返回从函数接收的值,则不需要变量。另外,它看起来很不错:P
方法1可用于调试目的,或者在返回值
之前需要完成其他操作答案 3 :(得分:0)
我更喜欢方法1 bcos,它使调试变得容易(你可以没有它吗?)
如果我正在调试mehtod 2的代码,那么我使用pycharm Evaluate Expression选项来了解返回的返回语句。