一.函數(shù)的定義
函數(shù)是組織好的区岗,可重復(fù)使用的略板,功能集中單一的代碼段。
函數(shù)的定義規(guī)則:
- 定義一個函數(shù)要使用def語句慈缔,依次寫出函數(shù)名叮称、括號、括號中的參數(shù)和冒號藐鹤。
- 參數(shù)必須放在圓括號內(nèi)瓤檐。
- 函數(shù)的第一行語句可以選擇性地使用文檔字符串,用于表達(dá)函數(shù)的用途和參數(shù)說明娱节。
- 函數(shù)內(nèi)容以冒號起始挠蛉,函數(shù)體要縮進(jìn)4格。
- return [表達(dá)式] 結(jié)束函數(shù)肄满,選擇性地返回一個值給調(diào)用方碌秸。不帶表達(dá)式的return相當(dāng)于返回 None绍移。
def 函數(shù)名( 參數(shù)):
"函數(shù)文檔字符串"
函數(shù)內(nèi)容
return [表達(dá)式]
二. 函數(shù)體與返回值
- 函數(shù)體
函數(shù)體開始要空4格,如果想定義一個什么事也不做的空函數(shù)讥电,可以用pass語句占位蹂窖。如果不使用pass占位會報錯。
def func():
pass
- 返回值
- return可以省略恩敌。如果沒有return語句瞬测,函數(shù)執(zhí)行完畢后會返回None。
- return None可以簡寫為return纠炮。
- Python函數(shù)可以返回多個值:
def func():
a=1
b=2
return a,b
m,n=func()
其實(shí)月趟,本質(zhì)上講Python函數(shù)并沒有返回多個值,而是返回一個tuple恢口!但是孝宗,在語法上,返回一個tuple可以省略括號耕肩,而多個變量可以同時接收一個tuple因妇,按位置賦給對應(yīng)的值,所以猿诸,Python的函數(shù)返回多值其實(shí)就是返回一個tuple婚被,但寫起來更方便。
三.參數(shù)
1.Python函數(shù)的參數(shù)種類
Python函數(shù)的參數(shù)類型一共有五種梳虽,分別是:
位置參數(shù)
默認(rèn)參數(shù)
可變參數(shù)
關(guān)鍵字參數(shù)
- 位置參數(shù)
最常見的參數(shù)址芯,使用位置參數(shù)時,傳參的順序和數(shù)量必須和聲明完全一致窜觉。
def p(name,age):
print name
print age
return
p('yoyo',12)
- 默認(rèn)參數(shù)(parameter=)
函數(shù)聲明的時候谷炸,可以給參數(shù)設(shè)置默認(rèn)值。調(diào)用時禀挫,如果不傳遞此參數(shù)旬陡,會使用默認(rèn)值,默認(rèn)參數(shù)一定要放在位置參數(shù)后面特咆。
def p(name,age=12):
print name
print age
return
p('yoyo')
- 可變參數(shù)
定義函數(shù)時,在參數(shù)前面加一個※录粱,表示這個參數(shù)是數(shù)量可變的腻格,調(diào)用時該參數(shù)可以接受任意多個值。可變參數(shù)允許你傳入0個或任意個參數(shù)啥繁,這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple菜职。
def calculate(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
s=calculate(1,2,3,4)
如果已經(jīng)有一個list或者tuple,要調(diào)用一個可變參數(shù)怎么辦旗闽?Python允許你在list或tuple前面加一個*號酬核,把list或tuple的元素變成可變參數(shù)傳進(jìn)去:
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
- 關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù)允許傳入0個或任意個含參數(shù)名的參數(shù)蜜另,這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
關(guān)鍵字參數(shù)有什么用嫡意?它可以擴(kuò)展函數(shù)的功能举瑰。比如,在person函數(shù)里蔬螟,我們保證能接收到name和age這兩個參數(shù)此迅,但是,如果調(diào)用者愿意提供更多的參數(shù)旧巾,我們也能收到耸序。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外鲁猩,其他都是可選項坎怪,利用關(guān)鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。
- 命名關(guān)鍵字參數(shù)
和關(guān)鍵字參數(shù)不同廓握,命名關(guān)鍵字參數(shù)需要一個特殊分隔符※搅窿,※后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。
調(diào)用方式如下:
def person(name, age, *, city, job):
print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名疾棵,這和位置參數(shù)不同戈钢。如果沒有傳入?yún)?shù)名,調(diào)用將報錯:
>>> person('Jack', 24, 'Beijing', 'Engineer')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: person() takes 2 positional arguments but 4 were give
四. 函數(shù)參數(shù)中的引用
回憶上節(jié)中是尔,我們介紹Python中所有變量都是引用殉了,那么將實(shí)參數(shù)據(jù)傳遞給形參的過程,本質(zhì)上就是讓形參指向?qū)崊⒌囊脤ο蟆?/p>
函數(shù)的參數(shù)是可變類型:
(如 列表拟枚,字典)類似 c++ 的引用傳遞薪铜。由于可變類型可以通過引用修改數(shù)據(jù),所以在函數(shù)內(nèi)部修改后恩溅,外部也會受影響隔箍。函數(shù)的參數(shù)是不可變類型:
(如整數(shù)、字符串脚乡、元組)類似 c++ 的值傳遞蜒滩。不可變類型不能通過引用修改數(shù)據(jù),只能重新引用其他對象奶稠。所以在函數(shù)內(nèi)部修改參數(shù)的值俯艰,只會將形參指向其他對象,不會影響到函數(shù)外部锌订。
參考:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888