在 Python 中,并非如此。None
您可以通过返回而不是 -1在 Python 中使其更清晰;这样做的好处是错误地添加到无效值会引发异常。
具有更严格的类型系统和“可能”或可选值的良好概念的语言使其变得轻而易举。说,哈斯克尔:
rec 1 = Nothing
rec 0 = Just 1
rec n = map ((+) 1) $ rec (n - 2)
map
调用意味着它将添加框中的任何内容(如果是),Just x
并返回无效值(Nothing
)不变。当然,您可以设计自己的更复杂的类型,允许多种错误条件或其他任何情况,并且仍然获得类似的简单结果。这在 OCaml、F#、Standard ML 和 Scala 中几乎一样简单。
None
您可以通过定义一个辅助函数在 Python中模拟这种方法:
def mapMaybe(obj, f):
if obj is None:
return None
else:
return f(obj)
然后你可以这样做:
return mapMaybe(val, lambda x: x + 1)
但我不知道我是否真的建议这样做。
模拟 Scala 书中的一个技巧,也可以将所有这些都包含在生成器理解中(未经测试):
def maybe(x):
if x is not None:
yield x
def firstMaybe(it):
try:
return it.next()
except StopIteration:
return None
然后:
return firstMaybe(x + 1 for x in maybe(val))
但这确实是非标准、非惯用的 Python。