python函数式编程二

131 阅读2分钟

2018年11月2日 11:24 阅读数: 40

一、函数的嵌套

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