Python 基礎知識 函式(一)

2021-08-21 13:16:27 字數 3156 閱讀 2410

python的系列文章主要介紹python語言的基礎語法知識。按照核心內建資料型別、語句、函式、類、異常、標準模組的順序對相關的語法知識進行講解。

python函式知識的介紹主要分為兩塊:第一部分講解函式的基礎知識,包括函式的定義、引數、作用域;第二部分介紹函式的高階特性,包括迭代器、生成器、匿名函式lambda,遞迴函式和裝飾器以及常見的函式工具。

本期主要介紹函式的基礎知識。

1、函式是最大化的**重用和最小化**冗餘的最基本的程式結構

2、流程的分解。函式提供一種將系統分割為定義完好的不同部分的工具。

def語句是乙個可執行的**,在未執行前,函式物件不存在,執行後,建立乙個函式物件並將其賦值給乙個變數名(就是函式名)。函式名變成了乙個函式的引用。

def語句可以巢狀的在其他語句當中。

通用格式

1def  (arg1, arg2, arg3, …argn):

2    3    return

return 語句包含乙個物件表示式,它是函式的結果

變數的作用域就是變數定以及查詢的地方。python建立、改變或查詢變數名都是在命名的空間(乙個儲存變數名的地方)中進行的。作用域就是命名空間。

所有變數名,包括作用域,都是在python賦值的時候產生的。由於變數最初沒有宣告,python將乙個變數名的地點關聯為(繫結給)乙個特定的命名空間。換句話說,在**中給乙個變數賦值的地方決定了該變數將存在於哪個命名空間,也就是作用域或者說可見範圍或者說使用的地方。

乙個函式的所有變數名都是與函式的命名的空間相關聯的。

作用域法則:

1、內建的模組是全域性作用域

2、全域性作用域的作用的範圍僅限於單個檔案

3、每次對函式的呼叫都建立了乙個新的本地作用域

4、賦值的變數名除非宣告為全域性變數或非本地變數,否則均為本地變數。

5、所有其他的變數名都可以歸納為本地、全域性或者內建的。

變數名解析:legb原則

1、變數名引用先後在4個作用域查詢:首先是本地(l),之後是函式內(e),其次是全域性(g),最後是內建(b)。並在第一處能夠找到該變數名的地方停止查詢。

2、在預設情況下,變數名賦值會建立或者改變本地作用域的變數。除非已經宣告為全域性變數。

3、當在函式之外給乙個變數賦值時,本地作用域與全域性作用域是相同的。

4、全域性宣告和非本地宣告將賦值的變數對映到模組檔案內部的作用域。

global語句

格式:global x, y ,z, …

宣告變數為全域性變數,無論變數是否賦值,都可以被引用。查詢變數時直接在全域性作用域或者巢狀模組開始,然後內建作用域。

1、全域性變數位於模組檔案內部的頂層變數名

2、全域性變數如果是在函式內被賦值的話,必須宣告

3、全域性變數名在函式的內部不經過宣告也能引用

需要注意的是:

1、最小化全域性變數(盡量避免使用全域性變數)

2、最小化檔案間的修改(檔案間資訊的傳遞最好通過函式)

nonlocal語句(用於巢狀的def語句中)

格式:nonlocal x, y, z, …

內嵌def語句中的變數可以引用外層def語句中的變數,但是不能修改。如果想修改,可以在內嵌def語句中對外層def語句中的變數進行nonlocal宣告,從而可以對外層def語句中的變數進行修改。

nonlocal限制作用域查詢只是被巢狀def語句中,而不是繼續到全域性或內建作用域。無論變數是否賦值,都可以被引用。

傳遞引數的關鍵點

1、引數的傳遞是通過自動將物件賦值給本地變數名來實現的

2、在函式內部的引數名的賦值不會影響被呼叫者

3、改變函式的可變物件引數(可作輸入和輸出)的值也許會對呼叫者有影響

4、不可變引數「通過值」傳遞。如數字、字串、元組是通過物件引用賦值傳遞給引數,但不能在函式內部修改,實際效果像建立了乙份拷貝。

5、可變物件是通過「指標」傳遞。如列表和字典通過引用物件賦值傳遞給引數,但能在函式內部原處修改物件,實際效果像指標一樣。

引數的匹配模式:

1、位置引數:從左至右進行匹配

2、關鍵字引數:通過引數名匹配

3、預設引數:為沒有傳入值的引數定義引數值

4、可變引數:收集任意多基於位置或關鍵字的引數。以字元開頭 5、可變引數解包:傳遞任意多基於位置或關鍵字的引數。以字元開頭

6、keyword-only引數:引數必須按照名稱傳遞

引數匹配表

函式呼叫

1#語法                解釋

2func(value)         # 常規引數:通過位置進行匹配

3func(name=value)    # 關鍵字引數:通過變數名匹配

4func(\*iterable)    # 分解位置引數的序列或其他迭代

函式定義(建立)

1#語法                  解釋

2def func(name)          # 常規引數:通過位置或變數名進行匹配

3def func(name=value)    # 沒有傳遞name時的預設值

4def func(*name)         # 收集額外的位置引數作為新的元組名

5def func(**name)        # 收集額外的關鍵字引數作為新的字典名

6def func(*args, name)   # 引數必須在呼叫中按照關鍵字傳遞

7def func(*, name)       # 引數必須在呼叫中按照關鍵字傳遞

8

混合特定的引數匹配模型的注意事項

1、在函式呼叫中,引數必須按照下面的順序出現:任何位置引數(value),後面跟著任何關鍵字引數(name=vlaue)和iteralbe形式的組合,後面跟著*dict形式。

2、在函式定義頭部中,引數必須按照下面的順序出現:任何一般引數(name),緊跟著任何預設引數(name=value),如果存在,後面是name的形式,後面跟著任何name或name=value keyword-only引數,後面是*name的形式。

python內部在對引數賦值前是通過以下的步驟對引數進行匹配的。

1、通過位置分配位置引數

2、通過匹配變數名分配關鍵字引數

3、其他額外的位置引數分配到name元組中 4、其他額外的關鍵字引數分配到*name字典中

5、用預設值分配給在頭部未得到的分配的引數。

python基礎知識 函式

函式其實就是一段可以多次呼叫的 1 函式的定義 格式 def 函式名 引數1 預設值1 引數2 預設值2 return 表示式 函式名的命名規則 函式名可以是字母 數字或下劃線組成的字串,但是不能以數字開頭。例如加法操作 def addfunc x,y return x y print addfun...

python函式基礎知識

1,函式返回值有多個 def func ip 127.0.0.1 port 3389 return ip,port ip,port func 即可得到ip和port的值 2,函式legb 引數尋找順序 l local 本地作用域 e enclosing function 上一層結構中def或lamb...

python函式基礎知識

函式的定義的格式 def 函式名 引數 可選 功能 的實現 定義函式不會呼叫 defshow print 我叫張三丰,年齡18 呼叫函式 函式名 引數 定義帶有引數的函式 name,age 形式引數 函式定義帶有的引數叫形式引數 形參 defshow msg name,age print name,...