1. 程式人生 > >(D10)Python-函式,lambda匿名函式

(D10)Python-函式,lambda匿名函式

函式Function


函式變數

  • 函式名是變數,他在建立函式時繫結一個函式
  • 一個函式可以作用另一個函式的實參傳遞
    • 可以吧一個函式傳遞給另一個函式,另一個函式的形參變數將繫結實參函式

示例1:

看懂如下程式碼,判斷結果
  def myinput(fn):
      L = [1, 3, 9, 5, 7]
      return fn(L)

  print(myinput(max))  # 9
  print(myinput(min))  # 1
  print(myinput(sum))  # 25

函式的巢狀定義

  • 函式巢狀定義是指一個函式理用def語句建立其他函式的情況
  • Python的作用域:
    • 作用域也叫名字空間 ,是訪問變數時查詢變數的名字範圍空間
  • Python中的四個作用域:
作用域 英文解釋 英文解釋
區域性作用域作用域 Local L
外部巢狀作用域作用域 Enclosing E
函式定義所在模組作用域 Global G
Python內建模組作用域 Builtin B

變數名查詢規則

  • L—>E—>G—>B
  • 在預設的情況下,變數名賦值會建立改變當前作用域內變數關係

Global 語句

  • 作用:
    • 告訴直譯器,global語句宣告一個或多個變數,這些變數的作用域為超級模組,也稱為全域性變數
    • 全域性宣告(global) 將賦值語句的變數對映到模組檔案內部的作用域
  • 語法:
    • global 變數名1 , 變數名2 。。。。
  • 說明:
    • 全域性變數如果在函式內部被賦值則必須經過全域性繩命(否則會被認為是區域性變數)
    • 全域性變數實在函式內部不經過宣告就可以直接訪問
    • 不能先建立區域性變數,再用global宣告為全域性變數此種作法不符合規則
    • global 變數列表裡的變數名不能出現在函式的形參列表裡

nonlocal語句

  • 作用:
    • 告訴直譯器,nonlocal宣告的變數不是區域性變數也不是全域性變數,而是外部巢狀函式的變數
  • 語法:nonlocal 變數名1,變數名2
  • 說明:
    • nonlocal語句只能在被巢狀函式內部進行使用
    • 對nonlocal變數進行賦值將對外部巢狀函式的作用域內的變數進行操作
    • 當有兩層或以上函式巢狀時,訪問nonlocal變數只對最近的一層變數進行操作
    • nonlocal 語句的變數列表裡的變數名不能出現在此函式的形參列表中

lambda匿名函式

  • lambda表示式(又稱匿名函式)
    • 作用:
      • 建立一個匿名函式物件
      • 同def類似,但不提供函式名
    • 語法:
      • lambda [函式形參列表]:表示式
    • 說明:
      • lambda 表示式建立的函式只能包含一條表示式
      • lambda 比函式簡單,且可以隨時建立和銷燬,有利於降低程式耦合度

示例:

看懂下面的程式在做什麼?結果是什麼 ?
    def fx(f, x, y):
        print(f(x, y))
    
    fx((lambda a, b: a + b), 100, 200)
    fx((lambda x, y: x**y), 3, 4)

eval函式和exec函式

  • eval(source, global=None, local=None), 把一個
    字串source 當成一個表示式來執行,返回表示式執
    行後的結果
  • exec(source, global=None, local=None) 把一個
    字串source當成程式來執行