一、函数的嵌套
-
1、函数嵌套的代码示例
def f1(): print('我是函数1') def f2(): print('我是函数2') f2() if __name__ == "__main__": f1()
二、函数的作用域
坚持一个原则:在作用域小地方可以访问比它作用域大里面的变量,在作用域大地方不能访问比它更小作用域里面的变量
- 1、如果在函数外面要使用函数内部的函数的方式
- 1.使用
global修饰变量 - 2.函数将变量返回
- 1.使用
三、高阶函数的认识(只要满足下面条件一个就是高阶函数)
- 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))