【云小課】基礎服務第42課 網絡知識一籮筐——揭開IP地址的神秘身份
874
2025-04-04
1. 定義函數
2. 函數調用
3. 參數傳遞
4. 參數分類
5. 匿名函數
6. return語句
7. 變量作用域
1. 定義函數
函數是預先設計好的,可重復使用的,能夠實現單一或多種功能的綜合代碼段。使用了函數的Python代碼,模塊性較強,代碼的重復利用率較高。目前為止我們可能或多或少的也使用過Python自帶的函數,比如print()等等。
當然,除了使用Python提供的函數以外,用戶也可以自己定義,但是首先要知道的是,定義函數有如下的幾點規則:
首先,定義函數的標志關鍵字就是def,在它之后應該緊接著用戶想要設計的函數名稱。
其次,用戶想要傳入的參數用圓括號括起放在函數名后,并且在圓括號結束的位置之后加上冒號作為函數內容的開始。
同時,當開始定義函數內容時,要時刻保持縮進的使用是正確的。
最后,使用return語句表示函數結束時返回給調用者的值,不帶return則相當于返回None。
示例的結構如下:
def 函數名(參數列表): 函數執行語句段…… return [表達式]
1
2
3
2. 函數調用
當使用如上的規則定義了一個函數,指定了函數名稱、傳遞的參數以及代碼塊內容后,需要通過另外的語句調用函數,才能使這個函數在適當的時間與位置執行相應的功能。函數的調用可以嵌套在任何用戶設定的位置里,如另外的函數中,命令行中等等。下面舉例子說明函數的定義與調用過程。
【例 3-53】
程序3-7 函數的定義與調用實例 def printstr(string): print(string) printstr("函數的定義與調用!") 輸出結果 函數的定義與調用!
1
2
3
4
5
6
7
3. 參數傳遞
Python的變量是沒有特定類型的,定義的函數參數列表中的變量類型則取決于參數傳遞時所賦值的類型。同時根據函數傳遞的參數是否可以修改,將他們分成不可變類型與可變類型。
不可變類型參數傳遞本質上就是傳值,常用的有數字、字符串等等,當使用傳值時,即使在函數內部對這些參數進行修改,它們的變化也不會影響到函數外的值。因為當它們被傳入函數后,相當于生成了另外一個復制的對象,使得函數內部語句在復制對象上操作。
可變類型參數傳遞本質上是傳引用。傳引用傳入的是變量的地址,而當函數內部得到變量的地址后,再進行的操作相當于對原變量進行的修改,修改后函數外部的變量也會受到影響。
【例 3-54】
程序3-8 傳不可變對象的應用實例 def ChangeInt(a): a = 10 b = 3 ChangeInt(b) print(b)
1
2
3
4
5
6
7
def ChangeInt(a): a = 10 b = 3 ChangeInt(b) print(b) 輸出結果 3
1
2
3
4
5
6
7
8
【例 3-55】
1
程序3-9 傳可變對象的應用實例
def ChangeList(mylist): "修改傳入的列表" mylist.append([1,2,3,4]) print("函數內取值: ", mylist) mylist = [10,20,30] print("更改前取值: ", mylist) ChangeList(mylist) print("更改后取值: ", mylist) 輸出結果 更改前取值: [10, 20, 30] 函數內取值: [10, 20, 30, [1, 2, 3, 4]] 更改后取值: [10, 20, 30, [1, 2, 3, 4]]
1
2
3
4
5
6
7
8
9
10
11
12
13
4. 參數分類
除了從參數的可變與不可變進行分類外,還可以將參數分為必備參數、關鍵字參數、默認參數等。下面會對這三類參數進行詳細的說明。
所謂必備參數指的是在函數最初定義時就設置好的參數,在函數調用階段必須按照正確的順序傳入,數量也應該與聲明時保持一致,不然會導致語法錯誤。
【例 3-56】
程序3-10 必備參數傳遞的應用實例
def printme(str1,str2): "打印任何傳入的字符串" print("string1:",str1) print("string2:",str2) #調用printme函數 string1 = "Hello " string2 = "World!" printme(string1,string2) printme(string2,string1) printme() 輸出結果 string1: Hello string2: World! string1: World! string2: Hello TypeError: printme() missing 2 required positional arguments: 'str1' and 'str2'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
關鍵字參數指的是在傳遞參數時使用關鍵字標明對應的參數,使用關鍵字參數聲明后,
允許函數調用時順序與聲明不一致,因為通過參數名也能夠很好的進行參數值匹配。
【例 3-57】
程序3-11 關鍵字參數傳遞的應用實例 def printme(str1,str2): "打印任何傳入的字符串" print("string1:",str1) print("string2:",str2) string1 = "Hello " string2 = "World!" printme(string2,string1) printme(str2 = string2,str1 = string1) 輸出結果 string1: World! string2: Hello string1: Hello string2: World!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
默認參數在定義的時候也是必須聲明的,它通過在定義階段設置某個值,以便在調用時不被傳入,方便使用默認值。同時,默認參數也可以在調用時傳入,這時就用新傳入的參數值替換默認值。
【例 3-58】
程序3-12 默認參數傳遞的應用實例 def printme(str1 = "oh ", str2 = "hello ", str3 ="world"): "打印任何傳入的字符串" print("string1:",str1) print("string2:",str2) print("string3:",str3) string2 = "Hello " string3 = "World" printme(str2 = string2, str3 = string3) 輸出結果 string1: oh string2: Hello string3: World
1
2
3
4
5
6
7
8
9
10
11
12
13
14
5. 匿名函數
匿名函數是Python中比較有特色的定義函數方式,它通常只包含一個語句,主體是一個表達式,與前面所講的定義函數方式比要簡單很多。
匿名函數通過lambda 來定義,他有專屬于自己的參數空間,它的參數與全局參數和其他參數是不共享的。具體的定義方式如下:
lambda [arg1 [,arg2,…argn]]:expression
【例 3-59】
程序3-13 匿名函數的應用實例 sum = lambda arg1, arg2: arg1 + arg2; print("相加后的值為 : ", sum( 10, 20 )) print("相加后的值為 : ", sum( 20, 20 )) sum = lambda arg1, arg2: arg1 + arg2; print("相加后的值為 : ", sum( 10, 20 )) print("相加后的值為 : ", sum( 20, 20 )) 輸出結果 相加后的值為 : 30 相加后的值為 : 40
1
2
3
4
5
6
7
8
9
10
11
12
13
6. return語句
利用return語句表示函數結束時的退出,return后通常設計一個表達式,表達式的結果表示向調用方返回的內容,不帶return語句的結束表示返回為None。
【例 3-60】
1
程序3-14 return語句的應用實例 def sum(arg1, arg2): total = arg1 + arg2 print("相加后的值 : ", total) return total; total = sum(10, 20) print("返回的值 :",total) 輸出結果 相加后的值 : 30 返回的值 : 30
1
2
3
4
5
6
7
8
9
10
11
12
7. 變量作用域
變量定義后,有一定的有效范圍,并不是任意一個位置都可以訪問,我們把控制函數內變量的訪問范圍的機制成為變量作用域,它規定了在何時可以訪問哪一個特定的變量。
變量作用域分為全局作用域和局部作用域:在某一局部位置定義的變量擁有局部作用域,比如函數內容定義的變量,這些變量又被稱為局部變量,他們只能在被聲明的函數內部程序使用;在全局位置定義的變量擁有全局作用域,比如在函數外代碼開始處定義的變量,這些變量被稱為全局變量,可以在整個程序范圍內被訪問和使用。
另外,需要注意的是,global關鍵字可以將局部變量變成一個全局變量,而nonlocal關鍵字可以修改外層變量,并且nonlocal關鍵字只能作用域局部變量,且始終找離當前最近的上層局部作用域中的變量。
下面通過例子來說明局部變量以及全局變量的使用情況:
【例 3-61】
1
程序3-15 變量作用域的應用實例 #說明局部變量與全局變量 total = 0 def sum(arg1,arg2): total = arg1 + arg2 print("函數內是局部變量 : ", total) return total sum(10,20) print ("函數外是全局變量 : ", total) total = sum(10,20) print ("函數外是全局變量 : ", total) #說明global的使用 a = 10 b = 5 def func(): global a #變成了全局變量 a = 20 #修改全局變量的值 b = 50 #沒法修改全局b,只能定義一個新的局部變量b func() print(a) print(b) #說明nonlocal關鍵字的使用 a = 1 def outer(): a = 2 def inner(): nonlocal a a = 3 def inner2(): print(a) inner2() print(a) inner() print(a) outer() print(a) 輸出結果 ##運行結果1 函數內是局部變量 : 30 函數外是全局變量 : 0 函數內是局部變量 : 30 函數外是全局變量 : 30 ##運行結果2 20 5 ##運行結果3 3 3 3 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。