python——內建類型——函數——參數__函數

來源:互聯網
上載者:User
必選參數
def enroll(name, gender):    print 'name:', name, 'gender:', genderenroll('Bob', 'M')enroll('Lily', 'F')
output:
name: Bob gender: Mname: Lily gender: F
預設參數
def enroll(name, gender, age = 8, city = 'Hangzhou'):    print 'name:', name, 'gender:', gender, 'age:', age, 'city:', cityenroll('Bob', 'M')enroll('Lily', 'F', 9)enroll('Jack', 'M', city = 'Shanghai')
output:
name: Bob gender: M age: 8 city: Hangzhouname: Lily gender: F age: 9 city: Hangzhouname: Jack gender: M age: 8 city: Shanghai
總結: 必選參數在前,預設參數在後 函數有多個參數時,變化大參數放前面,變化小參數放後面,變化小參數可設為預設參數 有多個預設參數時,既可按順序提供預設參數,也可不按順序提供部分預設參數,當不按順序提供部分預設參數時,需說明參數名
def add_end(list=[]):    list.append('End')    return listprint add_end()print add_end()print add_end()
output:
['End']['End', 'End']['End', 'End', 'End']
解釋: 函數是instance,函數定義時,預設參數指向對象就確定了,調用函數時,如果改變了預設參數指向對象值,預設參數就不再是函數定義時初值,因此預設參數必須指向不可變對象,否則運行會有邏輯錯誤 可變參數
def calSum(*args):    sum = 0    for num in args:        sum = sum + num    return sumprint calSum(), calSum(1), calSum(1, 9), calSum(1, 9, 19)odd_list = [1, 3, 5, 7, 9]even_tuple = (2, 4, 6, 8 ,10)color_dict = {1:'red', 2:'green', 3:'blue'}prime_set = ([2, 3, 5, 7])print calSum(*odd_list), calSum(*even_tuple), calSum(*color_dict), calSum(*prime_set)
output:
0 1 10 2925 30 6 17
總結: 定義可變形參用*變數名 可變實參本質上組裝成tuple傳給函數內部的可變形參 list,tuple,dict,set等容器類型,作為實參傳給可變形參時,前面加*即可,便轉換為tuple傳給可變形參,dict和set是取key組裝成tuple 關鍵字參數
def enroll(name, age, **kw):    print 'name:', name, 'age:', age, 'other:', kwenroll('Bob', 10)enroll('Jack', 20, city = 'Hangzhou')enroll('Martin', 30, gender = 'M', job = 'engineer')dict = {'city': 'Shanghai', 'job': 'doctor'}enroll('Tom', 40, **dict)
output:
name: Bob age: 10 other: {}name: Jack age: 20 other: {'city': 'Hangzhou'}name: Martin age: 30 other: {'gender': 'M', 'job': 'engineer'}name: Tom age: 40 other: {'city': 'Shanghai', 'job': 'doctor'}
總結: 定義關鍵字參數用**變數名 關鍵字實參本質上組裝成dict傳給函數內部的關鍵字形參 dict作為實參傳給關鍵字形參時,前面加**即可 參數應用
def mixArg(a, b, c = 0, *args, **kw):    print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kwmixArg(1, 2)mixArg(1, 2, c = 3)mixArg(1, 2, 3, 'a', 'b')mixArg(1, 2, 3, 'a', 'b', x = 58)args = (1, 2, 3, 4)kw = {'x': 98}mixArg(*args, **kw)
output:
a = 1 b = 2 c = 0 args = () kw = {}a = 1 b = 2 c = 3 args = () kw = {}a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 58}a = 1 b = 2 c = 3 args = (4,) kw = {'x': 98}
總結: 必選參數、預設參數、可變參數、關鍵字參數可任意組合使用,但參數定義順序必須是:必選參數、預設參數、可變參數、關鍵字參數 函數調用時,解譯器自動按照參數位置和參數名把對應參數傳進去 任意函數,都可通過類似mixArg(*args, **kw)形式調用,無論參數是如何定義的 預設參數一定要用不可變對象,如果是可變對象,運行會有邏輯錯誤 *args是可變參數,args接收的是一個tuple,可變參數既可直接傳入,也可先組裝list,tuple,dict,set等容器類型,再通過*args傳入 **kw是關鍵字參數,kw接收的是一個dict,關鍵字參數既可直接傳入,也可先組裝dict,再通過**kw傳入 *args和**kw是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.