2

そうでない場合にのみ、値をマップする簡潔な方法はありNoneますか? 何かのようなもの

def fmapMaybe(f, v):
    if v is not None:
        f(v)
    else:
        None

更新:None値がと異なる場合は値を処理する方法を探していNoneますfmapMaybe

上記のコードでfは、 は引数が 1 つの任意の関数であり、 とは異なる場合にvに渡される値です。何または何であるかについて、これ以上の制限はありません。fNonevf

具体例を挙げると、辞書から文字列値を取得し、見つかった場合は整数に変換したいと考えています。したがって、結果は整数またはNone. 上記の関数を使用して、次のように記述します。

fmapMaybe(int, os.environ.get('LINES'))

より短く、より簡潔な方法はありますか?

Don Stewart がコメントしたように、これはHaskell のファンクタやScalafmapの overに似ています。(そして、も返せると考えると、Haskell やScala のモナドに似ています。)MaybemapOptionfNone>>=flatMap

4

2 に答える 2

0

v とは何か、何をしたいのかを教えていただけない場合は、これが私が思いつく最善の方法です。v が反復可能な場合:

result = [f(x) for x in v if x != None]

v が単一の値の場合、if 条件は問題ないように聞こえます。

于 2013-07-31T08:55:34.907 に答える