Python习惯用法,用于在value不是Non时应用函数

2024-06-06 22:20:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这一切都很好,除了输入也可以是None,在这种情况下,我不想解析赋值给左边的None。这可以用

^{pr2}$

但这似乎不太可读,尤其是像这一行这样的重复行。我正在考虑定义一个函数来简化这个过程,比如

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

可以像

vote_count = whendefined(int, input_1)
...

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


Tags: 函数字符串noneinputvaluecount方式float
2条回答

在其他语言中有一个Option typing,它有点不同(解决了类型系统的问题),但是有相同的动机(如何处理null)。

在Python中,更多的是关注这种事情的运行时检测,因此可以用一个无检测保护(而不是Option typing所做的数据)来包装函数。

您可以编写一个仅在参数不是None时才执行函数的修饰符:

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

您可能应该调整第三行,使之更适合您正在处理的数据类型。

使用中:

^{pr2}$

还有一个返回值

^{3}$

或者包装一个类型构造函数

>>> int_or_none = option(int)
>>> int_or_none(None)
# Nothing
>>> int_or_none(12)
12

如果可以安全地将falsy值(如0和空字符串)视为None,则可以使用boolean和:

vote_count = input_1 and int(input_1)

因为看起来像是用字符串作为输入,所以这可能是可行的;无论如何,您不能将空字符串转换为int或float(或person)。虽然这个习惯用法在Lua中经常使用,但对于某些人来说,它并不太可读。

相关问题 更多 >