Có thể khai báo các hàm nhận số lượng đối số thay đổi, sử dụng cú pháp sau
def foo[first, second, third, *therest]:
print["First: %s" % first]
print["Second: %s" % second]
print["Third: %s" % third]
print["And all the rest.. %s" % list[therest]]
Biến "therest" là một danh sách các biến, nó nhận tất cả các đối số được cấp cho hàm "foo" sau 3 đối số đầu tiên. Vì vậy, gọi
def foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
8 sẽ in radef foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
Cũng có thể gửi các đối số của hàm theo từ khóa, do đó thứ tự của đối số không quan trọng, sử dụng cú pháp sau. Đoạn mã sau mang lại đầu ra sau.
def foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
9def bar[first, second, third, **options]:
if options.get["action"] == "sum":
print["The sum is: %d" %[first + second + third]]
if options.get["number"] == "first":
return first
result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
Hàm "bar" nhận 3 đối số. Nếu nhận được một đối số "hành động" bổ sung và nó hướng dẫn tính tổng các số, thì tổng sẽ được in ra. Ngoài ra, hàm cũng biết nó phải trả về đối số đầu tiên, nếu giá trị của tham số "số", được truyền vào hàm, bằng "đầu tiên"
Bài tập
Điền vào các hàm
def bar[first, second, third, **options]:
if options.get["action"] == "sum":
print["The sum is: %d" %[first + second + third]]
if options.get["number"] == "first":
return first
result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
0 và def bar[first, second, third, **options]:
if options.get["action"] == "sum":
print["The sum is: %d" %[first + second + third]]
if options.get["number"] == "first":
return first
result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
1 để chúng có thể nhận được số lượng đối số thay đổi [3 hoặc nhiều hơn] Hàm def bar[first, second, third, **options]:
if options.get["action"] == "sum":
print["The sum is: %d" %[first + second + third]]
if options.get["number"] == "first":
return first
result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
0 phải trả về số lượng đối số bổ sung nhận được. def bar[first, second, third, **options]:
if options.get["action"] == "sum":
print["The sum is: %d" %[first + second + third]]
if options.get["number"] == "first":
return first
result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
1 phải trả về def foo[first, second, third, *therest]:
print["First: %s" % first]
print["Second: %s" % second]
print["Third: %s" % third]
print["And all the rest.. %s" % list[therest]]
0 nếu đối số có từ khóa def foo[first, second, third, *therest]:
print["First: %s" % first]
print["Second: %s" % second]
print["Third: %s" % third]
print["And all the rest.. %s" % list[therest]]
1 có giá trị 7 và ngược lại là def foo[first, second, third, *therest]:
print["First: %s" % first]
print["Second: %s" % second]
print["Third: %s" % third]
print["And all the rest.. %s" % list[therest]]
2 Chẳng hạn, hãy tạo một hàm lấy hai số làm đối số. Hàm này trả về tổng, hiệu, nhân và chia giữa hai số này
Đây là cách nó trông trong mã
def operate[a, b]: sum = a + b diff = a - b mul = a * b div = a / b return sum, diff, mul, div
Bây giờ bạn có thể gọi hàm này cho hai số và gán giá trị trả về cho các biến
n1 = 5 n2 = 10 sum, diff, mul, div = operate[n1, n2] print[ f"The sum is {sum}\n" f"The difference is {diff}\n" f"The multiplication gives {mul}\n" f"The division gives {div}\n" ]
Điều này dẫn đến kết quả sau đây được in trong bảng điều khiển
Trả về nhiều giá trị hoạt động như thế nào trong Python
Trong phần trước, bạn đã học cách trả về nhiều giá trị bằng cách phân tách các giá trị bằng dấu phẩy
Nhưng tại sao và nó hoạt động như thế nào?
Bộ dữ liệu trong Python
Mã ví dụ hoạt động vì nó trả về một tuple
Trong trường hợp bạn không biết tuple là gì, hãy xem bài viết chuyên sâu này. Tóm lại, một bộ là một nhóm gồm 0 hoặc nhiều phần tử
Chẳng hạn, đây là một ví dụ về bộ ba giá trị đại diện cho một điểm 3D
coords = [1, 1, 3]
Lưu ý rằng các bộ dữ liệu Python không phải lúc nào cũng cần dấu ngoặc đơn
Ví dụ: bạn có thể viết điểm 3D ở trên dưới dạng
def foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
0Điều này tạo ra cùng một bộ ba giá trị đại diện cho một điểm 3D
Cách truy cập giá trị Tuple trong Python
Để truy cập và lưu trữ một giá trị từ một bộ dữ liệu, bạn có thể truy cập nó giống như cách bạn truy cập một giá trị từ danh sách. Nói cách khác, sử dụng toán tử [] với chỉ mục
Ví dụ: hãy lưu trữ các điểm 3D vào các biến x, y và z
def foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
1Điều này dẫn đến đầu ra sau trong bảng điều khiển
def foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
2Điều này hoạt động tốt, nhưng có một cách dễ dàng hơn cho mục đích cụ thể này
Phá hủy Tuple trong Python
Bạn có thể sử dụng phá hủy bộ dữ liệu để truy cập các giá trị bộ dữ liệu và lưu trữ chúng vào các biến
Phá hủy bộ có nghĩa là bạn khai báo một loạt các biến được phân tách bằng dấu phẩy trong một dòng và gán từng giá trị bộ cho biến tương ứng. Điều này giúp bạn tiết kiệm các dòng mã trong khi nó cũng làm cho ý định rất rõ ràng
Hãy để tôi chỉ ra những gì tôi có ý nghĩa
Chẳng hạn, trong ví dụ trước, bạn đã lưu tọa độ 3D x, y và z trên các dòng riêng biệt bằng toán tử []. Thay vì làm theo cách này, bạn có thể sử dụng tuple destructuring như một tốc ký
def foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
3Do đó, mỗi tọa độ trong điểm 3D được gán cho một biến riêng
def foo[first, second, third, *therest]:
print["First: %s" %[first]]
print["Second: %s" %[second]]
print["Third: %s" %[third]]
print["And all the rest.. %s" %[list[therest]]]
foo[1, 2, 3, 4, 5]
2Như bạn có thể thấy, giá trị đầu tiên của bộ dữ liệu được gắn vào biến x, giá trị thứ hai đến y và giá trị thứ ba đến z
Bây giờ bạn đã hiểu cách các bộ dữ liệu được tạo và cách các giá trị được đọc từ chúng
Cách trả về nhiều giá trị từ một hàm
Để trả về nhiều giá trị từ một hàm, hãy trả về các giá trị dưới dạng một bộ. Để sau đó truy cập/lưu trữ các giá trị này vào các biến, hãy sử dụng tuple destructuring
Nếu bây giờ bạn nhìn vào ví dụ bạn đã thấy trong phần giới thiệu
def operate[a, b]: sum = a + b diff = a - b mul = a * b div = a / b return sum, diff, mul, div
Bạn nhận ra hàm này trả về một bộ gồm bốn giá trị. Để truy cập bốn giá trị này, bạn sử dụng cấu trúc lại tuple. Đây là giao diện của nó trong mã
n1 = 5 n2 = 10 sum, diff, mul, div = operate[n1, n2] print[ f"The sum is {sum}\n" f"The difference is {diff}\n" f"The multiplication gives {mul}\n" f"The division gives {div}\n" ]
đầu ra
________số 8Bây giờ các giá trị bộ trả về được lưu trữ trong các biến sum, diff, mul và div
Việc hủy cấu trúc một bộ trả về theo cách này rất tiện lợi. Bạn không cần sử dụng toán tử truy cập dấu ngoặc vuông để chọn thủ công các giá trị từ bộ dữ liệu. Thay vào đó, cú pháp phá hủy sẽ giải quyết vấn đề đó
Phần kết luận
Để trả về nhiều giá trị từ một hàm trong Python, hãy trả về một bộ giá trị
Như bạn có thể biết, một bộ là một nhóm các giá trị được phân tách bằng dấu phẩy. Bạn có thể tạo một bộ có hoặc không có dấu ngoặc đơn. Để truy cập/lưu trữ nhiều giá trị được trả về bởi một hàm, hãy sử dụng cấu trúc tuple