Toán tử Inplace trong Python
Inplace operation (phép toán tại chỗ) là phép toán trực tiếp thay đổi nội dung của một đại số tuyến tính, vectơ hoặc ma trận đã cho mà không tạo bản sao. Các toán tử giúp thực hiện loại phép toán này được gọi là inplace operator.
Hãy hiểu qua ví dụ đơn giản:
a = 9
a += 2
print(a)
Kết quả
11
Trên đây là toán tử +=. Ở đây trước tiên, a cộng 2 với giá trị a sau đó cập nhật giá trị trước đó.
Nguyên tắc trên áp dụng cho các toán tử khác nữa. Các inplace operator phổ biến là:
- +=
- -=
- *=
- /=
- %=
Nguyên tắc trên áp dụng cho các kiểu khác ngoài số, ví dụ:
language = "Python"
language += "3"
print(language)
Kết quả
Python3
Ví dụ trên của x+=y tương đương với x = operator.iadd(x,y)
Có nhiều toán tử được dùng cho inplace operations.
iadd()
Hàm này dùng để gán giá trị hiện tại và cộng chúng. Toán tử này thực hiện phép x+=y.
x = operator.iadd(9, 18)
print("Kết quả sau cộng: ", end="")
print(x)
Kết quả
Kết quả sau cộng: 27
isub()
Hàm này dùng để gán giá trị hiện tại và trừ chúng. Hàm isub() thực hiện phép x-=y.
x = operator.isub(9, 18)
print("Kết quả sau trừ: ", end="")
print(x)
Kết quả
Kết quả sau trừ: -9
imul()
Hàm này dùng để gán giá trị hiện tại và nhân chúng. Toán tử này thực hiện phép x*=y.
x = operator.imul(9, 18)
print("Kết quả sau nhân: ", end="")
print(x)
Kết quả
Kết quả sau nhân: 162
itruediv()
Hàm này dùng để gán giá trị hiện tại và chia chúng. Toán tử này thực hiện phép x/=y.
x = operator.itruediv(9, 18)
print("Kết quả sau chia: ", end="")
print(x)
Kết quả
Kết quả sau chia: 0.5
imod()
Hàm này dùng để gán giá trị hiện tại và chia lấy phần dư. Toán tử này thực hiện phép x %=y.
x = operator.imod(9, 18)
print("Kết quả sau modulus: ", end="")
print(x)
Kết quả
Kết quả sau modulus: 9
iconcat()
Hàm này dùng để nối hai chuỗi.
x = "Tutorials"
y = "Point"
str1 = operator.iconcat(x, y)
print("Sau khi nối: ", end="")
print(str1)
Kết quả
Sau khi nối: TutorialsPoint
ipow()
Hàm này tương đương với x **=y.
x = operator.ipow(2, 6)
print("Kết quả sau lũy thừa: ", end="")
print(x)
Kết quả
Kết quả sau lũy thừa: 64
Toán tử Standard (Standard Operators)
Toán tử là các cấu trúc có thể thao tác giá trị của toán hạng (operands).
Ví dụ trong biểu thức: 9+18 = 27, ở đây 9 và 18 là operands và + được gọi là operator.
Các loại Toán tử
Ngôn ngữ Python hỗ trợ các loại toán tử sau:
Arithmetic Operators (Toán tử số học): (ví dụ: +, -, *, /, %, **, //)
Comparison Operators (Toán tử so sánh): (ví dụ: "==", "!=", "<>", ">", "<", ">=", "<=")
Assignment Operators (Toán tử gán): (ví dụ: "=", "+=", "-=", "*=", "/=", "%=", "**=", "//=")
Logical Operators (Toán tử logic): (ví dụ: "Logical AND", "Logical OR", "Logical NOT")
- Bitwise Operators (Toán tử bitwise): (ví dụ: "|", "&", "^", "~", "<<", ">>")
Membership Operators (Toán tử thành viên): (ví dụ: in, not in)
Identity Operators (Toán tử nhận diện): (ví dụ: is, is not)
Ánh xạ Toán tử sang Hàm (Mapping Operators to Functions)
Dưới đây là bảng cho thấy cách các phép toán trừu tượng tương ứng với ký hiệu toán tử trong cú pháp Python và các hàm trong module operator.
| Phép toán | Cú pháp | Hàm |
|---|---|---|
| Addition (Cộng) | x + y | add(x, y) |
| Concatenation (Nối) | Seq1 + seq2 | Concat(seq1, seq2) |
| Containment Test (Kiểm tra chứa) | Obj in seq | Contains(seq, obj) |
| Division (Chia) | x / y | Truediv(x, y) |
| Division (Chia nguyên) | x // y | Floordiv(x, y) |
| Bitwise And | x & y | And_(x, y) |
| Bitwise Exclusive Or | x ^ y | Xor(x, y) |
| Bitwise Inversion | ~x | Invert(x) |
| Bitwise Or | x|y | or_(x,y) |
| Exponentiation (Lũy thừa) | x ** y | pow(x, y) |
| Identity (Đồng nhất) | x is y | is_(x, y) |
| Identity (Khác) | x is not y | is_not(x, y) |
| Indexed Assignment (Gán chỉ mục) | obj[k] = v | setitem(obj, k, v) |
| Indexed deletion (Xóa chỉ mục) | del obj[k] | delitem(obj, k) |
| Indexing (Chỉ mục) | Obj[k] | Getitem(obj,k) |
| Left shift (Dịch trái) | a << b | Lshift(a,b) |
| Modulo (Modulo) | a % b | Mod(a, b) |
| Multiplication (Nhân) | x*y | mul(x*y) |
| Matrix multiplication (Nhân ma trận) | x@b | Matmul(x, y) |
| Negation (Phủ định số học) | -a | Neg(a) |
| Negation (Phủ định logic) | not a | not_(a) |
| Positive (Dương) | +a | pos(a) |
| Right shift (Dịch phải) | a>>b | Rshift(a,b) |
| Slice Assignment (Gán slice) | Seq[i:j] =values | Setitem(seq, slice(i,j), values) |
| Slice deletion (Xóa slice) | Del seq[i:j] | Delitem(seq, slice(i,j)) |
| Slicing (Cắt slice) | Seq[i:j] | Getitem(seq, slice(I, j)) |
| String formatting (Định dạng chuỗi) | S % obj | Mod(s, obj) |
| Subtraction (Trừ) | a-b | Sub(a,b) |
| Truth Test (Kiểm tra chân) | obj | truth(obj) |
| Ordering (Sắp xếp) | a<b | lt(a,b) |
| Ordering | a<=b | le(a,b) |
| Equality (Bằng nhau) | a == b | eq(a,b) |
| Difference (Khác nhau) | a != b | ne(a,b) |
| Ordering | a >= b | ge(a, b) |
| Ordering | a > b | gt(a, b) |