仅在值不为None时应用函数的Python习惯用法

一个函数正在接收许多都是字符串的值,但是需要以各种方式进行解析,例如

vote_count = int(input_1)
score = float(input_2)
person = Person(input_3)

一切都很好,除了输入也可以为None,在这种情况下,不是解析值,我希望最后将None分配给左侧.这可以用

vote_count = int(input_1) if input_1 is not None else None
...

但这似乎很难理解,尤其是在像这样的重复行中.我正在考虑定义一个简化此功能的函数,例如

def whendefined(func, value):
    return func(value) if value is not None else None

可以像

vote_count = whendefined(int, input_1)
...

我的问题是,这有一个共同的成语吗?可能使用内置的Python函数?即使没有,这样的函数是否有常用名称?

解决方法:

在其他语言中,Option typing有点不同(解决了类型系统的问题),但动机相同(对null怎么做).

在Python中,更着重于这种情况的运行时检测,因此您可以使用无检测保护器(而不是Option键入的数据)包装函数.

您可以编写仅在参数不为None时执行函数的装饰器:

def option(function):
    def wrapper(*args, **kwargs):
        if len(args) > 0 and args[0] is not None:
          return function(*args, **kwargs)
    return wrapper

您可能应该修改第三行,使其更适合您正在使用的数据类型.

正在使用:

@option
def optionprint(inp):
    return inp + "!!"

>>> optionprint(None)
# Nothing

>>> optionprint("hello")
'hello!!'

并带有返回值

@option
def optioninc(input):
    return input + 1

>>> optioninc(None)
>>> # Nothing

>>> optioninc(100)
101

或包装一个类型构造函数

>>> int_or_none = option(int)
>>> int_or_none(None)
# Nothing
>>> int_or_none(12)
12
上一篇:python – 令人困惑的无法使用请求进行身份验证:NoneType错误


下一篇:python TypeError:’NoneType’对象没有属性’__getitem__’