该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()