標籤:一個 運行 ros 一個使用者 bar col end sar items
1、*args
# 位置參數,計算x2的函數def power(x): return x * xp = power(5)print(p)# 把power(x)修改為power(x, n),用來計算xndef power(x, n): s = 1 while n > 0: n = n - 1 s = s * x return sp1 = 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函數—函數參數(三)