Python 函數基礎

來源:互聯網
上載者:User

標籤:ict   應該   自變數   傳回值   world   自訂   使用者自訂函數   另一個   對象   

函數

l  函數是組織好的、可重複使用的,用來實現單一或相關功能的程式碼片段

l  函數能提高應用的模組性和代碼的重複利用率。Python提供了許多內建函數,也可以自己建立函數,這被叫做使用者自訂函數

l  函數分類:內建函數、自訂函數

l  不使用函數的問題:組織圖不清晰、代碼冗餘、無法統一管理且維護難度大

一、定義函數

l  函數代碼塊以def關鍵詞開頭,後接函數標識符名稱和圓括弧()

l  任何傳入參數和自變數必須放在圓括弧中間,圓括弧之間可以用於定義參數

l  定義函數的三種形式:無參(只執行一些操作)、有參(根據傳進的參數執行相應的邏輯)、空函數(設計代碼結構)

l  函數的第一行語句可以選擇性的使用文檔字串用於存放函數說明

l  函數內容以冒號起始,並且縮排

l  return[運算式]結束函數,選擇性的返回一個值給調用方。不帶運算式的return相當於返回None

文法:

def 函數名(參數列表):

    函數體

執行個體:

def hello():    print(‘Hello World!‘)hello()

 

二、 return語句

return [運算式] 語句用於退出函數,選擇性的向調用方返回一個運算式。不帶參數值的return語句返回None

l  一個函數沒有return時則返回None,等同於return None

l  return跟一個值則返回該值,值沒有資料類型限制

l  return跟多個值則返回一個元組

l  什麼時候需要有傳回值:

  調用函數,經過一系列的操作,最後要拿到一個明確的結果,則必須要有傳回值

  通常有參函數需要有傳回值,輸入參數經過計算得到一個最終的結果

l  什麼時候不需要有傳回值:

  調用函數,僅僅只是執行一系列的操作,最後不需要得到什麼結果,則無需有傳回值

  通常無參函數不需要有傳回值

執行個體:

def my_sum (arg1,arg2):    total = arg1 + arg2    return totalres = my_sum(10,20)print(res)

 

三、函數調用的形式

1、語句形式,例:foo()

2、運算式形式,例:res=len(‘hello‘)

3、當做另一個函數的參數,例:range(len(‘hello‘))

 

四、 函數的參數

l  函數的參數分兩種:

  形參:函數中的參數

  實參:提供給函數調用的值

l  參數賦值方式:

1、  位置參數:按照從左至右的順序定義的參數,調用時的數量必須和聲明時的一樣

def foo(x,y):    print(x)    print(y)foo(1,2)

2、  關鍵字參數:按照“參數名=參數值”的形式定義,參數的順序可以與聲明時不一致。需要注意的是:關鍵字實參必須在位置實參右邊,對同一個形參不能重複傳值

def foo(x,y):    print(x)    print(y)foo(y=2,x=1)

3、  預設參數:調用函數時,如果沒有傳遞參數,則會使用預設參數。需要注意的是:預設參數必須在位置形參右邊,通常應該定義成不可變類型

def foo(name,age,sex=‘male‘):                   #在定義階段就已經為形參賦值了    print(name,age,sex)foo(‘zhangsan‘,age=18)foo(‘lisi‘,age=20)foo(‘wangwu‘,21,sex=‘female‘)                   #也可以為預設參數賦值

4、  可變長參數:針對實參在定義時間長度度不固定的情況,應該從形參的角度找到可以接收可變長實參的方案,這就是可變長參數(形參)。針對位置參數使用*args,關鍵字參數使用**kwargs

def foo(x,y,*args):                             #加了*號的變數名會存放所有未命名的變數參數。如果在函數調用時沒有指定參數,它就是一個空元組    print(x)    print(y)    print(args)foo(1,2,3,4,5,6)#執行結果如下:12(3, 4, 5, 6)
def foo(x,y,**kwargs):                          #加了**的變數名會存放所有未命名的變數參數。如果在函數調用時沒有指定參數,它就是一個空字典    print(x)    print(y)    print(kwargs)foo(x=1,y=2,z=3,a=4,b=5,c=6) #執行結果如下:12{‘z‘: 3, ‘a‘: 4, ‘b‘: 5, ‘c‘: 6}

 

擴充用法:

def foo(x,y,*args):    print(x)    print(y)    print(args)foo(1,2,*(3,4,5,6))                             #實際是:*args = *(3,4,5,6),結果為args = 3,4,5,6。可以簡單拆開打回原形#執行結果如下12(3, 4, 5, 6)
def foo(x,y,**kwargs):    print(x)    print(y)    print(kwargs)foo(x=1,y=2,**{‘z‘:3,‘a‘:4,‘b‘:5,‘c‘:6})#執行結果如下:12{‘z‘: 3, ‘a‘: 4, ‘b‘: 5, ‘c‘: 6}

5、  命名關鍵字參數:*後定義的參數,必須被傳值(有預設值的除外),且必須按照關鍵字實參的形式傳值

def foo(*args,y):    print(args)    print(y)foo(1,2,3,4,5,y=6)

 

五、 函數對象

函數是第一類對象,即函數可以當做資料傳遞

1、  可以被賦值

def foo():    print(‘Hello World!‘)f = foof()

2、  可以當做參數傳入

def foo():    print(‘Hello World!‘)def wrapper(func):    func()wrapper(foo)

3、  可以當做函數的返回

def foo():    print(‘Hello World!‘)def wrapper(func):    return funcres = wrapper(foo)print(res)

4、  可以當做容器類型的元素

def foo():    print(‘Hello World!‘)dict = {    ‘func‘:foo}print(dict)dict[‘func‘]()

Python 函數基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.