48

Pythonでメソッドから一行で返すことは可能ですか

このようなものを探しています

return None if x is None

上記を試しましたが、無効な構文です

私は簡単に行うことができます:

if x is None:
    return None

しかし、上記のifステートメントを1行に組み合わせることができるかどうか、ちょっと興味があります

4

4 に答える 4

7

免責事項: 実際にはこれを行わないでください。本当にワンライナーが必要な場合は、nakedfanatic のように、PEP-8 の経験則を破るだけです。しかし、なぜreturnあなたが思ったように振る舞わないのか、そしてあなたが思ったように振る舞うのはどのように見えるのかを示していますreturn.

と言えない理由は、それが式ではなくステートメントreturn None if x is Noneを導入しているからです。returnしたがって、それを括弧で囲む方法はありません(return None) if x is None else (pass)

大丈夫です、私たちはそれを修正できます。完全なステートメントではなく式であることを除いて、次のretように動作する関数を書きましょう。return

class ReturnValue(Exception):
    def __init__(self, value):
        Exception.__init__(self)
        self.value = value

def enable_ret(func):
    def decorated_func(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except ReturnValue as exc:
            return exc.value
    return decorated_func

def ret(value):
    raise ReturnValue(value)

@enable_ret
def testfunc(x):
    ret(None) if x is None else 0
    # in a real use-case there would be more code here
    # ...
    return 1

print testfunc(None)
print testfunc(1)
于 2013-09-07T08:26:35.403 に答える
4

list[bool]次の式を試すこともできます。

return [value, None][x == None]

2 番目のブラケットが true と評価された場合、None が返されます。それ以外の場合は、返したい値が返されます。

于 2013-09-07T05:52:54.950 に答える