Ngôn ngữ lập trình Python sử dụng cả * và ** trong các ngữ cảnh khác nhau. Trong bài viết này, chúng ta sẽ thấy cách sử dụng hai ký hiệu này và các tình huống hữu ích tương ứng.
Là Toán tử Infix (Infix Operator)
Khi * được dùng như toán tử infix, nó cho tích toán học của các số. Trong ví dụ dưới đây, ta lấy số nguyên, số thực và số phức để nhân và lấy kết quả.
Ví dụ
# Số nguyên x = 20 y = 10 z = x * y print(z, "\n") # Số thực x1 = 2.5 y1 = 5.1 z1 = x1 * y1 print(z1, "\n") # Số phức x2 = 4 + 5j y2 = 5 + 4j z2 = x2 * y2 print(z2, "\n")
Kết quả
Chạy mã trên cho kết quả sau:
200 12.75 41j
Chúng ta cũng có thể dùng nó như toán tử infix để mở rộng chuỗi.
Ví dụ
chuoi = "Point-" print(chuoi * 4, "\n") danh_sach = [4, 5, 6] print(danh_sach * 3, "\n") tap = (9, 8, 7) print(tap * 2)
Kết quả
Chạy mã trên cho kết quả sau:
Point-Point-Point-Point- [4, 5, 6, 4, 5, 6, 4, 5, 6] (9, 8, 7, 9, 8, 7)
Là Toán tử Prefix (Prefix Operator)
Chúng ta có thể dùng một dấu sao đơn làm tiền tố. Các ví dụ dưới đây mô tả các cách sử dụng nó như tiền tố.
Mở rộng Iterable (Expand an Iterable)
Một iterable như list hoặc tuple có thể được mở rộng chỉ bằng cách thêm dấu sao trước tên nó.
Ví dụ
ngay_trong_tuan = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] print(*ngay_trong_tuan)
Kết quả
Chạy mã trên cho kết quả sau:
Mon Tue Wed Thu Fri
Nhận số lượng đối số biến đổi (Take Variable Number of Arguments)
Chúng ta có thể đưa số lượng đối số biến đổi cho hàm sử dụng dấu sao đơn. Như chương trình dưới đây.
Ví dụ
def tong_nhieu_so(*args):
ket_qua = 0
# Duyệt qua tuple args của Python
for x in args:
ket_qua = ket_qua + x
return ket_qua
print(tong_nhieu_so(1, 2))
print(tong_nhieu_so(11, 21, 30))
print(tong_nhieu_so(5.5, 0))
Kết quả
Chạy mã trên cho kết quả sau:
3 62 5.5
Sử dụng ** (Double Asterisk)
Dấu sao kép dùng cho đối số dựa trên từ khóa (keyword arguments). Ở đây đối số được truyền vào như từ điển chứ không phải giá trị riêng lẻ.
Ví dụ
def noi_cac_khoa(**kwargs):
ket_qua = ""
# Duyệt qua keys của kwargs dictionary
for arg in kwargs.keys():
ket_qua += arg
return ket_qua
def noi_cac_gia_tri(**kwargs):
ket_qua = ""
# Duyệt qua values của kwargs dictionary
for arg in kwargs.values():
ket_qua += arg
return ket_qua
print(noi_cac_khoa(ngay1="Mon-", ngay2="Tue-", ngay3="Wed-", ngay4="Thu-"))
print(noi_cac_gia_tri(ngay1="Mon-", ngay2="Tue-", ngay3="Wed-", ngay4="Thu-"))
Kết quả
Chạy mã trên cho kết quả sau:
ngay1ngay2ngay3ngay4 Mon-Tue-Wed-Thu-