问题在标题...
我正在学习 Python,我听说过几次返回 None 的函数是你在真正的程序中永远不应该拥有的东西(除非你的函数从不返回任何东西)。虽然我似乎找不到绝对必要的情况,但我想知道这样做是否是一种好的编程实践。即,如果您的函数返回整数(例如,方程的解),则 None 表示没有返回的答案。还是应该始终将其作为函数内部的异常处理?也许还有其他一些实际有用的例子?还是我永远不应该这样做?
问题在标题...
我正在学习 Python,我听说过几次返回 None 的函数是你在真正的程序中永远不应该拥有的东西(除非你的函数从不返回任何东西)。虽然我似乎找不到绝对必要的情况,但我想知道这样做是否是一种好的编程实践。即,如果您的函数返回整数(例如,方程的解),则 None 表示没有返回的答案。还是应该始终将其作为函数内部的异常处理?也许还有其他一些实际有用的例子?还是我永远不应该这样做?
这完全是不正确的。一方面,任何不需要返回值的函数都会返回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
是当您想说“终止此函数”而不必嵌套一堆 if 时。
这有点复杂。归结为这里的案例:
仅改变其对象状态的函数不会返回任何内容(返回 None)。例如,给定一个名为 L 的列表:L.sort(); L.append("乔")
其他函数创建一个新对象或对象的新副本,并在不改变原始列表的情况下返回它。考虑: sorted(L) ;y = L + [1,2,3]
返回 None 通常是不好的形式,意思是“一切都很好”。
如果您有某种查找/访问器,None 表示“该项目的值为 None”,当它没有找到时,您应该抛出适当的异常。
在大多数其他情况下,返回 None 有点令人困惑。