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.使用
三、高階函式的認識(只要滿足下面條件一個就是高階函式)
- 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))複製程式碼