Python - Đối số Ngẫu Nhiên hoặc Độ Dài Thay Đổi
Xin chào các nhà phù thủy Python tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình hấp dẫn vào thế giới các đối số ngẫu nhiên trong Python. Đừng lo lắng nếu bạn là mới bắt đầu học lập trình; tôi sẽ là người hướng dẫn bạn thân thiện, và chúng ta sẽ khám phá khái niệm này bước từng bước. Vậy, hãy nắm chắc chiếc cây cơBan hình ảo (bàn phím) của bạn, và chúng ta sẽ bắt đầu!
Đối số Ngẫu Nhiên (*args)
Hãy tưởng tượng bạn đang lên kế hoạch tổ chức một buổi tiệc, nhưng bạn không chắc chắn bao nhiêu bạn bè sẽ đến. Bạn muốn sẵn sàng cho bất kỳ số lượng khách mà nào. Đó chính là điều gì các đối số ngẫu nhiên làm trong các hàm Python - chúng cho phép bạn xử lý một số lượng không xác định của các đối số!
Trong Python, chúng ta sử dụng *args
để đánh dấu các đối số ngẫu nhiên. Dấu sao (*
) là biểu tượng ma thuật ở đây, và args
chỉ là một quy ước (bạn có thể sử dụng bất kỳ tên nào, nhưng args
được sử dụng phổ biến và được công nhận).
Hãy xem một ví dụ đơn giản:
def chao_ban_be(*args):
for ban_be in args:
print(f"Xin chào, {ban_be}!")
chao_ban_be("Alice", "Bob", "Charlie")
Trong ví dụ này, chao_ban_be()
có thể chấp nhận bất kỳ số lượng đối số nào. Khi chúng ta chạy mã này, nó sẽ đầu ra:
Xin chào, Alice!
Xin chào, Bob!
Xin chào, Charlie!
Nhưng đành nếu chúng ta có nhiều bạn bè hơn? Không có vấn đề! Chúng ta có thể dễ dàng thêm nhiều tên:
chao_ban_be("Alice", "Bob", "Charlie", "David", "Eve")
Và hàm của chúng ta sẽ chào đón tất cả họ một cách vui vẻ!
Cách *args Hoạt Động
Khi bạn sử dụng *args
trong định nghĩa hàm, Python sẽ đóng tất cả các đối số vào một tuple. Bạn có thể lặp qua tuple này bên trong hàm của bạn. Đó như có một chiếc túi ma thuật có thể chứa bất kỳ số lượng món đồ nào!
Ví Dụ Đối Số Ngẫu Nhiên
Hãy tạo một ví dụ thực tế hơn. Giả sử chúng ta muốn tính trung bình của một số điểm thay đổi:
def tinh_trung_binh(*args):
if len(args) == 0:
return 0
tong = sum(args)
trung_binh = tong / len(args)
return trung_binh
print(tinh_trung_binh(85, 90, 78))
print(tinh_trung_binh(92, 88, 95, 78, 80))
Điều này sẽ đầu ra:
84.33333333333333
86.6
Hàm tinh_trung_binh()
của chúng ta có thể xử lý bất kỳ số lượng điểm nào. Nó tính tổng sử dụng hàm sum()
có sẵn, sau đó chia cho số lượng điểm để có được trung bình.
Đối Số Bắt Buộc Với Đối Số Ngẫu Nhiên
Đôi khi, bạn có thể muốn có một số đối số bắt buộc cùng với các đối số ngẫu nhiên. Không có vấn đề! Python đã bảo vệ bạn. Bạn có thể kết hợp các tham số thường với *args
. Chỉ cần nhớ để đặt *args
ở cuối:
def intro_lop_hoc(giao_vien, *hoc_sinh):
print(f"Xin chào, tôi là {giao_vien}, và tôi sẽ là giao viên của bạn.")
print("Hãy giới thiệu các học sinh:")
for hoc_sinh in hoc_sinh:
print(f"- {hoc_sinh}")
intro_lop_hoc("Mr. Johnson", "Alice", "Bob", "Charlie")
Điều này sẽ đầu ra:
Xin chào, tôi là Mr. Johnson, và tôi sẽ là giao viên của bạn.
Hãy giới thiệu các học sinh:
- Alice
- Bob
- Charlie
Trong ví dụ này, giao_vien
là một đối số bắt buộc, trong khi *hoc_sinh
có thể chấp nhận bất kỳ số lượng tên học sinh nào.
Đối Số Từ Khóa Ngẫu Nhiên (**kwargs)
Bây giờ, hãy lên mức! Nhưng đành nếu chúng ta muốn truyền các cặp khóa-giá trị như đối số? Nhập **kwargs
(đối số từ khóa)! Đó giống như *args
, nhưng cho các đối số có tên.
Dưới đây là một ví dụ đơn giản:
def in_thong_tin_nguoi_dung(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
in_thong_tin_nguoi_dung(name="Alice", age=25, city="New York")
Điều này sẽ đầu ra:
name: Alice
age: 25
city: New York
Trong trường hợp này, **kwargs
tạo ra một từ điển nơi các khóa là các tên đối số và các giá trị là các giá trị đối số.
Đa Số Đối Số Với Đối Số Từ Khóa Ngẫu Nhiên
Bạn có thể kết hợp các đối số thường, *args
, và **kwargs
trong cùng một hàm. Chỉ cần nhớ thứ tự: đối số thường trước, sau đó *args
, và cuối cùng là **kwargs
.
Dưới đây là một ví dụ kết hợp tất cả:
def thong_tin_hoc_sinh(truong_hoc, *mon_hoc, **thong_tin_them):
print(f"Trường học: {truong_hoc}")
print("Môn học:")
for mon_hoc in mon_hoc:
print(f"- {mon_hoc}")
print("Thông tin thêm:")
for key, value in thong_tin_them.items():
print(f"{key}: {value}")
thong_tin_hoc_sinh("Python High", "Math", "Science", "History", name="Alice", age=16, grade="10th")
Điều này sẽ đầu ra:
Trường học: Python High
Môn học:
- Math
- Science
- History
Thông tin thêm:
name: Alice
age: 16
grade: 10th
Tóm Tắt Các Phương Thức
Dưới đây là bảng tóm tắt các phương thức mà chúng ta đã thảo luận:
Phương Thức | Cú Pháp | Mô Tả |
---|---|---|
Đối số Ngẫu Nhiên | *args |
Cho phép hàm chấp nhận bất kỳ số lượng đối số vị trí nào |
Đối số Từ Khóa Ngẫu Nhiên | **kwargs |
Cho phép hàm chấp nhận bất kỳ số lượng đối số từ khóa nào |
Sử Dụng Kết Hợp | def func(regular_args, *args, **kwargs) |
Kết hợp đối số thường với cả hai loại đối số ngẫu nhiên |
Nhớ rằng, sức mạnh của các đối số ngẫu nhiên đến từ tính linh hoạt của chúng. Chúng cho phép bạn tạo ra các hàm linh hoạt hơn có thể thích nghi với các tình huống khác nhau.
Khi kết thúc hành trình ma thuật qua các đối số ngẫu nhiên, tôi hy vọng bạn sẽ cảm thấy tự tin hơn trong việc sử dụng những công cụ mạnh mẽ này trong các kịch bản Python của bạn... Tôi muốn nói là các vịt chò! Thực hành sử dụng *args
và **kwargs
trong các hàm của bạn, và sớm bạn sẽ lập trình Python với sự tinh tế của một nhà lập trình có kinh nghiệm. Chúc bạn có những hàm linh hoạt!
Credits: Image by storyset