python 之函數

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的值,再傳入上面定義好的函數
相關文章
相關標籤/搜索