专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

python函数式编程二

一、函数的嵌套

  • 1、函数嵌套的代码示例
    def f1():
        print('我是函数1')

        def f2():
            print('我是函数2')

        f2()

    if __name__ == "__main__":
        f1()

二、函数的作用域

坚持一个原则:在作用域小地方可以访问比它作用域大里面的变量,在作用域大地方不能访问比它更小作用域里面的变量

  • 1、如果在函数外面要使用函数内部的函数的方式
    • 1.使用global修饰变量
    • 2.函数将变量返回

三、高阶函数的认识(只要满足下面条件一个就是高阶函数)

  • 1、一个函数作为参数传递给另外一个函数
  • 2、一个函数的返回值是一个函数

四、高阶函数示例

  • 1、一个函数作为参数传递给另外一个函数
    def foo(func):
        print('foo函数')
        func()

    def bar():
        print('bar函数')

    if __name__ == "__main__":
        print(type(bar))

  • 2、一个函数中返回另外一个函数
    def foo():
        print('foo函数')

        def bar():
            print('bar函数')

        return bar

    if __name__ == "__main__":
        foo()()

  • 3、柯理化函数(典型的高阶函数)
    def foo(x):
      def bar(y):
        return x + y
      return bar

    if __name__ == "__main__":
        print(foo(1)(2))

五、关于闭包的介绍

  • 1、闭包的概念总结:闭包=函数+环境变量
  • 2、形成闭包的几个条件
    • 1.函数(外函数)中定义了内函数
    • 2.内函数使用了外函数的非全局变量
    • 3.外函数最终返回是内函数的引用

六、闭包的认识

  • 1、最基本的闭包代码
    def f1():  # 外部函数中定义内函数
        a = 10

        def f2():
            return a # 内函数中引用外函数非全局变量(只要使用了就可以)

        return f2 # 返回内函数的引用

    if __name__ == "__main__":
        f = f1()
        # 如果是闭包就会输出内容
        print(f.__closure__)

  • 2、外部函数中的变量是传递进去的
    def f1(a):
        def f2():
            c = a ** 2
            return a

        return f2

    if __name__ == "__main__":
        f = f1(5)
        # 如果是闭包就会输出内容
        print(f.__closure__)

七、闭包案例(行走的示例)

  • 1、直接修改全局变量来实现
    origin = 0

    def go(step):
        global origin
        # 当前行走的位置
        new_pos = origin + step
        # 直接修改全局变量
        origin = new_pos
        return new_pos

    if __name__ == "__main__":
        print(go(2))
        print(go(3))
        print(go(6))

  • 2、使用闭包会记住上一次调用的状态
    origin = 0

    def factory(pos):
        def go(step):
            # 强制申明不是使用本地变量
            nonlocal pos
            new_pos = pos + step
            pos = new_pos
            return new_pos

        return go

    if __name__ == "__main__":
        factory1 = factory(origin)
        print(factory1(2))
        print(factory1(3))

八、更多原著博文请参考

未经允许不得转载:搜云库技术团队 » python函数式编程二

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们