前言:本文主要介紹python函數的定義和調用、函數的參數、函數的作用域、內置函數。
一、函數的定義和調用
1.函數的作用
對特定的一些功能進行封裝,提高代碼的重用率,進而提升開發的效率,格式:
def 函數名() # 函數體
2.函數名的命名規范
1)可以由字母、數字及下划線(_)組成,但不能用數字開頭,且不能使用python中的關鍵字。
2)函數命名的風格: 單詞之間下划線隔開(python中函數命名推薦這種風格),
語法:return 表達式
1)函數的返回值是由return來決定的,return后面寫什么,函數的返回值就是什么
2)如果
4)函數要返回多個數據,可以在return后面,每個數據之間用逗號隔開,調用函數之后接收到的是個元組形式的數據
注意:return的作用除了返回結果外,也可以用於結束函數的運行,只要函數中執行到return,就直接返回內容,跳出函數,return后面的代碼就不會執行
4.調用函數
函數名(),示例如下:
def func(): print('python666') return "abc", 4444 print("99999999999999999999") # 該行不會被執行 res = func() print(res)
運行結果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py python666 ('abc', 4444) Process finished with exit code 0
二、函數的參數
1.函數形參和實參
2.參數傳遞的兩種形式:
位置參數:按位置順序進行傳遞
關鍵字參數:通過關鍵字指定傳給某個參數
# 位置參數(按位置順序進行傳遞) def add_num(a, b, c): # a,b是形參,沒有真正的值,用於接收實參 return a + b - c res1 = add_num(67, 12, 1) # 此時傳入的67,12是實參 print(res1) # 關鍵字參數(通過關鍵字指定傳給某個參數) res2 = add_num(b=34, a=12, c=11) print(res2) # 參數混用時,位置參數寫最前面,關鍵字參數寫在后面,不能重復傳 res3 = add_num(30, c=12, b=12) print(res3)
運行結果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py 78 35 30 Process finished with exit code 0
3.函數定義的三種形參:
- 必需參數 如:def add_num(a, b, c) ,a,b,c三個參數都必須要傳
- 默認參數(缺省參數) 如:def add_num(a, b, c=99) ,c是默認參數,可以傳,可以不傳(不傳時直接使用c=99)
- 不定長參數*args 可以不傳,也可以傳多個,它接收必需參數、默認參數完之外的位置參數,以元組的形式保存,**kwargs 可以不傳,也可以傳多個,接收必需參數、默認參數之外的關鍵字參數,以字典的形式保存
def test(a, b, c, *args, **kwargs): print("a的值", a) print("b的值", b) print("c的值", c) print("*args的值", args) print("**kwargs的值", kwargs) va1 = test(11, 22, 33, 4, 3, 2) va2 = test(11, 5, 6, 7, g=33, k=22, f=12) print(va1, va2)
運行結果(有None是因為函數中沒有返回值,調用了兩次函數因此打印了兩個None):
C:\software\python\python.exe D:/myworkspace/test/test/test.py a的值 11 b的值 22 c的值 33 *args的值 (4, 3, 2) **kwargs的值 {} a的值 11 b的值 5 c的值 6 *args的值 (7,) **kwargs的值 {'g': 33, 'k': 22, 'f': 12} None None Process finished with exit code 0
擴展:不定長參數可以使用*對元組(列表也可以,但一般不用)進行拆包,**可以對字典進行拆包,拆包原理如下:
# 拆包 def func(): return 11,22,33 # 當返回結果有多個值時,會以元組的形式返回 c1 = func() print(c1) # 返回的是一個元組(11,22,33) a,b,c =func() # 可以通過變量把返回的元組進行拆包,接收對應的值,a接收了11,b接收了22,c接收了33 print(a,b,c) # 返回對應的元素11,22,33
運行結果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py (11, 22, 33) 11 22 33 Process finished with exit code 0
拆包在自動化測試中有很大的作用,如果不理解,可以動手多敲幾遍,以下是拆包示例:
def func(a, b, c): print('這是', a) print('這是', b) print('這是', c) # 利用*、**分別對元組、字典拆包:只能用在函數調用時使用 # 對元組進行拆包 func(*(1, 2, 3)) print('-------分割線-------') tu = (4, 5, 6) func(*tu) print('-------分割線-------') # 對字典進行拆包, 注意**kwargs接收的是接收必需參數、默認參數之外的關鍵字參數 # 因此字典的鍵要與函數的形參一致 dic = {'a': 88, 'b': 90, 'c': 91} func(**dic)
運行結果:
C:\software\python\python.exe D:/myworkspace/test/test/test.py 這是 1 這是 2 這是 3 -------分割線------- 這是 4 這是 5 這是 6 -------分割線------- 這是 88 這是 90 這是 91 Process finished with exit code 0
三、函數的作用域
1.全局變量
直接定義在py文件(即模塊)中的變量,叫全局變量,在該文件中任何地方都可以使用
2.局部變量
在函數內部定義的變量,叫做局部變量,只能在該函數內部使用,函數外部無法使用
3.聲明局部變量
關鍵字:global 在函數內部聲明全局變量。
變量的查找過程:由內到外(先找函數自身的,沒有再去外面找)。
如果要在外部使用函數內部定義的局部變量,需要聲明該變量,簡單來說就是告訴程序,這個變量在這個模塊內都能使用。
name = "張三" # 定義一個全局變量 def func(): # global a # 如果要聲明全局變量,要加上這句 a = 100 # 定義一個局部變量 print(a) print(name) func() # 調用函數 print("------分割線-----") print(name) # 全局變量哪里都能使用 print(a) # 這是一個局部變量,打印a運行會報錯說a沒有被定義,如果要使用a就要聲明a為全局變量 print("------分割線-----") aa = 10 def func(): print(aa) # 變量的查找過程:由內到外(先找自身的,沒有再去外面找) func()
運行結果(因為報錯了,所以后面的aa沒有打印出來,只要聲明全局變量就不會報錯):
C:\software\python\python.exe D:/myworkspace/test/test/test.py 100 張三 ------分割線----- 張三 Traceback (most recent call last): File "D:/myworkspace/test/test/test.py", line 12, in <module> print(a) # 這是一個局部變量,打印a運行會報錯說a沒有被定義,如果要使用a就要聲明a為全局變量 NameError: name 'a' is not defined Process finished with exit code 1
四、python內置函數
內置函數就是python編程語言中預先已經定義的函數,直接調用即可,常用的內置函數如下:
- len():獲取 列表\字符串\元組\字典 中的元素總數量(數據的長度)
- eval():識別字符串中的python表達式
- zip(): 聚合打包
- max():獲取數據中元素的最大值
- min():獲取數據中元素的最小值
更多的內置函數有興趣的可以在菜鳥教程中查看,鏈接: