標籤:python、函數
函數
函數是把一些負載的代碼封裝起來,需要的時候直接調用,重複利用提高效率並且能夠簡化程式的結構。
1.文法
定義一個函數要使用def語句,依次寫出函數名、括弧、括弧中的參數、冒號:,然後,在縮排塊中編寫函數體,函數的傳回值用return語句返回。
def functionName(parms1, parms2, ...): code block return expression
2.函數的定義與調用
#定義函數
>>> def func1(): print "aaa" return "bbb"
注意:在Python互動環境中定義函數時,函數定義結束後需要按兩次斷行符號重新回到>>>提示符下。
#調用函數
>>> a=func1()aaa>>> print abbb
return作用:結束該語句塊,並返回一個值。如果沒有return語句或return後面為空白,函數執行完畢後也會返回結果,只是結果為None。
在linux環境下,我們把函數(如func())定義到一個.py檔案中了(如test.py),那麼,可以在該檔案的目前的目錄下啟動Python解譯器,用from test import func來匯入func()函數,注意test是檔案名稱(不含.py副檔名)。
3.空函數
如果想定義一個什麼事也不做的空函數,可以用pass語句:
>>>def func2(): pass
pass語句什麼都不做,那有什麼用?
實際上pass可以用來作為預留位置,比如現在還沒想好怎麼寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。pass還可以用在其他語句裡,比如:
if age >= 18: pass
缺少了pass,代碼運行就會有語法錯誤。
4.函數參數
>>> def func3(name,age): #括弧中的叫形參 print (name,age) return (name,age) >>> a=func3(‘fjc‘,25) #括弧中的叫實參 (‘fjc‘, 25)
#參數檢測
一般情況一個形參只能對應一個實參,在調用函數時,如果參數個數不對,Python解譯器會自動檢查出來,並拋出TypeError錯誤。
但是有兩種形參可以對應多個實參,即可變參數和關鍵字參數,例如:
>>> def func4(*name): #可變參數,有一個* print(name) >>> a=func4(‘zhangsan‘,‘lisi‘)(‘zhangsan‘, ‘lisi‘) #輸出結果為一個元組 >>> def func5(**dic): #關鍵字參數,有兩個* print(dic)>>> a=func5(zhangsan=12,lisi=15) #注意實參的格式{‘lisi‘: 15, ‘zhangsan‘: 12} #輸出結果為一個字典
注意:可變參數和關鍵字參數同時出現時,可變參數在前,例如:
>>> def func6(*aa,**bb): print aa print bb >>> func6(1,2,3,a=1,b=2,c=3)(1, 2, 3){‘a‘: 1, ‘c‘: 3, ‘b‘: 2
如果,需要將已經定義的列表或元組、字典使用函數調用,需要在列表或元組前加一個*,在字典前加兩個*,例如:
>>> lis=[1,2,3]>>> dic={‘a‘:1,‘b‘:2}>>> a=[1,2,3]>>> b={‘a‘:1,‘b‘:2,‘c‘:3}>>> def func7(*lis,**dic): print (lis,dic) >>> func7(*a,**b) #a前加一個*,b前加兩個*((1, 2, 3), {‘a‘: 1, ‘c‘: 3, ‘b‘: 2})
#預設參數
>>> def func8(name,age=18): #注意:預設參數只能放在形參的最後一個 print (name,age)>>> func8(‘zhangsan‘)(‘zhangsan‘, 18)
#在調用函數時,實參不按順序寫,例如:
>>> func8(age=25,name=‘fjc‘) #使用“形參=實參”的方式(‘fjc‘, 25)
5.遞迴函式
在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞迴函式。例如:
#計算階乘
>>> def func9(n): if n==1: return n return n*func9(n-1) >>> func9(4)24
驗算的過程如下:
4*func9(3)==>
4*3*func9(2)==>
4*3*2*func9(1)==>
4*3*2*1
遞迴函式的優點是定義簡單,邏輯清晰。理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。
練習:
1. 斐波那契數列(Fibonacci sequence),又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……。
隨便輸入兩個數,產生類似的斐波那契數列。
#!/usr/bin/env pythondef func (*number): lis=[first,second] for i in range(10): lis1=list(reversed(lis)) lest=lis1[0]+lis1[1] lis.append(lest) print(lis)first=input("please input the first number:")second=input("please input the second number:")a=func(first,second)
#這個簡單程式能夠實現:在互動式模式隨便輸入兩個數字,以這兩個數字為基,輸出斐波那契數列。
3. 輸出 9*9 乘法口訣表
#!/usr/bin/env pythondef func(n,m): for x in range(1,10): for y in range(1,x+1): print "%d*%d=%d\t"%(x,y,x*y), print ""func(1,10)
或者:
#!/usr/bin/env pythondef func(n,m): for x in range(n,m): for y in range(n,m): if x>=y: #設為x<=y,是另一種效果 print"%d*%d=%d\t"%(x,y,x*y), else: continue print ""a=func(1,10)
5. 有四個數字:1、2、3、4,能組成多少個互不相同且無重複數位三位元?各是多少?
#!/usr/bin/env pythondef func(a,b,c,d): f=0 for x in (a,b,c,d): for y in (a,b,c,d): for z in (a,b,c,d): if x!=y and x!=z and z!=y: print "%d%d%d"%(x,y,z) f+=1 print "total:%d"%ffunc(1,2,3,4)
6. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。
#!/usr/bin/env pythondef func(n,m): x=[] for i in range (1,m+1): x.append(int("%d"%n*i)) print sum(x)n=input("number:")m=input("total:")func(n,m)
本文出自 “網路技術” 部落格,請務必保留此出處http://fengjicheng.blog.51cto.com/11891287/1927664
python筆記--自訂函數