python函數語言程式設計二

嗨學程式設計發表於2018-11-09

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))複製程式碼


    相關文章