1. 程式人生 > >python函數語言程式設計二

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