parameter跟argument的差異

基本上這兩者是一樣的,不過使用在不同的情境下。如果混用了其實是沒關係,可能也沒人會在意

不過值得一提的是以上這個範例的兩個參數在Module ScopeFunction Scope中都是指向同一個記憶體位置


可迭代物件的拆解機制(unpacking)

可迭代的物件都能拆解,很適合用在參數傳遞(主要使用在有序物件上)

超簡單實現swap

傳統的作法

unpacking的作法

使用***(3.5以上適用)

unpacking範例

巢狀的unpacking

使用unpacking來處理parameters

規則:

  • 關鍵字參數(keyword argument)後方不能再接位置參數(positional arguments)
  • 你不能在*args的後方再使用位置參數
  • 你不能在**kwargs的後方再傳入任何參數

*args

用tuple收集所有或剩下的

這裡要注意的是,你不能在*args的後方再使用位置參數,因為*args後面再傳入的會被視作keyword arguments

我們一樣可以不要強制傳入位置參數:

或者可以強制不要傳入位置參數:

再舉個例子

*kwargs

以dictionary收集所有或剩下的keyword arguments,注意:你不能在**kwargs的後方再傳入任何參數

應用範例

Python的print,把arguments用objects變數收集,並在後面額外定義4個帶有預設值的keyword argumemts

用keyword arguments來設定方法的行為


設定參數的預設值(Default Values)應該注意的事情

我們先來討論function在被import的時候發生了什麼事情:
1. import的程式會馬上被執行
2. 函式、該函式的參數預設值在執行當下陸續被新增並儲存到記憶體中
3. 當函式後續被呼叫(call, invoke)的時候,執行該函式

有的情況下你會想要在函式建立的當下初始化參數,也就是上面第2步說明的:

有時候你的用意並非如此,你可能想要函式被呼叫的當下初始化參數,也就是上面第3步說明的:

另外要注意的是使用可變序列當預設值會遇到以下情況:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。