Python函式的參數設計 – Python Function Parameters
parameter跟argument的差異
基本上這兩者是一樣的,不過使用在不同的情境下。如果混用了其實是沒關係,可能也沒人會在意
不過值得一提的是以上這個範例的兩個參數在Module Scope
跟Function Scope
中都是指向同一個記憶體位置
可迭代物件的拆解機制(unpacking)
可迭代的物件都能拆解,很適合用在參數傳遞(主要使用在有序物件上)
1 2 3 4 5 6 |
a, b = ['A', 'B'] # list a, b = 'A', 'B' # tuple a, b = 'AB' # str a, b = {'A', 'B'} # set 注意這裡會有兩種結果 a, b = {'A': 10, 'B': 20} # dict 注意這裡會有兩種結果 |
超簡單實現swap
傳統的作法
1 2 3 4 5 6 7 |
a = 10 b = 20 tep = a a = b b = temp |
unpacking的作法
1 2 3 4 |
a = 10 b = 20 a, b = b, a |
使用*
和**
(3.5以上適用)
1 2 3 |
*a = 'python' a, *b, c = 1, 2, 3, 4 |
1 2 3 4 |
l1 = [1, 2, 3] l2 = 'XYZ' l = [*l1, *l2] |
1 2 3 4 5 |
s1 = {1, 2, 3} s2 = {4} # merge set s = {*s1, *s2} |
1 2 3 4 5 6 7 |
d1 = {'a': 1, 'b': 2} d2 = {'c': 3} d3 = {'a': 0} # merge dictionary d = {**d1, **d2, **d3} # 注意這裡a的值會被覆寫 d = {**d1, a: 0} # 注意這裡a的值會被覆寫 |
unpacking範例
巢狀的unpacking
1 2 3 4 |
a, b, (c, d) = [1, 2, [3, 4]] a, *b, (c, d, e) = [1, 2, 3, 'XYZ'] a, *b, (c, *d) = [1, 2, 3, 'python'] # a=1, b=[2, 3], c='p', d=['y', 't', 'h', 'o', 'n'] |