Python函式小結

2021-08-25 19:37:02 字數 1988 閱讀 7741

第四章 函式總結

1、函式返回值return總結:

2、(函式)作用域:乙個識別符號的可見範圍,這就是識別符號的作用域。一般常說的是變數的作用域;

全域性作用域:在整個程式執行環境中都可見;

區域性作用域:(1)在函式、類等內部可見;

(2)區域性變數使用範圍不能超過其所在的區域性作用域;

eg:

x = 5

def foo():

x += 1

foo()

將會報unboundlocalerror

3、作用域關鍵字

全域性變數 global;

(1)使用 global 關鍵字的變數,將foo內的 x變數 宣告為外部的全域性作用域中定義的 x;

(2)全域性作用域中必須有 x 的定義,否則就需要在函式內自己賦值定義變數(注意該變數有關鍵字global);

(3)但是如果全域性作用域中沒有變數 x 的話,在函式內部賦值及定義,在內部作用域為乙個外部作用域的變數 x 賦值,不是在內部作用域定義個新變數,所以 x += 1不會報錯。注意:這裡的 x 的作用域還是全域性的;

global總結:

答:先引用後賦值,而python動態語言是賦值才算定義,才能被引用。解決辦法,在這條語句前增加 x = 0 之類的賦值語句,或者使用 global 告訴內部作用域,去全域性作用域查詢變數定義;

global 使用原則

2. nonlocal 關鍵字

使用了nonlocal關鍵字,表示該區域性變數中的變數使用的是上級作用域中的變數;注意該上級不能是外部的全域性變數;

3、預設值的作用域

注意:使用可變型別作為預設值,就可能修改這個預設值;

預設值的修改

使用影子拷貝建立乙個新的物件,永遠不能改變傳入的引數;

通過值得判斷就可以靈活得選擇建立或者修改傳入物件;

這種方式靈活,應用廣泛;

很多函式得定義,都可以看到使用none這個不可變得值作為預設引數,可以說這是一種慣用法;

4、閉包

注意:如果變數使用的是global關鍵字,但這是使用的是全域性變數,而不是閉包;如果要對普通變數的閉包,可以使用nonlocal;

5、函式的銷毀

全域性函式的銷毀

區域性變數的銷毀

6、函式執行流程(壓棧過程):可以解釋函式區域性變數在函式呼叫是建立,在呼叫結束消亡;

全域性記憶體中生成 foo1 、foo2 、foo3 、main函式物件;

main函式呼叫壓棧;

main 中查詢內建函式 print 壓棧,將常量字串壓棧,呼叫函式,彈出棧頂;(函式彈出的是返回值,此時棧底只有main 函式);

main 中全域性查詢函式 foo1 壓棧,將常量 100、101壓棧,呼叫函式 foo1 ,建立棧幀。print 函式壓棧,字串和變數 b、b1 壓棧,呼叫函式,彈出棧頂,返回值,foo1 函式結束呼叫彈出棧頂;

main 中全域性查詢 foo2 壓棧,將常量 200 壓棧,呼叫 foo2 ,建立棧幀。

foo3 函式壓棧,變數 c 引用壓棧,

呼叫 foo3 ,建立棧幀。foo3 完成 print 函式呼叫後返回,彈出棧頂;

foo2 恢復呼叫,執行 print 後,返回值。main 中 foo2 呼叫結束後彈出棧頂;

繼續執行 main 中的 print 函式呼叫,彈出棧頂。main 函式返回結束呼叫,彈出棧頂;

def foo1(b,b1=3):

print("foo1 called",b,b1)

def foo2(c):

foo3(c)

print("foo2 called",c)

def foo3(d):

print("foo3 called",d)

def main():

print("main called")

foo1(100,101)

foo2(200)

print("main ending")

main()

python函式小結

函式的定義 1.關鍵字 def 引數傳遞方式 1.定長引數 如 def printinfo name,age 35 列印任何傳入的字串 print name name print age age return 呼叫printinfo函式 printinfo age 50,name miki prin...

python函式小結歸納

總結了幾種函式的形式,大致有 1.無參函式 2.有參函式 3.有參預設函式 4.有參無序函式 5.函式動態引數,乙個 是元組 6.函式動態引數,兩個 是字典 無參函式 deffun a 5 b 3print 無參函式結果 print a b fun 有參預設函式 不在實參中傳入值的情況 parame...

python小結 python小結

c python33新增到你的path 環境變數中,你可以在dos 視窗中 輸入以下命令 set path path c python33 id 方法的返回值就是物件的記憶體位址。在 行 首行 後插入至少一行特殊的注釋行來定義原始檔的編碼。coding encoding sys.modules 模組...