函式作用域

2022-07-15 20:42:12 字數 2520 閱讀 5638

函式的定義:

python 定義乙個函式使用 def 關鍵字,語法形式如下:

def 《函式名》(《引數列表》):

《函式體》

return 《返回值列表》

引數:定義函式時 () 裡的引數叫形參(形式引數),它只是乙個變數名,供函式體中的**呼叫。

函式呼叫時,傳入 () 裡的引數叫實參(實際引數),它是實際的資料,會傳遞給形參,供函式體執行。

在定義函式時,如果要求呼叫者必須傳遞實參給這個形參,它就是必須引數。

直接定義在函式名後的 () 中的形參就是必須引數。

呼叫時必須傳遞實參給必須引數,否則報錯

在定義函式時,某些形參有可能在呼叫時不用接收實參,這種情況可以定義為預設引數。

在函式名後 () 中,以 引數名=預設值 的形式定義的形參就是必須引數。

注意:預設引數必須定義在必須引數的後面

在函式名後的 () 中,在形參前加 * 號可以定義位置不定參,通常它會定義為 *args。

它用來接收函式呼叫時,以位置引數傳遞過來的超過形參數量的多餘的實參。

注意:不訂參必須定義在預設引數後面

位置不定引數會將所有多餘的位置實參建立成元組

在函式名後的 () 中,在形參前加 ** 號可以定義關鍵字不定參,通常它會定義為kwargs。

它用來接收函式呼叫時,以關鍵字引數傳遞過來的超過形參數量的多餘的實參。

注意:不訂參必須定義在預設引數後面

關鍵字不定引數會將所有多餘的關鍵字實參建立成字典**

在傳遞實參時,可以通過 * 對迭代物件進行解包。

def fun(a,b,arg):

print(a,b,arg)

ls = [1,2,3,4,5,6]

fun(ls)

在傳遞實參時,可以通過 ** 對字典物件進行解包。

def fun(a,b,kwargs):

print(a,b,kwargs)

d =

fun(d)

返回值

函式還有乙個很重要的功能就是返回結果。

python 中使用 return 關鍵字來退出函式,返回到函式被呼叫的地方繼續往下執行。

return 可以將 0 個,1 個,多個函式運算完的結果返回給函式被呼叫處的變數。

函式可以沒有返回值,也就是說函式中可以沒有 return 語句,這時函式返回 none,例如上面我們定義的那些函式。

return 會將多個返回值以元組的形式返回。

函式作用域:

python 是解釋型程式語言,直譯器在執行乙個 python 程式時會在計算機記憶體中申請一塊記憶體用來執行這個程式。全域性變數在這塊記憶體空間中都可以被訪問和修改。定義在函式裡,的變數就是區域性變數,它只在它定義的函式裡起作用,一旦函式執行完畢它就不存在了

python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在**賦值的。

變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4中,分別是:

l (local) 區域性作用域

e (enclosing) 閉包函式外的函式中

g (global) 全域性作用域

b (built-in) 內建作用域

全域性作用域:包含內建命名空間、全域性命名空間,在整個檔案的任意位置都能被引用、全域性有效

區域性作用域:區域性命名空間,只能在區域性範圍內生效

以 l –> e –> g –>b 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。

直接定義在函式外的變數就是全域性變數,在程式執行的全過程有效。

有時候需要在函式內部修改全域性變數。

使用 globals 關鍵字可以在函式內部修改全域性變數

a = 1

def d():

a += 2

print(a)

d()此時呼叫函式會報錯,會在函式內部找a的值然後加1賦值給a,但是在函式內部沒有定義a,而且函式內部不能修改全域性變數a

有兩種辦法,加一句global a,就可以在函式內部修改全域性變數,第二種就是在內部定義乙個變數a,加一句a = 0;

g_count = 0

def outer():

global g_count

g_count = 2 如果沒有global g_count這句,這個變數與上面那個全域性的變數是兩個不同的變數

print(g_count)

c = 12 區域性變數

def inner():

nonlocal c 內部函式 修改函式外的區域性變數

c = 23

a = 11 本地作用域

inner()

outer()

使用nonlocal和global關鍵字:

1.外部必須有這個變數

2.在內部函式宣告nonlocal變數之前不能再出現同名變數

函式作用域

有巢狀函式的時候有return x的返回函式x的位址,沒有的則為none def f1 n1 f1 print f1中 n1 def f2 n2 f2 def f3 n3 f3 print f3中 n3 print f2中 n2 return f3 return f2 r1 f1 print r1 ...

函式作用域

匿名函式,lambda def f o if o 7 print o print list filter lambda o o 8,4,77 22,4 8 list filter f,4,77,22,4,8 列印的話會返回none 77,22 7722 8a 5deff global a 要用全域性...

函式作用域

函式作用域 呼叫函式時建立函式作用域,函式執行完畢以後,函式作用域銷毀 每呼叫一次,函式就會建立乙個新的函式作用域,它們之間是互相獨立的 在函式作用域中,可以訪問到全域性作用域的變數 在全域性作用域中無法訪問到函式作用域的變數 具體示例 當在函式作用域操作乙個變數時,它會先在自身作用域中尋找,如果有...