Dalam Python, * (bintang berganda/asterisk) dan (bintang /asterisk) notasi dalam definisi fungsi dan panggilan memainkan peranan penting dalam mengendalikan pembolehubah argumen.
Sintaks
def foo(x, y, **kwargs): pass
menunjukkan bahawa fungsi foo boleh menerima bilangan argumen kata kunci yang sewenang-wenangnya. Argumen kata kunci ini dikumpulkan ke dalam kamus bernama kwargs. Contohnya:
def bar(**kwargs): for a in kwargs: print(a, kwargs[a]) # Call the function bar(name='one', age=27) # Output: # name one # age 27
Begitu juga, sintaks
def foo(x, y, *args): pass
membenarkan fungsi foo menerima bilangan hujah kedudukan yang sewenang-wenangnya. Argumen-argumen ini dikumpulkan ke dalam tuple bernama args.
def foo(*args): for a in args: print(a) # Call the function foo(1) # Output: 1 foo(1, 2, 3) # Output: 1 # Output: 2 # Output: 3
Kedua-dua *kwargs dan args boleh digunakan bersama untuk membenarkan kedua-dua hujah tetap dan boleh ubah. Contohnya:
def foo(kind, *args, bar=None, **kwargs): print(kind, args, bar, kwargs) # Call the function foo(123, 'a', 'b', apple='red') # Output: 123 ('a', 'b') None {'apple': 'red'}
Notasi * juga boleh digunakan untuk membongkar senarai argumen semasa memanggil fungsi. Contohnya:
def foo(bar, lee): print(bar, lee) # Create a list baz = [1, 2] # Call the function using unpacking foo(*baz) # Output: 1 2
Dalam Python 3.8 dan lebih baru, adalah mungkin untuk menentukan parameter kedudukan sahaja dalam definisi fungsi dengan menggunakan * notasi sebelum parameter biasa:
def func(arg1, arg2, arg3, *, kwarg1, kwarg2): pass
Fungsi ini hanya boleh menerima tiga hujah kedudukan, dan sebarang hujah tambahan mesti diluluskan sebagai hujah kata kunci.
Dalam Python 3.6 dan kemudian, susunan hujah kata kunci dikekalkan dalam kamus kwargs. Ini boleh berguna dalam senario tertentu, seperti apabila anda perlu mengekalkan susunan hujah yang dihantar kepada fungsi.
Atas ialah kandungan terperinci Bagaimanakah *args dan kwargs Berfungsi dalam Definisi dan Panggilan Fungsi Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!