Tôi muốn thêm một câu trả lời:
Nó xảy ra khi bạn cố gắng truyền tham số vị trí với thứ tự vị trí sai cùng với đối số từ khóa trong chức năng gọi.
there is difference between parameter and argument
bạn có thể đọc chi tiết về đây Đối số và tham số trong python
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
vì chúng ta có ba tham số:
a là tham số vị trí
b = 1 là từ khóa và tham số mặc định
* args là tham số độ dài thay đổi
Vì vậy, trước tiên chúng ta gán một tham số theo vị trí, có nghĩa là chúng ta phải cung cấp giá trị cho đối số vị trí theo thứ tự vị trí của nó, ở đây là vấn đề thứ tự. nhưng chúng ta đang chuyển đối số 1 tại vị trí của hàm gọi và sau đó chúng ta cũng đang cung cấp giá trị cho a, coi là đối số từ khóa. bây giờ có hai giá trị:
một là giá trị vị trí: a = 1
thứ hai là giá trị từ khóa là a = 12
Giải pháp
Chúng ta phải thay đổi hello(1, 2, 3, 4,a=12)
để hello(1, 2, 3, 4,12)
bây giờ a sẽ chỉ nhận được một giá trị vị trí là 1 và b sẽ nhận giá trị 2 và phần còn lại của các giá trị sẽ nhận * args (tham số độ dài biến)
thông tin thêm
nếu chúng ta muốn rằng * args sẽ nhận được 2,3,4 và a nên lấy 1 và b sẽ nhận được 12
sau đó chúng ta có thể làm như thế này
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
Một cái gì đó nữa:
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
đầu ra:
1
(2, 1, 2, 8, 9)
1
{'c': 12}
self
là tốt hơn so với ngầmthis
.