parameter 與 argument

這是常常會混用,但實際上不一樣意義的兩個詞,根據〈What is the difference between arguments and parameters?〉這一篇的說明,其實很簡單: parameter:一般譯為『參數』,指的是定義函式時列出來要傳入給函式參考使用的項目,等於是函式的規格,當你叫用這個函式時,就必須依照參數的個數以及個別參數的型別,傳入適當的資料給函式。 argument:一般譯為『引數』,指的是叫用函式時,傳入給函式引用的實際資料。 舉例來說: def foo(age:int, name:str): ... foo(10, 'hello') 其中 age 與 name 就是在定義函式時列出的參數,表示叫用 foo 時必須依序傳入一個整數與一個字串。10 和 'hello' 則是叫用 foo 時傳入的引數,10 會傳給 age、'hello' 會傳給 name。 由於引數是指實際傳送的資料,所以如果以底下方式叫用 foo: foo(10, id='hello') 那麼 10 也稱為位置引數(postitional argument),因為它是透過出現位置的順序對應到參數 age,而 'hello' 是一個指名引數(keyword argument),是透過指定參數的名稱對應到參數 name。如果稱它們為位置參數或是指名參數就不正確了,因為參數本來就有固定的位置和名稱,是實際傳遞的引數才需要靠位置或是名稱來辨別要傳給哪個參數。 更混淆的是,在 Python 中,keyword paramters 指的是在函式中接收所有為配對的指名引數的那個參數,例如: def foo(*args, **kwargs): ... foo(10, 20, name='hello') 函式定義中的 kwargs 就是 keyword parameters(具名參數),要加 's',因為可能有很多個,用來蒐集所有未能以名稱對應到參數的指名引數,變成一個字典;前面的 args 則稱為 optional paramters(選用參數),一樣因為可能有很多個,所以要加 s,用來蒐集所有未能以位置對應到參數的位置引數,變成一個序組(tuple)。因此,如果沒有區分 keyword argument 和 keyword parameters,就只能依靠前後文判斷是指哪一種了。 有些教科書並不刻意使用 parameter 與 argument,而是稱為形式參數(formal parameter)與實際參數(atual parameter),明確表達前者是定義函式時形式上規範要有哪些參數,後者則是實際上傳入的資料。兩者都稱為 paramter,就不用思考 paramter 和 argument 的差別了。 在中文世界中,一般教學通常不會嚴格區分,大部分都統稱『參數』,在閱讀時就必須自行依照前後脈絡判斷文字,確認倒底指的是函式內的參數,還是傳給函式的引數了。

Apr 1, 2025 - 05:41
 0
parameter 與 argument

這是常常會混用,但實際上不一樣意義的兩個詞,根據〈What is the difference between arguments and parameters?〉這一篇的說明,其實很簡單:

  • parameter:一般譯為『參數』,指的是定義函式時列出來要傳入給函式參考使用的項目,等於是函式的規格,當你叫用這個函式時,就必須依照參數的個數以及個別參數的型別,傳入適當的資料給函式。
  • argument:一般譯為『引數』,指的是叫用函式時,傳入給函式引用的實際資料。

舉例來說:

def foo(age:int, name:str):
    ...

foo(10, 'hello')

其中 agename 就是在定義函式時列出的參數,表示叫用 foo 時必須依序傳入一個整數與一個字串。10 和 'hello' 則是叫用 foo 時傳入的引數,10 會傳給 age、'hello' 會傳給 name

由於引數是指實際傳送的資料,所以如果以底下方式叫用 foo

foo(10, id='hello')

那麼 10 也稱為位置引數(postitional argument),因為它是透過出現位置的順序對應到參數 age,而 'hello' 是一個指名引數(keyword argument),是透過指定參數的名稱對應到參數 name。如果稱它們為位置參數或是指名參數就不正確了,因為參數本來就有固定的位置和名稱,是實際傳遞的引數才需要靠位置或是名稱來辨別要傳給哪個參數。

更混淆的是,在 Python 中,keyword paramters 指的是在函式中接收所有為配對的指名引數的那個參數,例如:

def foo(*args, **kwargs):
    ...

foo(10, 20, name='hello')

函式定義中的 kwargs 就是 keyword parameters(具名參數),要加 's',因為可能有很多個,用來蒐集所有未能以名稱對應到參數的指名引數,變成一個字典;前面的 args 則稱為 optional paramters(選用參數),一樣因為可能有很多個,所以要加 s,用來蒐集所有未能以位置對應到參數的位置引數,變成一個序組(tuple)。因此,如果沒有區分 keyword argument 和 keyword parameters,就只能依靠前後文判斷是指哪一種了。

有些教科書並不刻意使用 parameter 與 argument,而是稱為形式參數(formal parameter)實際參數(atual parameter),明確表達前者是定義函式時形式上規範要有哪些參數,後者則是實際上傳入的資料。兩者都稱為 paramter,就不用思考 paramter 和 argument 的差別了。

在中文世界中,一般教學通常不會嚴格區分,大部分都統稱『參數』,在閱讀時就必須自行依照前後脈絡判斷文字,確認倒底指的是函式內的參數,還是傳給函式的引數了。