iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0

今天來介紹 Python function 的 positional arguments(位置引數),從下面的函式看起:
(註:定義 function 時,傳入的變數稱為「參數(parameter)」;呼叫 function 時傳入的變數稱為「引數(argument)」,不用拘泥於這些名詞。)

def my_func(a, b, c):
    print("a={0}, b={1}, c={2}".format(a, b, c))
my_func(1, 2, 3)
a=1, b=2, c=3

Default Values

你可以定義 function 的參數預設值,這樣傳入引數時,缺少的部分會用預設值代替:

def my_func(a, b=2, c=3):
    print("a={0}, b={1}, c={2}".format(a, b, c))

但注意!當你定義了一個有預設值的參數,後面的參數也都要有預設值,否則就掛了:

def fn(a, b=2, c):
    print(a, b, c)
  Input In [6]
    def fn(a, b=2, c):
                   ^
SyntaxError: non-default argument follows default argument

改成下面這樣就OK了:

def my_func(a, b=2, c=3):
    print("a={0}, b={1}, c={2}".format(a, b, c))
my_func(10, 20, 30)
a=10, b=20, c=30
my_func(10, 20)
a=10, b=20, c=3
my_func(10)
a=10, b=2, c=3

因為 a 參數沒有預設值,呼叫函式時就一定要闡明它,否則又掛了:

my_func()
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

/Users/maotingyang/Downloads/Positional Arguments.ipynb Cell 15 in <cell line: 1>()
----> <a href='vscode-notebook-cell:/Users/maotingyang/Downloads/Positional%20Arguments.ipynb#X16sZmlsZQ%3D%3D?line=0'>1</a> my_func()


TypeError: my_func() missing 1 required positional argument: 'a'

Keyword Arguments (named arguments)

傳入引數時可以指定對應的參數,這稱為關鍵字引數

好處是我們在傳入引數時就不用依照順序傳入:

def my_func(a, b=2, c=3):
    print("a={0}, b={1}, c={2}".format(a, b, c))
my_func(c=30, b=20, a=10)
a=10, b=20, c=30
my_func(10, c=30, b=20)
a=10, b=20, c=30

但注意!當你使用了一個關鍵字引數,之後的引數也都要是關鍵字引數,否則又掛了:

my_func(10, b=20, 30)
  Input In [15]
    my_func(10, b=20, 30)
                        ^
SyntaxError: positional argument follows keyword argument

有設定預設值的參數,就不一定要傳入引數:

my_func(10, c=30)
a=10, b=2, c=30
my_func(a=30, c=10)
a=30, b=2, c=10
my_func(c=10, a=30)
a=30, b=2, c=10

好啦,我們明天見~

參考:Python 3: Deep Dive (Part 1 - Functional)


上一篇
Comparison Operators
下一篇
Unpacking Iterables
系列文
小青蛇變大蟒蛇——進階Python學起來!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言