關於編程,有三種方式
1、面向對象編程---->類 關鍵字:class
2、面向過程編程---->過程 關鍵字:def
3、函數式編程------>函數 關鍵字:def
函數式編程:函數是邏輯化結構化和過程化的一種編程方式,如
def test(x):
"xxxxx"
x+=1
return x
def:定義函數的關鍵字
test:函數名稱
(x):傳入函數的參數
x+=1:泛指邏輯處理塊代碼
"xxxx"函數描述(非必要,但強列建議添加)
定義一個過程,過程無返回值
def fun1():
"fun1"
print('fun1')
定義一個函數,函數有返回值
def fun2():
"fun2"
print('fun2')
return 0
函數和過程的調用是一致的:
fun1
fun2
在python中,過程就是一個沒有返回值的函數,過程默認返因一個none,當函數有多個返回值時,將返回元組,這些值將被當做一個元組的元素,即:
返回值個數0:返回NONE
返回值個數1:返回object
返回值個數多個:返回元組
函數的功能:沒有函數的編程只是在寫邏輯(功能),脫離函數,重用邏輯(實現功能),唯一的方式就是複製粘貼,使用函數後簡化代碼,可讀性變高,易擴展(保持一致性)
在定義函數時的參數,我們稱爲行參,如下面的x,y
而調用函數時傳入的參數,我們稱之爲實參,如下面的1、2。
def test(x,y)
print(x)
print(y)
test(1,2)
位置調用時行參與實參的位置關係是一一對應的
def test(x,y)
print(x)
print(y)
test(1,2)
關鍵字調用時,與實參的位置無關如
def test(x,y)
print(x)
print(y)
test(y=2,x=3)
當位置調用與關鍵字調用混用時,按照位置調用方式執行,但要記位一句話,關鍵字參數不能寫在位置參數前面,即test(3,y=2,6)此種方式將會報錯,應寫成test(3,2,z=6)或test(3,z=2,y=6)
當函數中有默認的參數值時如
def test(x,y=1)
.....
return 0
當調用這個函數時,如果不傳入y的值時,y的值將採用默認值,如果傳入新的y的值時,默認y的值將被覆蓋。
默認值使用的場合:
1、軟件安裝的時候
2、連接數據庫的端口
等
參數組:當行參或實參數量不固定的時候時使用,可與默認參數或行參混用,參數組一定要最至最後
def test(*args)#接收N個位置參數 #def test(name,*args) #def test(name,age=1,*args)
print(args)
test(1,2,3,4,5……)
test(*[1,2,3,4……])
最終實參會被變成一個元組如:
def fun(agr1,agr2,*args)
pass
fun(1,2,3,4,5)
====結果=====
1,2,(3,4,5)
這種方式是預留以後當需要傳多個參數時使用而不變動太多的代碼
傳入不定數量字典時:把N個關鍵字參數轉換成字典的方式,可與默認參數或行參混用,參數組一定要最至最後
def test(agrs1,agrs2,**kwargs) #接收N個關鍵字參數
# print(kwagrs)
# print(kwagrs['name'])
# print(kwagrs['age'])
pass
test(3,5,name='a',age=23,sex='F')#以關鍵字的方式傳值
=====結果====
3,5,{'name':'a','age':23,'sex':'f'}
test(**{name:'a',age:8,sex:'F'})
###位置參數不能寫在關鍵字參數後面,否則程序會報錯
函數調用函數
def test1()
print......
def test2()
print...
test1() #調用test1
print(test2()) #調用