今天來教函數使用的一些進階技巧,雖然可能不太常用,但有的時候不確定函數參數個數時,將會需要可變參數列表
可呼叫任意參數的函數調用 (最不常用的選項)
可以觀察下列範例,可變參數列表在宣告時,語法為參數名稱前加星號
#%% *args and **kwargs
'''
當不知道參數個數時
args = 序列元組
kwargs = 字典(關鍵字/值配對)
'''
def student_info(*args, **kwargs):
print("args = ", args)
print("kwargs = ", kwargs)
student_info('Math', 'Art', name = 'John', age = '22')
由上面的程式碼可以看出,*args將前半部分填入的參數包裝為一個tuple,而後半部分填入的關鍵字參數部分則被**kwargs包裝為一個字典
我們可以再來看看一個連加的範例.製作一個sum函數將所有傳入的參數連加起來
>>> def sum(*numbers):
... sum = 0
... for n in numbers:
... sum += n
... return sum
可以將原本的courses列表、info字典直接前面加上星號填入函數參數,這些參數會直接解封(unpacking)填入函數參數列表中,大家可以觀察一下有加星號與沒加星號填入函數的差別
#%% unpack sequence and dictionary
courses = ['Math', 'Art']
info = {'name': 'John', 'age': 22}
student_info(courses, info) # 沒加星號
student_info(*courses, **info) # 有加星號(unpacking)
print('*courses: ', *courses)
print('**info: ', dict(**info))