1. 程式人生 > 實用技巧 >Python自定義函式基礎概念

Python自定義函式基礎概念

一、函式定義語法:

  def 函式名(形參列表):

   語句塊

二、函式定義規則

  1. 函式的名字就是語句塊的名稱   

  2. 函式名的命名規則與變數名相同(函式名必須是識別符號)   

  3. 函式名是一個變數(不要輕易對其賦值)

  4. 函式有自己的名字空間,在函式外部不可以訪問函式內部的變數,在函式內可以訪問函式外部的變數,但不能修改此變數。

  5. 函式如果不需要傳入引數,形參列表可以為空

  6. 語句塊部分,內容不能為空,如果為空需要填充pass

三、形參定義方式

  形參:函式呼叫時,接收呼叫時傳遞的資料

  【1】位置形參

  【2】關鍵字形參

  【3】預設引數

      def 函式名(形參名=預設實參1, 形參名2=預設實參2, ...):

       pass

      預設引數必須自右至左依次存在,如果一個引數是預設引數,則其右側的所有引數都必須是預設引數。

  【4】*args

    星號元組形參,收集多餘的位置傳參

    def 函式名(*元組形參名):

      pass

  【5】**kwargs

    雙星號字典形參,收集多餘的關鍵字傳參

    def 函式名(**字典形參名):

      pass

  【6】不定長形參

    星號元組形參,雙星號字典形參

      可以接受任意的位置傳參和關鍵字傳參

      def fun(*args,**kwargs):

        pass

  位置形參,預設引數,星號元組形參,雙星號字典形參可以混合使用.

  函式形參自左至右的順序為:

      位置形參

      星號元組形參

      命名關鍵字形參

      雙星號字典形參

四、函式呼叫

  函式名(實參)

  注:  

    1. 函式呼叫是一個表示式

    2. 如果函式內部沒有return語句,函式呼叫完畢後返回None物件

    3. 如果函式需要返回其它的物件需要用到 return 語句

    4.函式名是一個變數,繫結的是函式物件

六、函式呼叫時引數的傳遞形式

  【1】位置傳參

      實參和形參的位置對應,將實引數據傳遞給函式形參。

      實參和形參按位置一一對應。

      實參個數和形參個數必須一致。

  【2】序列傳參

    位置傳參的一種。

    用 * 將序列拆解後按位置進行傳遞的傳參方式

  【3】關鍵字傳參

    按形參的名稱將實引數據傳遞給形參。

    實參和形參按形參名稱匹配。

  【4】字典關鍵字傳參

    實參為字典,將字典用 '**' 拆解後再進行關鍵字傳參的傳參方式。

      字典的鍵名必須和形參一致,切數量相同。

      字典的鍵必須為字串。

七、全域性變數與區域性變數

  【1】全域性變數

    ① 定義在函式外部,模組內部的變數稱為全域性變數

    ②全域性變數所有函式都可以直接訪問(但函式內不能將其直接賦值)

  【2】區域性變數

    ① 定義在函式內部的變數稱為區域性變數(函式的形參也是區域性變數)

    ② 區域性變數只能在函式內部使用

    ③區域性變數在函式呼叫時才能夠被建立,在函式呼叫之後會自動銷燬

八、函式的功能性

  ① 一個函式可以作為另一個函式呼叫時的實參,傳遞給此函式

def f1():
    print("f1被呼叫")

def f2():
    print("f2被呼叫")

def fx(fn):
    print(fn)
    fn()  # 此時這是呼叫什麼呢?

fx(f1)
fx(f2)
#結果
<function f1 at 0x7f7a52ed6f28>
f1被呼叫
<function f2 at 0x7f7a51757c80>
f2被呼叫

#---------------------
def goodbye(L):
    for x in L:
        print("再見:", x)

def hello(L):
    for x in L:
        print("你好:", x)

def operator(fn, L):
    fn(L)

operator(hello, ['Tom', 'Jerry', 'Spike'])

#結果
你好: Tom
你好: Jerry
你好: Spike

  ② 一個函式可以作為另一個函式的返回值 

def fx():
    return max

fn = fx()
print(fn([1, 3, 5, 7]))

#結果
7

  ③ 函式可以巢狀

九、函數語言程式設計

  用一系列函式解決問題。

  優點:

    【1】用每一個函式完成細小的功能,一系列函式的任意組合可以完成大問題

    【2】函式僅接受輸入併產生輸入,不包含任何能影響輸出的內部狀態

  要求:

    def 語句建立的函式最好不要訪問區域性作用域以外的變數,這樣可以保證返回結果的唯一性(可重入性)

十、函式的 可重入性(結果唯一性)

  如果一個函式的輸入引數一定,則返回結果必須一定的函式稱為可重入函式

  【1】 可重入函式,傳入引數一定.結果必然一定

      def myadd(x, y):

        return x + y     

  【2】不可重入函式:

      y = 200

      def myadd2(x):

        return x + y

      print(myadd2(10)) # 210

      y = 300

      print(myadd2(10)) # 310