Dấu sao đơn *
giải nén chuỗi / tập hợp thành các đối số vị trí, vì vậy bạn có thể làm điều này:
def sum(a, b):
return a + b
values = (1, 2)
s = sum(*values)
Thao tác này sẽ giải nén bộ tuple để nó thực sự thực thi như sau:
s = sum(1, 2)
Dấu sao đôi **
cũng làm như vậy, chỉ sử dụng từ điển và do đó, các đối số được đặt tên:
values = { 'a': 1, 'b': 2 }
s = sum(**values)
Bạn cũng có thể kết hợp:
def sum(a, b, c, d):
return a + b + c + d
values1 = (1, 2)
values2 = { 'c': 10, 'd': 15 }
s = sum(*values1, **values2)
sẽ thực thi như:
s = sum(1, 2, c=10, d=15)
Cũng xem phần 4.7.4 - Giải nén danh sách đối số của tài liệu Python.
Ngoài ra, bạn có thể xác định các hàm nhận *x
và **y
đối số, điều này cho phép một hàm chấp nhận bất kỳ số lượng đối số vị trí và / hoặc được đặt tên nào không được đặt tên cụ thể trong khai báo.
Thí dụ:
def sum(*values):
s = 0
for v in values:
s = s + v
return s
s = sum(1, 2, 3, 4, 5)
hoặc với **
:
def get_a(**values):
return values['a']
s = get_a(a=1, b=2)
điều này có thể cho phép bạn chỉ định một số lượng lớn các tham số tùy chọn mà không cần phải khai báo chúng.
Và một lần nữa, bạn có thể kết hợp:
def sum(*values, **options):
s = 0
for i in values:
s = s + i
if "neg" in options:
if options["neg"]:
s = -s
return s
s = sum(1, 2, 3, 4, 5)
s = sum(1, 2, 3, 4, 5, neg=True)
s = sum(1, 2, 3, 4, 5, neg=False)
*
và**
điều hành mà không có gì để làm với cú pháp này.