1、函數: 函數是指將一組語句的集合經過一個名字(函數名)封裝起來,要想執行這個函數,只需調用其函數名便可。python
def fuc(i): return int(i)
2、函數的優勢mysql
一、簡化代碼sql
二、提升代碼可用性app
三、代碼可擴展函數
3、函數的參數spa
函數在調用時,能夠傳入參數,分爲形參和實參code
形參:blog
形參變量只有在被調用時才分配內存單元,在調用結束後,即刻釋放內存,形參只在函數內部有效。遞歸
實參:內存
實參能夠是變量、常量、表達式、函數等,不管實參是何種類型的量,在調用時,都必須有肯定 的量,以便把值傳給形參,調用結束後函數則不能再使用該形參。
def add(x,y): #定義一個函數,參數有x,y,x和y就是形參 print(x+y) #輸出x+y add(3,8) #調用函數 3和8就是實參
備註:形參就是函數接收的參數,實參就是實際傳入的參數
函數的幾種形參
位置參數:
位置參數就是按照參數的位置來傳參,上面的add函數,x,y就是位置參數,位置參數必傳。
位置參數也可使用這種add(y=8,x=3)形似來調用,這種調用稱爲關鍵字傳參。
默認參數:
默認參數就是定義形參的時候,給函數一個默認的值,默認參數不是必傳的,若是使用默認參數,必須放在位置參數後。
def conn_mysql(user,password,port=3306): #定義函數 print(user,password,port) conn_mysql('root','123456') #默認值
conn_mysql('root','123456',port=3307) #指定默認參數的值
非固定參數:
非固定參數有兩種,一種是可變參數,一種是關鍵字參數
可變參數:
可變參數用*來接收,能夠傳任意數量參數,若是位置參數、默認參數和可變參數連用,可變參數必須在位置參數和默認參數後面。可變參數也是非必傳的。
def more_arg(name, sex, age=18, *args): #傳入的其餘參數會放在args這個元組中 print(name, sex, age, args) more_arg('Bluse', 'man', 20, 'England', 'python')
關鍵字參數:
關鍵字參數使用**來接收,一樣是不固定的,關鍵字一樣放到最後,調用時必須使用關鍵字傳參。非必傳參數
def keyw_arg(name, **kwargs): print(name,kwargs) keyw_arg('HK', sex='man' ,age=18)
5、函數的返回值
函數都有返回值,若是沒有返回值,python會默認返回一個none。若是有多個返回值,將會把返回值放到元組中。
函數中的返回值使用return,函數在遇到return就當即結束。
def multi(x,y): f = x*y return c,x,y res = multi(2,9) print(res)
6、局部變量和全局變量
局部變量意思就是隻在局部生效,出了這個做用域就失效;全局變量意思就是在整個程序都生效,在程序的最前面定義的都是全局變量。若是修改全局,須要加global聲明,若是修改list、字典和集合的話,則不須要加global關鍵字。
name = 'Jack' #字符串全局變量 names = [] #list全局變量 print(name) print(names) def fuc(): global name #聲明修改變量 name = 'HK' names.append(name) #修改list全局變量 return names fuc() print('修改後', name) print('修改後', names)
7、遞歸調用
在函數內部,能夠調用其餘函數。若是函數內部本身調用本身,這個函數就是遞歸函數。
def recur(): num = int(input('please enter a number:')) if num%2==0: #判斷輸入數字是否是偶數 return True #若是是偶數就退出,趕回true print('it is not a even number, please try again!') return recur() #不是偶數,繼續調用,從新輸入 print(recur()) #調用recur
遞歸調用的特色:
一、必須有一個明確的結束條件
二、每次進入更深一層遞歸,問題規模比上次遞歸應有所減小
三、遞歸效率不高,遞歸層次過多會致使棧溢出
8、高階函數
def f_int(n): #定義一個函數,把傳入的參數轉換成int類型 return int(n) def calc(x,y,z): #定義一個函數,接收3個參數,分別是x,y,z。z是一個函數 print(z(x)*z(y)) #z是一個函數把x,y的值傳給z,而後z函數返回的值相乘 calc('4', '5', f_int) #調用,傳入x,y的值,再傳入上面定義好的函數