本文主要介紹python函數,也就是函數式程式設計的用法。
何為函數:
函數是組織好的,可重複使用的,用來實作單一,或相關功能的代碼段。
函數能提高應用的子產品性,和代碼的重複使用率。你已經知道python提供許多内建函數,比如print()。但你也可以自己建立函數,這被叫做使用者自定義函數。
規範:
面向對象 >>>>>> 類 >>>>>>class
面向過程 >>>>>> 過程 >>>>>def
函數式程式設計 >>>>> 函數 >>>>>def
定義一個函數:
你可以定義一個自己想要功能的函數,規則如下:
函數代碼塊以def關鍵詞開頭,後接函數辨別符名稱和圓括号。
任何傳入傳入參數和自變量必須放入圓括号中間,圓括号之間可以用于定義參數。
函數的第一行語句可以選擇性地使用文檔字元串,用于存放函數說明。
函數内容以冒号起始并且縮進。
return[表達式]結束函數,選擇性地傳回一個值給調用方。不帶表達式的return相當于傳回None。
函數文法:
def 辨別符1():
‘Hello world’ #添加介紹(可不加)
x +=1 #代碼塊
return x #定義傳回值
執行個體:
def hello():
"hello world!"
print('Hello world!')
hello() #調用函數
運作結果:
Hello world!
函數與過程:
#函數
def text1():
print('in the text1')
return 0
#過程
def text2():
print('in the text2')
x=text1()
y=text2()
print('from text1 return is %s'%x)
print('from text2 retuin is %s'%y)
in the text1
in the text2
from text1 return is 0
from text2 retuin is None
注:函數與過程的差別(差別不大)
過程是沒有傳回值的函數,預設為None。
函數參數及調用
函數的傳回值:
def test1():
def test2():
return 0 #先列印,在傳回return
def test3():
print('in the text3')
return 1,'hello',['a','b']
x=test1()
y=test2()
z=test3()
print(x)
print(y)
print(z)
in the text3
None #沒有return預設傳回 None
0 #傳回return定義的值
(1, 'hello', ['a', 'b']) #以一個元組傳回
注:
不寫return,預設傳回None
return=1 傳回object
return>1 傳回一個tuple元組
為什麼要有傳回值:需要整個函數的執行結果。
有參數的函數
def text1(x,y): #有參數的函數
print(x,y)
return 0
text1()
這樣會報錯,沒有定義參數TypeError: text1() missing 2 required positional arguments: 'x' and 'y'
def text1(x,y): #行參 :根據實參變化而變化,沒有實際的參數。
text1(1,2) #實參 :實際參數
實參跟形參必須一一對應,個數不能超。
def text1(x,y): #行參
text1(1,2) #這裡叫 位置調用
text1(x=3,y=4) #關鍵字調用
x=5
y=10
text1(x=x,y=y) #這裡面的x=x,前後兩個x雖然長得一樣,但是意義不一樣。x=x,第一個x表示形參裡面的x,第二才是定義的x變量值
1 2
3 4
5 10
關鍵字調用與位置調用
def text2(x,y,z): #行參
print(x,y,z)
text2(1,2,3) #位置調用
text2(y=11,z=22,x=33) #關鍵字調用
text2(90,40,z=50)
text2(x=10,20,30) #運作報錯
text2(10,x=10,) #運作報錯
結論:
參數調用可以分為位置調用和關鍵字調用
位置調用,一一對應
關鍵字調用可以不按順序填寫
根據報錯得結論,必須位置參數放在關鍵字前面,程式才不會出錯。
函數的非固定參數
預設參數:
def test(x,y=2): #這裡y設定預設參數
print(x)
print(y)
test(11,22) #定義位置參數
11
22
test(11) #定義位置參數
2
調用函數的時候,預設參數非必傳。
以上所講的參數調用都有一個共同點,那就是調用參數的個數,多了或者少了,都會報錯(某些情況下,少參數不會報錯,多了一定會報錯)。如果我有N個實參,你不肯能寫N個形參,針對實參不固定的情況下,有了參數組這個功能出現。具體看下面介紹
參數組:
def test1(*args): 以星開頭,定義變量名。這裡星的作用表示,接收N個實參。規範就是*args
print(args) 以元組的形式列印出來
test1(1,2,3,4,5,6)
test1(*[1,2,3,4,5,6]) #args=tuple([1,2,3,4,5,6])
def test2(x,*args):
print(x,args)
test2(10,1,2,3,4,4,5,6)
(1, 2, 3, 4, 5, 6)
10 (1, 2, 3, 4, 4, 5, 6)
應用:預留參數
參數組(建字典)
def text(**kwargs): #把N個關鍵字參數轉換成字典的形式
print(kwargs)
text(name='alex',age=18)
{'name': 'alex', 'age': 18}
print(kwargs['name'])
print(kwargs['age'])
text(**{'name':'alex','age':'18'})
alex
18
{'name': 'alex', 'age': '18'}
def text(name,age=18,*args,**kwargs): #把N個關鍵字參數轉換成字典的形式
print(name)
print(age)
print(args)
text('alex',names='alex',wante='30')
()
{'names': 'alex', 'wante': '30'}
總結:
*args屬于位置參數,接收将N個位置參數,轉換成元組
**kwargs屬于關鍵字參數,接收将N個關鍵字,轉換成字典
位置參數調用,隻能在關鍵字參數調用前面,否則會報錯。
<a href="http://down.51cto.com/data/2368748" target="_blank">附件:http://down.51cto.com/data/2368748</a>
本文轉自白羊IT51CTO部落格,原文連結:http://blog.51cto.com/000011211684/1982669,如需轉載請自行聯系原作者