廖雪峰網站:學習python函數—函數參數(三)
阿新 • • 發佈:2018-07-24
print func bsp 功能 會有 如果 item lee clas
1、*args
# 位置參數,計算x2的函數 def power(x): return x * x p = power(5) print(p) # 把power(x)修改為power(x, n),用來計算xn def power(x, n): s = 1 while n > 0: n = n - 1 s = s * x return s p1 = power(5, 2) p2 = power(5, 3) print(p1) print(p2) # 默認參數 # 使用默認參數有什麽好處?最大的好處是能降低調用函數的難度。def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s # 關鍵字參數有什麽用? # 它可以擴展函數的功能。比如,在person函數裏, # 我們保證能接收到name和age這兩個參數,但是,如果調用者願意提供更多的參數,我們也能收到。 # 試想你正在做一個用戶註冊的功能,除了用戶名和年齡是必填項外, # 其他都是可選項,利用關鍵字參數來定義這個函數就能滿足註冊的需求。 # *args是可變參數,args接收的是一個tuple# 可變參數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple, # 再通過*args傳入:func(*(1, 2, 3)); def hello(greeting, *args): if (len(args)==0): print(‘%s!‘ % greeting) else: print(‘%s, %s!‘ % (greeting, ‘, ‘.join(args))) hello(‘Hi‘) hello(‘Hi‘, ‘Sarah‘) hello(‘Hello‘, ‘Michael‘, ‘Bob‘, ‘Adam‘) names = (‘Bart‘, ‘Lisa‘) hello(‘Hello‘, *names)
2、**kw
# Python的函數具有非常靈活的參數形態,既可以實現簡單的調用,又可以傳入非常復雜的參數。 # 默認參數一定要用不可變對象,如果是可變對象,程序運行時會有邏輯錯誤! # 要註意定義可變參數和關鍵字參數的語法: # *args是可變參數,args接收的是一個tuple; # **kw是關鍵字參數,kw接收的是一個dict。 # 以及調用函數時如何傳入可變參數和關鍵字參數的語法: # 可變參數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple, # 再通過*args傳入:func(*(1, 2, 3)); # 關鍵字參數既可以直接傳入:func(a=1, b=2),又可以先組裝dict, # 再通過**kw傳入:func(**{‘a‘: 1, ‘b‘: 2})。 # 使用*args和**kw是Python的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法。 # 命名的關鍵字參數是為了限制調用者可以傳入的參數名,同時可以提供默認值。 # 定義命名的關鍵字參數在沒有可變參數的情況下不要忘了寫分隔符*,否則定義的將是位置參數。 def print_scores(**kw): print(‘ Name Socre‘) print(‘..........‘) for name, score in kw.items(): print(‘%10s %d‘ %(name, score)) print() print_scores(Adam = 99, Lisa=88, Bart=77) data ={ ‘Adam Lee‘: 99, ‘Lisa S‘: 88, ‘F.Bart‘: 77 } print_scores(**data) def print_info(name, *, gender, city=‘Beijing‘, age): print(‘Personal Info‘) print(‘-------------‘) print(‘Name:%s‘ % name) print(‘Gender:%s‘ % gender) print(‘City: %s‘ % city) print(‘age:%s‘ % age) print() print_info(‘Bob‘, gender=‘male‘, age=20) print_info(‘Lisa‘,gender=‘female‘, city=‘Shanghai‘, age=18)
廖雪峰網站:學習python函數—函數參數(三)