Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ออปเปอเรเตอร์มาตรฐานของ Python เป็นฟังก์ชัน (operator)

ในการเขียนโปรแกรม ออปเปอเรเตอร์โดยทั่วไปเป็นสัญลักษณ์ (คีย์) ที่กำหนดไว้ล่วงหน้าเพื่อดำเนินการบางอย่าง เช่น การบวก, ลบ, เปรียบเทียบ ฯลฯ Python มีชุดการดำเนินการสำเร็จรูปขนาดใหญ่ แบ่งหมวดหมู่ต่างๆ เช่น arithmetic, comparison, bit-wise, membership ฯลฯ

โมดูล operator ในไลบรารี Python ประกอบด้วยฟังก์ชันที่สอดคล้องกับออปเปอเรเตอร์สำเร็จรูป ชื่อของฟังก์ชันคล้ายกับประเภทของออปเปอเรเตอร์ที่สอดคล้องกัน ตัวอย่างเช่น ฟังก์ชัน add() ในโมดูล operator สอดคล้องกับออปเปอเรเตอร์ +

คลาส Object ของ Python มีเมธอด dunder (underscore คู่ นำหน้าและท้ายชื่อ) ที่สอดคล้องกับสัญลักษณ์ออปเปอเรเตอร์ เมธอด dunder เหล่านี้สามารถโอเวอร์โหลดได้อย่างเหมาะสมในคลาสที่ผู้ใช้กำหนด เพื่อนำการโอเวอร์โหลดออปเปอเรเตอร์ไปใช้ โมดูล operator ยังประกอบด้วยฟังก์ชัน dunder ที่สอดคล้องกัน ตัวอย่างเช่น add() และ __add__() ทั้งคู่ดำเนินการของสัญลักษณ์ +

เริ่มต้นด้วยการนำเข้าฟังก์ชันจากโมดูล operator:

>>> from operator import *

เพื่อเรียนรู้ฟังก์ชันที่สอดคล้องกับออปเปอเรเตอร์คณิตศาสตร์ เริ่มต้นตัวแปร 2 ตัว:

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

add(), sub() และ mul() สอดคล้องกับออปเปอเรเตอร์ +, - และ * สัญลักษณ์ / ของการหาร ถูกนำไปใช้โดยฟังก์ชัน 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

ออปเปอเรเตอร์คณิตศาสตร์อื่นๆ %, ** และ // ถูกนำไปใช้โดย mod(), pow() และ floordiv() จากโมดูล 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

ออปเปอเรเตอร์ตรรกะ <, <=, >, >=, == และ != ถูกนำไปใช้โดย lt(), le(), gt(), ge(), eq() และ ne() ตามลำดับ:

>>> 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

ฟังก์ชันทำงานกับลำดับ (sequences)

ออปเปอเรเตอร์สำเร็จรูปของ Python in, + (concatenation), และ del ถูกนำไปใช้โดย contains(), concat(), delitem() ตามลำดับ สำหรับออปเปอเรเตอร์การกำหนดค่าดัชนี seq[x] = y ใช้ฟังก์ชัน setitem() สำหรับรับค่าของ seq[x] ใช้ฟังก์ชัน getitem()

>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> a + b  # sequence concatenation
[1, 2, 3, 'a', 'b', 'c']
>>> concat(a, b)
[1, 2, 3, 'a', 'b', 'c']
>>> contains(a, '2')  # implements in operator
False
>>> contains(a, 2)
True
>>> 2 in a
True
>>> b[1] = 'x'  # index assignment implemented by setitem()
>>> b
['a', 'x', 'c']
>>> setitem(b, 1, 'b')
>>> b
['a', 'b', 'c']
>>> a[1]  # fetching value at index – implemented by getitem()
2
>>> getitem(a, 1)
2
>>> del b[2]  # deleting element at index. Corresponding function is delitem()
>>> b
['a', 'b']
>>> delitem(a, 2)
>>> a
[1, 2]

ออปเปอเรเตอร์ที่ดำเนินการกำหนดค่าและคำนวณในขั้นตอนเดียว เรียกว่า in-place operator ออปเปอเรเตอร์ in-place ของ Python ถูกนำไปใช้โดยฟังก์ชันที่สอดคล้องในโมดูล operator ออปเปอเรเตอร์ += ที่ดำเนินการบวกและกำหนดค่า มีฟังก์ชันที่สอดคล้องคือ iadd() เช่นกัน ออปเปอเรเตอร์แต่ละตัวที่ขึ้นต้นด้วย 'i' จะสร้าง equivalent แบบ in-place

In-place addition

>>> a = 10
>>> b = 20
>>> a = iadd(a, b)  # equivalent to a += b
>>> a
30

In-place subtraction

>>> a = 10
>>> b = 20
>>> a = isub(a, b)  # equivalent to a -= b
>>> a
-10

In-place multiplication

>>> a = 10
>>> b = 20
>>> a = imul(a, b)  # equivalent to a *= b
>>> a
200

In-place division

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

โมดูล operator ยังประกอบด้วยฟังก์ชันที่นำไปใช้กับออปเปอเรเตอร์ bit-wise มาตรฐาน:

>>> and_(10, 2)  # equivalent to 10 & 2
2
>>> or_(10, 2)   # equivalent to 10 | 2
10
>>> xor(10, 2)   # equivalent to 10 ^ 2
8
>>> lshift(10, 2)  # equivalent to 10 << 2
40
>>> rshift(10, 2)  # equivalent to 10 >> 2
2