python 可變對象參數

可變對象如list,tuple,dictionary或者instances,在一個函數的默認參數中只會被初始化一次 .

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))
[1]
[1, 2]
[1, 2, 3]

如果想被初始化多次,應該如下使用

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

參數(args)

形參和實參

形參是函數括號裏面的參數(定義的時候),實參是傳遞給形參的值(調用的時候)

def test(a, b):# ab是形參
	return a+b
test(a=1,b=2)# 1,2分別是a,b的實參

默認參數

可以給參數默認值

def test(a=1,b):# 如果調用參數時不給a賦值,則默認a=1

不定長參數

不定長參數,可以用循環取出

*args 單星號參數

*單星號參數實質是傳入一個元組

In [1]: def name(*args):
   ...:     print(args)

In [2]: name(1,2,3)
(1, 2, 3)

**kwargs 雙星號參數

雙星號參數實質是字典,表示帶變量名的參數

In [1]: def test(**kwargs):
   ...:     for key, value in kwargs.items():
   ...:         print(key+"="+value)

In [2]: test(a="1",b="2")
a=1
b=2

In[3]: dic={"a"=1,"b"=2}
In[4]:  test(**dic)  # 注意理解**的意義
a=1
b=2

In[6]: def test(*args,**kwargs):
  ...:     print(f"args: {args}")
  ...:     print(f"kwargs: {kwargs}")
  ...: 
  ...: test(1,2,3,4,5,a=1,b=2,c=3,d=4,e=5)
  ...: 
args: (1, 2, 3, 4, 5)
kwargs: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

1.*參數,必須出現在**參數之前
2.Python中函數參數是引用傳遞(注意不是值傳遞)。對於不可變類型,因變量不能修改,所以運算不會影響到變量自身;而對於可變類型來說,則相反

Positional-or-Keyword Arguments

可以指定哪些參數是位置參數,哪些參數是關鍵詞參數
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):

>>> def standard_arg(arg): //直接通過位置傳參
...     print(arg)
...
>>> def pos_only_arg(arg, /):  //不能通過`arg=1`傳參,因爲規定是位置參數
...     print(arg)
...
>>> def kwd_only_arg(*, arg): //不能通過
...     print(arg)
...
>>> def combined_example(pos_only, /, standard, *, kwd_only):
...     print(pos_only, standard, kwd_only)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章