正在返回';无';对于Python函数,有没有好主意?

正在返回';无';对于Python函数,有没有好主意?,python,Python,问题在标题中 我正在学习Python,我听过好几次函数不返回任何值是在实际程序中永远不应该有的(除非函数从不返回任何值)。虽然我似乎找不到绝对必要的情况,但我想知道这样做是否是一种好的编程实践。也就是说,如果你的函数返回整数(比如方程的解),没有一个表示没有返回的答案。还是应该始终将其作为函数内部的异常处理?也许还有其他一些例子,当它实际上是有用的?还是我永远都不应该这样做?这完全不是真的。首先,任何不需要返回值的函数都将返回None 除此之外,通常情况下,保持输出的一致性会使事情变得更容易,但

问题在标题中


我正在学习Python,我听过好几次函数不返回任何值是在实际程序中永远不应该有的(除非函数从不返回任何值)。虽然我似乎找不到绝对必要的情况,但我想知道这样做是否是一种好的编程实践。也就是说,如果你的函数返回整数(比如方程的解),没有一个表示没有返回的答案。还是应该始终将其作为函数内部的异常处理?也许还有其他一些例子,当它实际上是有用的?还是我永远都不应该这样做?

这完全不是真的。首先,任何不需要返回值的函数都将返回
None

除此之外,通常情况下,保持输出的一致性会使事情变得更容易,但要做对函数有意义的事情。在某些情况下,返回
None
是合乎逻辑的

如果出现问题,是的,您应该抛出异常,而不是返回
None

不幸的是,编程往往充满了过于笼统的建议。这很容易做到,但Python在这方面做得很好——实用性胜过纯洁性是Python禅宗的一部分。它本质上是dict.get()的用例,一般来说,如果找不到键,最好抛出异常,但在某些特定情况下,返回默认值更有用

def abc():
 print 1
 return None
 print 2

def abc():
 print 1
 return
 print 2
甚至

def abc():
 print 1

所有不返回内容的函数都返回
None
。返回
None
的一个非常重要的用例是,当您想说“终止此函数”而不必嵌套一堆ifs时

有点复杂。 这里可以归结为案例:

只改变对象状态的函数不返回任何内容(不返回任何内容)。例如,给定一个名为L:L.sort()的列表;L.附加(“乔”)

其他函数创建新对象或对象的新副本,并在不改变原始列表的情况下返回它。考虑:排序(L);y=L+[1,2,3]

一般来说,不返回表示“一切都很好”的内容是不好的

如果您有某种查找/访问器,None意味着“该项的值为None”,当找不到它时,您应该抛出相应的异常


在大多数其他情况下,返回None有点令人困惑

“除非你的函数永远不会返回任何东西”-所以我只谈论那些你不会称之为'void'@sashkello的函数。我的其余答案解决了这个问题。谢谢你的回答。我觉得这是指在出现错误的情况下中断函数,不是吗?@sashkello:是的。嵌套ifs可以覆盖
return None
的功能。但是,
returnnone
要干净得多。类似于
返回在Java中。(或者,在某种程度上,PHP中的to
die();
)示例将是一个函数,用于查找列表中符合特定条件的第一项,如果未找到该项,则返回
None
将是最佳选项。尽管您也可以引发异常,
None
考虑到这种情况,似乎很清楚不同意:返回None的查找告诉我它找到的对象是None对象。太不确定了。