一、定義函數(shù)
1糙及、定義函數(shù)
使用def語句详幽,依次寫出函數(shù)名、括號浸锨、括號中的參數(shù)和冒號:唇聘,然后在縮進塊中編寫函數(shù)體,函數(shù)的返回值用return語句返回柱搜。
def jia(a,b):
n=a+b
return n
print(jia(1,2))
2迟郎、空函數(shù)
實際上pass可以用來作為占位符,比如現(xiàn)在還沒想好怎么寫函數(shù)的代碼聪蘸,就可以先放一個pass宪肖,讓代碼能運行起來。
def empty():
pass
3健爬、參數(shù)類型檢查--內(nèi)置函數(shù)isinstance()控乾,舉例:
def jia(a,b):
if not isinstance(a,(int,float)):
raise TypeError('a is wrong type')
if not isinstance(b,(int,float)):
raise TypeError('b is wrong type')
n=a+b
return(n)
print(jia('1',1))
小結(jié):函數(shù)執(zhí)行完畢也沒有return語句時,自動return None娜遵。
函數(shù)可以同時返回多個值蜕衡,但其實就是一個tuple。
二设拟、函數(shù)的參數(shù)
1慨仿、位置參數(shù)(明確規(guī)定函數(shù)需要幾個參數(shù))
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
2久脯、默認參數(shù)(在位置參數(shù)的基礎上,為了以防調(diào)用是某個參數(shù)輸入值需要重復或缺失)
也可以不按順序提供部分默認參數(shù)镰吆。當不按順序提供部分默認參數(shù)時帘撰,需要把參數(shù)名寫上。
默認參數(shù)必須指向不變對象鼎姊!
def fang(x,n=2):
s=1
while n>0:
s=s*x
n=n-1
return s
print(fang(5,3))
3骡和、可變參數(shù)
參數(shù)前加*號相赁,可變參數(shù)允許你傳入0個或任意個參數(shù)相寇,這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple
#計算一組數(shù)字的平方和
def fang_he(*numbers):
s=0
for n in numbers:
s=s+n*n
return s
#print(fang_he([1,2,3])) 函數(shù)設置成可變參數(shù)時不能傳入list或tuple列表,否則會報錯
print(fang_he(1,2,3))
num=[1,3,5,7]
print(fang_he(*num))##參數(shù)前加*號钮科,*num表示把num這個list的所有元素作為可變參數(shù)傳進去
4唤衫、關鍵字參數(shù)
參數(shù)前加**號,關鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù)绵脯,這些關鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict
def person(name,age,**info):
print('name:',name,'age:',age,'other:',info)
person('Adam', 45, gender='M', job='Engineer')
dw={'city':'shenzheng','job':'test engneer'}
person('almira',27,**dw)#**extra表示把extra這個dict的所有key-value用關鍵字參數(shù)傳入到函數(shù)的**info參數(shù)佳励,kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝蛆挫,對kw的改動不會影響到函數(shù)外的extra赃承。
5、命名關鍵字參數(shù)
限制關鍵字參數(shù)的名字悴侵,就可以用命名關鍵字參數(shù)瞧剖,例如,只接收city和job作為關鍵字參數(shù)
def person(name, age, *, city, job):##關鍵字參數(shù)**kw不同可免,命名關鍵字參數(shù)需要一個特殊分隔符*抓于,*后面的參數(shù)被視為命名關鍵字參數(shù),定義時缺少*,Python解釋器將無法識別位置參數(shù)和命名關鍵字參數(shù)
print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')
##如果函數(shù)定義中已經(jīng)有了一個可變參數(shù)浇借,后面跟著的命名關鍵字參數(shù)就不再需要一個特殊分隔符*
def person(name, age, *args, city, job):
print(name, age, args, city, job)
##調(diào)用時缺少參數(shù)名捉撮,python解釋器會把參數(shù)均視為位置參數(shù)
6、參數(shù)組合(再議)
三妇垢、遞歸函數(shù)
在函數(shù)內(nèi)部巾遭,可以調(diào)用其他函數(shù)。如果一個函數(shù)在內(nèi)部調(diào)用自身本身闯估,這個函數(shù)就是遞歸函數(shù)灼舍。
編寫move(n, a, b, c)函數(shù),它接收參數(shù)n睬愤,表示3個柱子A片仿、B、C中第1個柱子A的盤子數(shù)量尤辱,
然后打印出把所有盤子從A借助B移動到C的方法(漢諾塔的移動圓盤疊放必須是小蓋大)
def move(n,a,b,c):
if n==1:
print(a,'---->',c)
else:
move(n-1,a,c,b) #借助C柱砂豌,將A柱上的n-1個圓盤移動到B柱
print(a,'---->',c) #將第n個移動到C
move(n-1,b,a,c)#借助A柱厢岂,將B 柱上的圓盤移到C柱
move(3,'A','B','C')