Saya ingin menambahkan satu jawaban lagi:
Itu terjadi ketika Anda mencoba untuk melewati parameter posisi dengan urutan posisi yang salah bersama dengan argumen kata kunci dalam fungsi panggilan.
there is difference between parameter and argument
Anda dapat membaca secara detail tentang di sini Argumen dan Parameter dalam python
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
karena kami memiliki tiga parameter:
a adalah parameter posisi
b = 1 adalah kata kunci dan parameter default
* args adalah parameter panjang variabel
jadi pertama-tama kita menetapkan parameter sebagai posisi, artinya kita harus memberikan nilai pada argumen posisi dalam urutan posisinya, di sini urutan penting. tapi kami melewati argumen 1 di tempat fungsi panggil dan kemudian kami juga memberikan nilai kepada, memperlakukan sebagai argumen kata kunci. sekarang a memiliki dua nilai:
satu adalah nilai posisi: a = 1
kedua adalah nilai kata kunci yang a = 12
Larutan
Kita harus berubah hello(1, 2, 3, 4,a=12)
untuk hello(1, 2, 3, 4,12)
jadi sekarang akan mendapatkan hanya satu nilai posisional yang 1 dan b akan mendapatkan nilai 2 dan beristirahat dari nilai-nilai akan mendapatkan * args (panjang variabel parameter)
informasi tambahan
jika kita menginginkan * args harus mendapatkan 2,3,4 dan a harus mendapatkan 1 dan b harus mendapatkan 12
maka kita bisa melakukan ini
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
Sesuatu yang lebih :
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
keluaran:
1
(2, 1, 2, 8, 9)
1
{'c': 12}
self
lebih baik daripada implisitthis
.