美文网首页Python
python必知必会7

python必知必会7

作者: Nefelibatas | 来源:发表于2022-03-05 07:35 被阅读0次

    Python 支持函数式编程吗?

    近些年来,由于函数式编程易于调试和测试的优点,函数式编程越来越受到关注。虽然 Python 不是纯函数式编程,但它也提供了很多内置的函数和模块支持函数式编程。

    Python 支持函数式编程,主要分以下几种:

    • Python 的一些语言特性,比如lambda匿名函数、列表推导、字典推导、生成器、迭代器等。
    • Python 的一些内置函数,包括map、reduce、filter、all、any、enumerate、zip等高阶函数。
    • Python 的一些内置模块,比如 itertools、functools 和 operator模块等。

    函数式编程其实就是一个编程范式,也就是如何编写程序的一种方式。
    函数式编程是面向数学的抽象,将计算描述为一种表达式求值。函数式程序就是一个表达式。

    函数式编程一大特征就是:函数是一等对象。
    也就是说,你的所有操作都可以由函数进行完成,函数和其他数据类型拥有平等的地位,可以赋值给变量,也可以作为参数传入另一个函数,或者作为别的函数的返回值。比如高阶函数,它们接受函数作为输入。

    # 指令式编程
    # 先确立初始状态,然后每次迭代都执行循环体中的一系列命令
    newList = []
    for num in range(1, 10):
        newList.append(num + 1) #
    
    # 函数式编程
    # 以函数的方式,去对数据进行转换,我们可以这样想象这样一个函数f(x) = x + 1
    newList = list(map(lambda x: x + 1, list(range(1, 10))))
    

    在很多存函数式编程语言中,都会提供map,reduce和filter这三个高阶函数。它们实现了低层次的变化,仅依赖于开发者自定义的高阶函数作为参数来调整低层次的运转机制。

    高阶函数是指可以将其他函数作为参数或者返回结果的函数。比如,映射函数map会对输入集合的每个元素执行参数内提供的函数代码块,并返回变换后的集合。传给映射函数的是一个高阶函数和一个集合,它在对集合中的每一个元素施用传入的函数之后,产生另一个集合作为返回值。

    另外,闭包也是一等函数的一个体现。闭包实际上是指在暗地里绑定了函数内部引用的所有变量。换句话说,这种函数把它引用的所有东西都放在一个上下文里“包”了起来。

    使用递归来解决迭代问题也是典型的函数式编程。因为函数式编程不保存状态,那么就使用递归,函数重复地以子函数的形式调用自己,间接地将每次输出的状态值当做下一次的输入参数。它的好处就是可以简化问题。但是,使用递归的一个缺点:其运行速度会变得越来越慢,性能较差。

    什么是lambda函数?它有什么好处?

    lambda表达式被用于创建匿名函数,一般在一些一次性运行的程序中使用。因为不需要定义函数名,所以不用担心函数名称冲突的问题,而且匿名函数更加的节省内存中的变量定义空间。

    要注意在lambda函数定义的变量是自由变量,自由变量是指未在本地作用域中绑定的变量。

    >>> x = 10
    >>> func1 = lambda y: x + y
    >>> x = 20
    >>> func2 = lambda y: x + y
    >>> func1(10)
    30
    >>> func2(10)
    30
    

    为什么 func1(10)和func2(10)的输出都是 30 呢?这是因为x是一个自由变量,只有在运行的时候绑定到函数中,而非定义时绑定。

    如果我想在定义的时候去绑定变量,应该怎么做呢?可以使用函数默认值参数形式。

    >>> x = 10
    >>> func3 = lambda y, x=x: x + y # x=x这样可以在定义时绑定到值
    >>> x = 20
    >>> func3(10) # 输出为20,而不是30
    

    相关文章

      网友评论

        本文标题:python必知必会7

        本文链接:https://www.haomeiwen.com/subject/hckmrrtx.html