函数calculate_attribute
不返回值;它只能通过副作用发挥作用。
通常在该函数中我必须编写以下几行:
print('some message')
set_attribute(value)
return
所以我决定把它放到另一个函数中:
def report_and_set(value, message):
print(message)
set_attribute(value)
现在可以执行以下操作:
def calculate_attribute(params):
#...
if something:
return report_and_set(value, message)
#...
if another_condition:
return report_and_set(value, message)
#...
写这个有点奇怪,因为report_and_set
没有返回值。但如果我不这样做,我必须在每次致电return
后重复输入report_and_set
。
答案 0 :(得分:2)
嗯,你必须每次都输入return
。我不确定你以你建议的方式获得(或失败),特别是从
return
实际上与
相同return None
但我想知道为什么你在函数中有这些空的return语句。有必要吗?可能有一种更优雅或更易于阅读的方式来处理此功能中的控制流。函数中间的随机return
很容易错过。
更抽象地说,计算返回语句是衡量函数复杂度的一个很好的粗略启发式算法;大多数情况下,更多的回报意味着更多cyclomatic complexity。根据经常引用的“单一进入,单一退出”原则,甚至有一种思想坚持只在任何特定功能中使用return
一次。事实上,我认为“单入,单出”不同于“一回归”,这对我来说似乎非常严格,而且有时很繁重。 (有关更多信息,请参阅this post,其中表明“仅返回一个”是基于对SESE的误解)。但是较少的return
陈述更好的一般原则对我来说似乎仍然是一个好的。
答案 1 :(得分:1)
许多程序员,包括我自己,prefer a single return
per function。
有时,如果某些健全性检查失败,我可能会在函数的前几行中插入一个return
来保释。
在这种情况下,我不会。
在这种情况下,我只会做......
def calculate_attribute(params):
#...
if something:
report_and_set(value, message)
#...
elif another_condition:
report_and_set(value, message)
#...
但也要考虑Single Responsibility Principle(它同样适用于函数和类)。如果你的函数很长并且包含许多条件函数调用, 可能是refactor的时候了!
答案 2 :(得分:0)
是的,可以这样做。
不,没有错。
继续。