Walrus operator là một tính năng mới được giới thiệu trong Python 3.8. Nó cho phép gán giá trị cho biến trong biểu thức điều kiện (hoặc biểu thức gán), đồng thời trả về giá trị được gán đó. Điều này giúp rút gọn và làm cho mã Python trở nên dễ đọc hơn trong một số trường hợp.
Cú pháp của Walrus operator là :=. Khi sử dụng toán tử :=, Python sẽ gán giá trị vào biến và trả về giá trị đó cho biểu thức. Ví dụ:
# Gán giá trị vào biến và trả về giá trị đó
if (n := len(s)) > 10:
print(f"String '{s}' is too long ({n} characters, expected <= 10)")
Ở ví dụ trên, biểu thức n := len(s)
gán giá trị của len(s)
cho biến n
, đồng thời trả về giá trị đó để so sánh với 10
.
Dưới đây là một số ví dụ khác:
Ví dụ 1: Sử dụng Walrus operator để kiểm tra giá trị trả về từ một hàm
# Kiểm tra xem chuỗi có chứa từ "Python" không
while (s := input("Enter a string: ")) and ("Python" not in s):
print("The string must contain the word 'Python'")
Trong ví dụ này, chúng ta sử dụng Walrus operator để gán giá trị trả về từ hàm input()
vào biến s
đồng thời kiểm tra xem chuỗi đó có chứa từ “Python” hay không.
Ví dụ 2: Sử dụng Walrus operator để xác định phần tử đầu tiên của một danh sách
# In ra phần tử đầu tiên của danh sách
if (a := [1, 2, 3]):
print(a[0])
Trong ví dụ này, chúng ta sử dụng Walrus operator để gán danh sách [1, 2, 3]
vào biến a
, đồng thời in ra phần tử đầu tiên của danh sách đó.
Ví dụ 3: Sử dụng Walrus operator để giảm thiểu số lần gọi hàm
# Đọc file và in ra nội dung
with open("myfile.txt") as f:
while (line := f.readline()):
print(line.strip())
Trong ví dụ này, chúng ta sử dụng Walrus operator để gán giá trị của f.readline()
vào biến line
, đồng thời in ra giá trị đó và giảm thiểu số lần gọi hàm f.readline()
.
Ví dụ 4: Ví dụ sử dụng trong vòng lặp:
# In ra các số lẻ từ 1 đến 9
while (n := int(input("Nhập số n: "))) != 0:
if n % 2 == 0:
print("Số vừa nhập là số chẵn!")
else:
print(f"{n} là số lẻ")
Trong ví dụ này, chúng ta sử dụng Walrus Operator để gán giá trị được nhập vào biến n trong khi đồng thời kiểm tra nếu giá trị nhập vào là 0 thì kết thúc vòng lặp.
Ví dụ 5: Ví dụ sử dụng trong việc kiểm tra độ dài của chuỗi:
# Kiểm tra độ dài của chuỗi và in ra kết quả nếu độ dài lớn hơn 5
if (length := len(input("Nhập chuỗi: "))) > 5:
print(f"Chuỗi nhập vào có độ dài {length} lớn hơn 5")
Trong ví dụ này, chúng ta sử dụng Walrus Operator để gán giá trị của độ dài chuỗi vào biến length trong khi đồng thời kiểm tra xem độ dài đó có lớn hơn 5 hay không, và in ra thông báo tương ứng nếu độ dài lớn hơn 5.
Ví dụ 6: Ví dụ sử dụng trong việc xử lý file:
# Đọc file và in ra nội dung file
with open(file_name := "example.txt") as file:
print(f"Đọc nội dung file {file_name}:")
print(file.read())
Trong ví dụ này, chúng ta sử dụng Walrus Operator để gán tên file “example.txt” vào biến file_name trong khi đồng thời mở file đó và in ra nội dung của file.