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!

Python - Arbitrary Arguments

Đố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**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