iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0
自我挑戰組

30天學會Python系列 第 18

Python - Function函數(2) - 可變參數列表、Unpacking 參數列表

今天來教函數使用的一些進階技巧,雖然可能不太常用,但有的時候不確定函數參數個數時,將會需要可變參數列表

可變參數列表

可呼叫任意參數的函數調用 (最不常用的選項)

  • *args : 回傳 tuple
  • **kwargs : 回傳 dictionary(關鍵字參數)

可以觀察下列範例,可變參數列表在宣告時,語法為參數名稱前加星號

  • 序列類型語法為前面加一個星號:*args
  • 字典類型語法為前面加兩個星號:**kwargs
#%% *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

Unpacking 解封參數列表

可以將原本的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))

上一篇
Python - Function函數(1) - 定義、預設參數、關鍵字參數
下一篇
Python - Function(3)
系列文
30天學會Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言