函式定義
封裝好的 能被反覆呼叫的 結構(函式名,引數,**塊)
函式名在同乙個模組下不能重複
先定義再呼叫
#定義乙個函式 引數分別是x,y
defadd
(x,y)
:#x,y是定義時的引數,即為形參
result=x+y
return result #如果不寫return 函式會預設返回none
普通引數
即add(x,y) 其中x和y都是普通引數
add(4,
5)#位置引數,按順序對應定義時的引數,x=4,y=5
add(y=
5,x=4)
#關鍵字引數,與順序無關
defadd
(x,y)
: result=x+y
return result
add(x=4,
5)#傳參的時候 位置引數一定要在關鍵字引數前面
可變位置引數
在形參前使用*,表示該形參是可變引數,用tuple接收0個或多個實參
可變關鍵字引數
在形參前,使用**,表示該形參是可變引數,用字典接收0個或多個引數
函式預設值
#定義時在形參後跟上乙個值,如果呼叫時 未傳入足夠的引數的時候,對沒有給定的引數賦值為預設值
#需要注意的是,有預設值的一定要寫在無預設值的引數後面
def
add(x=
2,y=5)
: result=x+y
return result
add(
)
def
add(x,y=4)
: result=x+y
return result
add(
5)
keyword-only引數
如果乙個普通引數,在可變位置引數或乙個星號 * 後,這個引數就在呼叫時就必須以關鍵字的方式指定
兩種定義方式:
def test(args,x)–>test(4,x=5)
def fn(,x,y)–>fn(y=7,x=3)
也可以有預設值
def fn(*args,y=7,**kwargs)
定義引數規則:
**kwargs必須在最後面
* 或*args後面keyword-only引數
預設值引數在可變關鍵字引數的前面
定義時順序:
普通位置引數->預設值->可變位置引數->kw-only->可變關鍵字引數
def
func
(a,b,c=3,
*args,d,
**args)
#定義時建議順序
1.return語句 定義函式的返回值
不寫return 則函式就返回none
返回值可以返回變數,也可以返回表示式
2.返回值多個
如果多個返回值,預設以tuple方式返回,或者按需要接收返回值
return語句在乙個函式中可以有多個,但只會執行乙個,因為執行了return語句,函式就結束執行了
def
func()
:return1,
2#多個返回值
a,b=func(
)#用相同個數的變數接收多個返回值
c=func(
)#用乙個變數接收,就是把返回的元組賦值給變數
>>
>
print
(a)>>
>
1>>
>
print
(b)>>
>
2>>
>
print
(c)>>
>(1,2)
3.丟棄返回值
如果有多個返回值,可以根據需要來接收返回值
①不用變數接收
②多個返回值返回的是乙個元組,索引取某個或某幾個 返回值
>>
>a=func()[
0]#a=1(還是看上面的**)
③使用下劃線
>>
>a, _ = func(
)#只接收第乙個返回值
方法名(實參,實參)
呼叫函式時引數規則
對於定義時的普通位置引數,必須寫在最前面,也可以關鍵字形式傳
add(4,
5)#此時呼叫函式,傳入的 4,5 分別對應x和y,4,5為實參
#①位置引數的可變引數
可以傳,可以不傳
有多個數,需要累加求和
def
add(
*nums)
: result=
0print
(type
(nums)
)#nums為tuple,以tuple型別接收多個實參,接收後不可變
for i in nums:
result += i
return result
#呼叫函式
add(3,
5,9)
#--->多個引數,結果為17
add(
)#--->0個引數,結果為0,因為函式中定義的result的初始值就是0
#②關鍵字引數的可變引數
def
config
(**kw)
:for key,value in kw.items():
print
('{} = {}'
.format
(key,value)
)config(host=
'127.0.0'
,port=
'8088'
)
執行結果:
#③可變引數混合使用
def test(uesername,passwd,*nums,**kw) #混合使用時定義
test(『hyc』,『124』,12,3,4,x=5)
test(『hyc』,『124』) #可變引數可以傳,也可以不傳
def test(username,passed,**kw) #混合使用時定義
3. 函式呼叫時 傳參方式有兩種,位置引數和關鍵字引數
位置引數
關鍵字引數
位置引數和關鍵字引數可以同時,但位置引數一定要在關鍵字引數的前面
def
fn(x,
*args,y=5,
**kwargs)
:print
(x)print
(args)
print
(y)print
(kwargs)
fn(2,6
,7,y=0
,z=1
,zz=11)
#注意呼叫時引數順序
給函式提供實參的時候,可以在集合型別前使用 *或者 ** ,把集合型別的結構解開,提取出所有元素作為函式的實參
例4,解構時注意引數名字需要與定義的匹配,不匹配就會報錯
例5,解構時引數個數需要與定義的匹配
函式呼叫時不同傳參形式規則:
函式說明文件都是定義函式的人編寫的,在函式名後用』』『dd』』『的形式新增說明文件
def func():
『』』這裡是 函式說明文件
這個函式是我寫的
『』』return 1,2
通過help(函式名) 或 函式名.__doc__檢視某個函式的說明文件
引數註解:定義在各引數名之後,使用冒號分割引數和引數的註解
返回值註解:定義在引數列表之後,->冒號之前
def
func
(a:'string'=4
,b:[1:
4],c:int)-
>
int:
return a+b+c
註解僅僅提示,不會做強制校驗
通過函式名.__annotation__檢視函式註解
函式註解 只對def語句生效,對lambsa
python 函式的定義與呼叫
函式的定義 def 函式名 def func print 函式的功能 函式的呼叫 函式名 遇到函式定義,簡單記錄一下 遇到了函式的呼叫,才會進入函式去執行 執行結束以後,會回到函式被呼叫的地方 繼續往下走 雙層巢狀的函式 看圖,理解直譯器的執行順序 理解輸出的結果 多層巢狀的函式 理解執行順序 輸出...
python函式的定義與呼叫
函式定義語法 def 函式名 引數列表 注釋 函式體注意 1.函式形參不需要宣告型別,也不需要指定函式返回值型別 2.即使該函式不需要接收任何引數,也必須保留一對空的圓括號 3.括號後面的冒號必不可少 4.函式體相對於def關鍵字必須保持一定的空格縮排 5.python允許巢狀定義函式 例 編寫生成...
python學習03 函式定義與呼叫
1.函式定義 格式 1 無引數 def fun1 print hello 2 有引數 def fun2 a,b print a b 定義函式時,可以有多個形式引數 2.函式呼叫 1中已經定義好了函式,呼叫函式直接寫函式名,有引數的要傳引數。呼叫fun1 fun1 呼叫fun2 fun2 1,3 3....