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))

猜你喜欢

转载自blog.csdn.net/qq_40925239/article/details/83902978
今日推荐