1. Toán tử In-place trong Python | Phần 1 (iadd(), isub(), iconcat()…)

Ngôn ngữ Python có cung cấp các phương thức (hàm) để thực hiện các phép toán tại chỗ (inplace operations), tức là, ta có thể thực hiện cả phép gán và phép tính toán trong cùng một câu lệnh duy nhất bằng cách sử dụng một module có tên là “operator”. Ví dụ:

x += y is equivalent to x = operator.iadd(x, y)

Một số hàm toán tử tại chỗ quan trọng là:

1. iadd(): Hàm này được sử dụng để gán và cộng giá trị hiện tại. Hàm này sẽ thực hiện phép toán “a+=b”.  Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple (tức là, giả sử ta không thể cộng hai đối tượng thuộc kiểu tuple để thu được một giá trị nào đó => kiểu tuple được coi là immutable).

2. iconcat(): Hàm này được sử dụng để nối một chuỗi vào phía cuối của chuỗi khác.


# Python code to demonstrate the working of  
# iadd() and iconcat() 
  
# importing operator to handle operator operations 
import operator 
  
# using iadd() to add and assign value 
x = operator.iadd(2, 3); 
  
# printing the modified value 
print ("The value after adding and assigning : ", end="") 
print (x) 
  
# initializing values 
y = "geeks"
  
z = "forgeeks"
  
# using iconcat() to concat the sequences 
y = operator.iconcat(y, z) 
  
# using iconcat() to concat sequences  
print ("The string after concatenation is : ", end="") 
print (y) 

Kết quả in ra là:

The value after adding and assigning : 5
The string after concatenation is : geeksforgeeks

3. isub(): Hàm này được sử dụng để gán và trừ đi giá trị hiện tại. Hàm này sẽ thực hiện phép toán “a-=b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple (tức là, giả sử ta không thể cộng hai đối tượng thuộc kiểu tuple để thu được một giá trị nào đó => kiểu tuple được coi là immutable).  

4. imul(): Hàm này được sử dụng để gán và nhân giá trị hiện tại (với một số nào đó ở bên vế phải). Hàm này sẽ thực hiện phép toán “a*=b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple. 


# Python code to demonstrate the working of  
# isub() and imul() 
  
# importing operator to handle operator operations 
import operator 
  
# using isub() to subtract and assign value 
x = operator.isub(2, 3); 
  
# printing the modified value 
print ("The value after subtracting and assigning : ", end="") 
print (x) 
  
# using imul() to multiply and assign value 
x = operator.imul(2, 3); 
  
# printing the modified value 
print ("The value after multiplying and assigning : ", end="") 
print (x) 

Kết quả in ra là:

The value after subtracting and assigning : -1
The value after multiplying and assigning : 6

5. itruediv(): Hàm này được sử dụng để gán và chia giá trị hiện tại. Hàm này sẽ thực hiện phép toán “a/=b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.

6. imod(): Hàm này được sử dụng để gán và trả về số dư (remainder). Hàm này sẽ thực hiện phép toán “a%=b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.


# Python code to demonstrate the working of  
# itruediv() and imod() 
  
# importing operator to handle operator operations 
import operator 
  
# using itruediv() to divide and assign value 
x = operator.itruediv(10, 5); 
  
# printing the modified value 
print ("The value after dividing and assigning : ", end="") 
print (x) 
  
# using imod() to modulus and assign value 
x = operator.imod(10, 6); 
  
# printing the modified value 
print ("The value after modulus and assigning : ", end="") 
print (x) 

Kết quả in ra là:

The value after dividing and assigning : 2.0
The value after modulus and assigning : 4

2. Toán tử In-place trong Python | Phần 2 (ixor(), iand(), ipow()…)

Phần này sẽ trình bày thêm về các hàm toán tử In-place thường dùng (toán tử tại chỗ – vì sao lại gọi chúng với cái tên này, các bạn hãy đọc ở phần trước nhé).

1. ixor(): Hàm này được sử dụng để gán và thực hiện phép xor giá trị hiện tại ở vế trái (với một giá trị nào đó ở vế phải). Hàm này sẽ thực hiện phép toán “a^ = b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.

2. ipow(): Hàm này được sử dụng để gán và thực hiện phép lũy thừa giá trị hiện tại ở vế trái (với số mũ là một giá trị nào đó ở vế phải). Hàm này sẽ thực hiện phép toán “a ** = b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

# Python code to demonstrate the working of  
# ixor() and ipow() 
  
# importing operator to handle operator operations 
import operator 
  
# using ixor() to exclusive or and assign value 
x = operator.ixor(10,5); 
  
# printing the modified value 
print ("The value after xoring and assigning : ",end="") 
print (x) 
  
# using ipow() to exponentiate and assign value 
x = operator.ipow(5,4); 
  
# printing the modified value 
print ("The value after exponentiating and assigning : ",end="") 
print (x) 

Kết quả in ra là:

The value after xoring and assigning : 15
The value after exponentiating and assigning : 625

3. iand(): Hàm này được sử dụng để gán và thực hiện phép logic end trên từng bit của giá trị hiện tại ở vế trái (với từng bit của giá trị nào đó ở vế phải). Hàm này sẽ thực hiện phép toán “a &= b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.

4. ior(): Hàm này được sử dụng để gán và thực hiện phép logic or trên từng bit của giá trị hiện tại ở vế trái (với từng bit của giá trị nào đó ở vế phải). Hàm này sẽ thực hiện phép toán “a |= b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.


# Python code to demonstrate the working of  
# ior() and iand() 
  
# importing operator to handle operator operations 
import operator 
  
# using ior() to or, and assign value 
x = operator.ior(10,5); 
  
# printing the modified value 
print ("The value after bitwise or, and assigning : ",end="") 
print (x) 
  
# using iand() to and, and assign value 
x = operator.iand(5,4); 
  
# printing the modified value 
print ("The value after bitwise and, and assigning : ",end="") 
print (x) 

Kết quả in ra là:

The value after bitwise or, and assigning : 15
The value after bitwise and, and assigning : 4

5. ilshift(): Hàm này được sử dụng để gán và thực hiện phép dịch trái bit trên giá trị hiện tại – đối số đầu tiên được truyền vào hàm, với số lần dịch bit được chỉ định bởi đối số thứ hai được truyền vào hàm. Hàm này sẽ thực hiện phép toán “a |<<= b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.

6. irshift(): Hàm này được sử dụng để gán và thực hiện phép dịch phải bit trên giá trị hiện tại – đối số đầu tiên được truyền vào hàm, với số lần dịch bit được chỉ định bởi đối số thứ hai được truyền vào hàm. Hàm này sẽ thực hiện phép toán “a |>>= b”. Thao tác gán sẽ không được thực hiện trong trường hợp biến container (là biến chứa giá trị, nằm ở vế trái) thuộc các kiểu dữ liệu bất biến – immutable (không thể thay đổi) như kiểu string, kiểu number, và kiểu tuple.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

# Python code to demonstrate the working of  
# ilshift() and irshift() 
  
# importing operator to handle operator operations 
import operator 
  
# using ilshift() to bitwise left shift and assign value 
x = operator.ilshift(8,2); 
  
# printing the modified value 
print ("The value after bitwise left shift and assigning : ",end="") 
print (x) 
  
# using irshift() to bitwise right shift and assign value 
x = operator.irshift(8,2); 
  
# printing the modified value 
print ("The value after bitwise right shift and assigning : ",end="") 
print (x) 

Kết quả:

The value after bitwise left shift and assigning : 32
The value after bitwise right shift and assigning : 2

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!