在Python中定義函數(shù)。
1.比如用Python寫一個斐波那契數(shù)列函數(shù):
>>>deffib(n):#writeFibonacciseriesupton
..."""PrintaFibonacciseriesupton."""
...a,b=0,1
...whilea<n:
...print(a,end='')
...a,b=b,a+b
...print()
...
函數(shù)調(diào)用:
>>>#Nowcallthefunctionwejustdefined:
...fib(2000)
011235813213455891442333776109871597
在Python函數(shù)中,def關(guān)鍵字聲明一個函數(shù)定義,函數(shù)名稱緊跟其后,函數(shù)名稱后面是包含參數(shù)列表的小括號,最后是冒號結(jié)尾。
然后Python函數(shù)的函數(shù)體從下一行開始,必須注意要有字符縮進。
Python的函數(shù)調(diào)用,比如:
>>>fib(0)
>>>print(fib(0))
None
2.fib(n)是沒有返回值的函數(shù),下面寫一個有返回值的Python函數(shù),返回[]list列表:
>>>deffib2(n):#returnFibonacciseriesupton
..."""ReturnalistcontainingtheFibonacciseriesupton."""
...result=[]
...a,b=0,1
...whilea<n:
...result.append(a)#seebelow
...a,b=b,a+b
...returnresult
...
函數(shù)調(diào)用:
>>>f100=fib2(100)#callit
>>>f100#writetheresult
[0,1,1,2,3,5,8,13,21,34,55,89]
函數(shù)fib2(n)實例中展示了新的Pythonfeature,其中return用于聲明當(dāng)前函數(shù)返回一個值,result.append(a)調(diào)用了list對象result的append函數(shù),append是由對象的類型決定的函數(shù),實際上相當(dāng)于result=result+[a],但是append的效率更高。
3.在Python函數(shù)定義中定義多個參數(shù)列表,以及為參數(shù)賦上默認值:
defask_ok(prompt,retries=4,reminder='Pleasetryagain!'):
whileTrue:
ok=input(prompt)
ifokin('y','ye','yes'):
returnTrue
ifokin('n','no','nop','nope'):
returnFalse
retries=retries-1
ifretries<0:
raiseValueError('invaliduserresponse')
print(reminder)
這里又個非常重要的警告,需要在實際項目中多加注意!!默認值通常只計算一次,但是如果默認值是可變的,比如list,就會有如下情況:
deff(a,L=[]):
L.append(a)
returnL
print(f(1))
print(f(2))
print(f(3))
輸出結(jié)果為:
[1]
[1,2]
[1,2,3]
可以改為:
deff(a,L=None):
ifLisNone:
L=[]
L.append(a)
returnL
4.函數(shù)里的關(guān)鍵字參數(shù)
形式是kwarg=value
defparrot(voltage,state='astiff',action='voom',type='NorwegianBlue'):
print("--Thisparrotwouldn't",action,end='')
print("ifyouput",voltage,"voltsthroughit.")
print("--Lovelyplumage,the",type)
print("--It's",state,"!")
defcheeseshop(kind,*arguments,**keywords):
print("--Doyouhaveany",kind,"?")
print("--I'msorry,we'realloutof",kind)
forarginarguments:
print(arg)
print("-"*40)
forkwinkeywords:
print(kw,":",keywords[kw])
5.特殊參數(shù)
deff(pos1,pos2,/,pos_or_kwd,*,kwd1,kwd2):
-------------------------------
Positionalorkeyword
-Keywordonly
--Positionalonly
6.注意函數(shù)的代碼風(fēng)格和命名規(guī)范
比如使用4個空格鍵為不是tab縮進等。