Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Các toán tử chuẩn của Python dưới dạng hàm (operator)


Trong lập trình, toán tử thường là một ký hiệu (phím) được định nghĩa trước để thực hiện một phép toán nhất định như cộng, trừ, so sánh, v.v. Python có một tập hợp lớn các phép toán tích hợp sẵn chia thành các loại khác nhau như số học, so sánh, bitwise, thành viên, v.v.

Mô-đun operator trong thư viện Python bao gồm các hàm tương ứng với các toán tử tích hợp sẵn. Tên các hàm tương tự loại toán tử tương ứng. Ví dụ, hàm add() trong mô-đun operator tương ứng với toán tử +.

Lớp Object của Python có các phương thức dunder (dấu gạch dưới kép trước và sau tên) tương ứng với các ký hiệu toán tử. Các phương thức dunder này có thể được nạp chồng thích hợp trong các lớp do người dùng định nghĩa để triển khai nạp chồng toán tử. Mô-đun operator cũng bao gồm các hàm dunder tương ứng. Ví dụ, cả add() và __add__() đều thực hiện phép toán của ký hiệu +.

Để bắt đầu, hãy nhập các hàm từ mô-đun operator:

>>> from operator import *

Để học về các hàm tương ứng với toán tử số học, hai biến được khởi tạo như sau:

>>> a = 10
>>> b = 20

add(), sub() và mul() tương ứng với toán tử +, - và *. Ký hiệu / của phép chia được triển khai bởi hàm truediv().

>>> add(a, b)
30
>>> a + b
30
>>> sub(a, b)
-10
>>> a - b
-10
>>> mul(a, b)
200
>>> a * b
200
>>> truediv(a, b)
0.5
>>> a / b
0.5

Các toán tử số học khác %, ** và // được triển khai bởi hàm mod(), pow() và floordiv() từ mô-đun operator.

>>> a = 5
>>> b = 3
>>> a % b
2
>>> mod(a, b)
2
>>> a ** b
125
>>> pow(a, b)
125
>>> a // 2
2
>>> floordiv(a, b)
1

Các toán tử logic <, <=, >, >=, == và != được triển khai bởi hàm lt(), le(), gt(), ge(), eq() và ne() tương ứng.

>>> a = 5
>>> b = 7
>>> a < b
True
>>> lt(a, b)
True
>>> a <= b
True
>>> le(a, b)
True
>>> a > b
False
>>> gt(a, b)
False
>>> a >= b
False
>>> ge(a, b)
False
>>> a == b
False
>>> eq(a, b)
False
>>> a != b
True
>>> ne(a, b)
True

Hàm làm việc với chuỗi (sequence)

Các toán tử tích hợp sẵn của Python in, + (nối chuỗi), và del lần lượt được triển khai bởi hàm contains(), concat(), delitem(). Cho toán tử gán có chỉ số seq[x] = y, hàm setitem() được dùng. Để lấy giá trị của seq[x], hàm getitem() được dùng.

>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> a + b  # nối chuỗi
[1, 2, 3, 'a', 'b', 'c']
>>> concat(a, b)
[1, 2, 3, 'a', 'b', 'c']
>>> contains(a, '2')  # triển khai toán tử in
False
>>> contains(a, 2)
True
>>> 2 in a
True
>>> b[1] = 'x'  # gán chỉ số triển khai bởi setitem()
>>> b
['a', 'x', 'c']
>>> setitem(b, 1, 'b')
>>> b
['a', 'b', 'c']
>>> a[1]  # lấy giá trị tại chỉ số - triển khai bởi getitem()
2
>>> getitem(a, 1)
2
>>> del b[2]  # xóa phần tử tại chỉ số. Hàm tương ứng là delitem()
>>> b
['a', 'b']
>>> delitem(a, 2)
>>> a
[1, 2]

Các toán tử thực hiện gán và tính toán trong một bước gọi là toán tử tại chỗ (in-place operator). Các toán tử tại chỗ của Python được triển khai bởi các hàm tương ứng trong mô-đun operator. Toán tử += thực hiện phép cộng và gán có hàm tương ứng là iadd(). Tương tự mỗi hàm toán tử có tiền tố i tạo thành tương đương tại chỗ.

Cộng tại chỗ

>>> a = 10
>>> b = 20
>>> a = iadd(a, b)  # tương đương a += b
>>> a
30

Trừ tại chỗ

>>> a = 10
>>> b = 20
>>> a = isub(a, b)  # tương đương a -= b
>>> a
-10

Nhân tại chỗ

>>> a = 10
>>> b = 20
>>> a = imul(a, b)  # tương đương a *= b
>>> a
200

Chia tại chỗ

>>> a = 10
>>> b = 4
>>> a = itruediv(a, b)
>>> a
2.5

Mô-đun operator cũng bao gồm các hàm triển khai các toán tử bitwise chuẩn:

>>> and_(10, 2)  # tương đương 10 & 2
2
>>> or_(10, 2)   # tương đương 10 | 2
10
>>> xor(10, 2)   # tương đương 10 ^ 2
8
>>> lshift(10, 2)  # tương đương 10 << 2
40
>>> rshift(10, 2)  # tương đương 10 >> 2
2