Python 过滤True条件表达式

Python 过滤True条件表达式,确定哪个表达式的结果为True有多种方法。前面的示例将键加载到了字典中。这种字典加载方法只会保留一个键为True的值。

针对这个模型,使用filter()函数编写的另一种变体如下所示:

from operator import itemgetter
def semifact(n: int) -> int:
    alternatives = [
        (n == 0, lambda n: 1),
        (n == 1, lambda n: 1),
        (n == 2, lambda n: 2),
        (n > 2, lambda n: semifact(n-2)*n)
    ]
    _, f = next(filter(itemgetter(0), alternatives))
    return f(n)

这样就将所有备选方案定义为条件和函数对的一组序列,其中每一项都作为一个条件,且其基于输入和能生成输出结果的匿名函数。变量赋值语句中还可以包含一个类型提示,如下所示:

alternatives: List[Tuple[bool, Callable[[int], int]]] = [
    etc,
]

这个列表实际上代表的是4个二元组的同一集合。该定义阐明了其中的元组列表包含一个布尔值和一个可调用函数。

当使用itemgetter(0)参数来应用filter()函数时,我们会选取元组第0项值为True的对。对于这些值为True的对,使用next()方法从filter()函数创建的可迭代对象中提取第一项。选取的条件值赋给_变量,选取的函数则赋给f变量。可以忽略条件值(它为True),而只对返回的f()函数进行求值。

前面的示例,使用匿名函数将函数的求值延迟到了条件求值之后。

其中的semifact()函数也称双阶乘。半阶乘的定义和阶乘类似,主要的区别在于半阶乘不是所有数字的乘积,而是交替数字的乘积。例如下面两个公式:

  • 5!!=5×3×1
  • 7!!=7×5×3×1

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程