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 です。