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