python - 调用另一个函数后立即从一个函数返回

标签 python coding-style return-value

函数 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 没有返回值。但如果我不这样做,我将不得不在每次调用 report_and_set 后重复键入 return

最佳答案

好吧,无论哪种方式,您每次都必须键入 return。我不确定按照您建议的方式进行操作会获得(或失去)什么,尤其是因为

return

实际上等同于

return None

但我想知道为什么函数中有这些空的 return 语句。有必要吗?可能有更优雅或更易于阅读的方式来处理此函数中的控制流。函数中间的随机 return 很容易被忽略。

更抽象地说,对返回语句进行计数是衡量函数复杂度的一种很好的粗略启发式方法;大多数时候,更多的返回意味着更多cyclomatic complexity .甚至有一种思想流派坚持在任何给定函数中仅使用一次 return,这是基于经常引用的“单次进入,一次退出”原则。其实,我觉得“单进单出”和“只回一次”是不一样的,在我看来是比较严格的,有时也很繁琐。 (有关更多信息,请参阅 this post ,这表明“只返回一次”是基于对 SESE 的误解)。但是,更少的 return 语句更好的一般原则对我来说仍然是一个很好的原则。

关于python - 调用另一个函数后立即从一个函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9146881/

相关文章:

python - 在python中收集不同进程的结果

java - Android:为什么在这个例子中使用return?

java - 如何使用oracle数据库中的值验证我的密码以及java中return 0和return 1之间的区别

c# - 创建新数据库条目时违反命令查询分离

java - 有没有办法指示相反方向的标签?

c# - 将 if(x) Foreach() 替换为 Foreach.Where(x)

c - 修改函数返回的内存地址内容

python - 使用 float 索引合并两个 Pandas 数据帧

python - 根据行的日期字段用上周日注释 Django 查询集

python - 无法使用 Selenium 在搜索字段中输入文本