通过函数抽象if语句和返回

时间:2015-06-13 12:32:50

标签: python python-2.7

我有这样的功能:

def test():
    x = "3" # In actual code, this is computed

    if x is None:
        return None

    y = "3"

    if y is None:
        return None

    z = "hello"

    if z is None:
        return None

是否有办法让if语句消失并用一些函数对其进行抽象。我期待这样的事情:

def test():
    x = "3"
    check_None(x)

    y = "3"
    check_None(y)

    z = "hello"
    check_None(z)

理想情况下,如果传递给它的参数为None,check_None应该改变控制流。这可能吗?

注意:使用Python 2.7。

2 个答案:

答案 0 :(得分:2)

你可以在这样的事情上轻松编写代码。

def test():
    #compute x, y, z
    if None in [x, y, z]:
       return None
    # proceed with rest of code

更好的方法是使用生成器生成值x,y,z,这样您一次只能计算一个值。

def compute_values():
    yield compute_x()
    yield compute_y()
    yield compute_z()

def test():
    for value in compute_values():
        if value is None:
           return None

答案 1 :(得分:0)

我不确定我们是否应该像这样做,但其中一个黑客可能是这样的,同时创建自己的异常类并且只捕获该特定异常,以便除了和之外没有其他异常被意外捕获返回无。

class MyException(Exception):
    pass

def check_none(x):
    if x is None:
        raise MyException

def test():
    try:
        z=None
        check_none(z)
    except MyException, e:
        return None

return_value = test()