ตัวดำเนินการ (Operators) ในภาษา Python

ตัวดำเนินการ (Operators) เป็นสัญญลักษณ์ (symbols) ที่ใช้เพื่อดำเนินการ (manipulate) ต่อตัวแปร (variable) หรือค่าคงที่ (constant) เพื่อให้ได้ผลลัพธ์ (result) ที่เป็นไปตามที่ต้องการ โดยจะแบ่งออกเป็นหลายประเภท ได้แก่

  • ตัวดำเนินการเลขคณิต (Arithmetic Operators)
  • ตัวดำเนินการเปรียบเทียบ (Comparison Operators)
  • ตัวดำเนินการทางตรรกะ (Logical Operators)
  • ตัวดำเนินการแบบทำซ้ำ (Assignment Operators)
  • ตัวดำเนินการแบบทำซ้ำแบบขยาย (Augmented Assignment Operators)
  • ตัวดำเนินการแบบตรรกะแบบต่อเนื่อง (Bitwise Operators)
  • ตัวดำเนินการเงื่อนไข (Identity Operators)
  • ตัวดำเนินการช่วง (Membership Operators)

โดย Python รองรับตัวปฏิบัติการเหล่านี้และมีวิธีการใช้งานที่แตกต่างกันไปในแต่ละประเภท ดังนี้

ตัวดำเนินการเลขคณิต (Arithmetic Operators)

เป็นตัวดำเนินการทางคณิตศาสตร์ที่ใช้ในการดำเนินการบนตัวเลข โดยสามารถใช้ได้กับตัวเลขทุกชนิดในภาษา Python และประกอบด้วยดังนี้

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
+ การบวกเลข 2 + 3 = 5
การลบเลข 5 – 3 = 2
* การคูณเลข 2 * 3 = 6
/ การหารเลข 10 / 2 = 5.0
% การหารเอาเศษ 10 % 3 = 1
** การยกกำลังเลข 2 ** 3 = 8
// การหารเลขแบบปัดลง 10 // 3 = 3

โดยทั่วไปแล้ว เมื่อเราดำเนินการคำนวณกับตัวเลขในภาษา Python โปรแกรมจะส่งค่าผลลัพธ์ออกมาในรูปของตัวเลข ยกเว้นการหารเลข ถ้าเราใช้ตัวดำเนินการ / โปรแกรมจะส่งค่าผลลัพธ์ออกมาในรูปของทศนิยม แต่ถ้าเราใช้ตัวดำเนินการ // โปรแกรมจะปัดเศษลงแล้วส่งค่าผลลัพธ์ออกมาในรูปของจำนวนเต็ม

ตัวอย่าง การใช้งานตัวดำเนินการเลขคณิต (Arithmetic Operators) ดังนี้

# Addition
x = 5
y = 3
print(x + y)  # Output: 8

# Subtraction
x = 5
y = 3
print(x - y)  # Output: 2

# Multiplication
x = 5
y = 3
print(x * y)  # Output: 15

# Division
x = 6
y = 3
print(x / y)  # Output: 2.0

# Floor Division
x = 6
y = 4
print(x // y)  # Output: 1

# Modulus
x = 5
y = 2
print(x % y)  # Output: 1

# Exponentiation
x = 2
y = 3
print(x ** y)  # Output: 8

ในตัวอย่างนี้เราใช้ตัวแปร x และ y เพื่อแสดงตัวอย่างของการใช้งานตัวดำเนินการเลขคณิตใน Python โดยเราใช้ตัวดำเนินการ + สำหรับการบวก - สำหรับการลบ * สำหรับการคูณ / สำหรับการหาร // สำหรับการหารเอาส่วน % สำหรับการหารเอาเศษ และ ** สำหรับการยกกำลัง

ตัวดำเนินการเปรียบเทียบ (Comparison Operators)

ในภาษา Python จะใช้สำหรับเปรียบเทียบค่าของตัวแปรหรือค่าคงที่ ซึ่งจะคืนค่าเป็น Boolean คือ True หรือ False ตามผลลัพธ์ของการเปรียบเทียบ โดยมีตัวดำเนินการเปรียบเทียบดังนี้

ตัวดำเนินการ คำอธิบาย
== เท่ากับ
!= ไม่เท่ากับ
> มากกว่า
< น้อยกว่า
>= มากกว่าหรือเท่ากับ
<= น้อยกว่าหรือเท่ากับ

ตัวดำเนินการเปรียบเทียบในภาษา Python มีดังนี้

  • > (มากกว่า) : เช็คว่าค่าด้านซ้ายมากกว่าค่าด้านขวาหรือไม่
  • < (น้อยกว่า) : เช็คว่าค่าด้านซ้ายน้อยกว่าค่าด้านขวาหรือไม่
  • == (เท่ากับ) : เช็คว่าค่าด้านซ้ายเท่ากับค่าด้านขวาหรือไม่
  • != (ไม่เท่ากับ) : เช็คว่าค่าด้านซ้ายไม่เท่ากับค่าด้านขวาหรือไม่
  • >= (มากกว่าหรือเท่ากับ) : เช็คว่าค่าด้านซ้ายมากกว่าหรือเท่ากับค่าด้านขวาหรือไม่
  • <= (น้อยกว่าหรือเท่ากับ) : เช็คว่าค่าด้านซ้ายน้อยกว่าหรือเท่ากับค่าด้านขวาหรือไม่

ตัวอย่างการใช้งานตัวดำเนินการเปรียบเทียบใน Python ดังนี้

x = 10
y = 5

print(x > y)   # True
print(x < y)   # False
print(x == y)  # False
print(x != y)  # True
print(x >= y)  # True
print(x <= y)  # False

ตัวดำเนินการทางตรรกะ (Logical Operators)

เป็นตัวดำเนินการที่ใช้ในการเปรียบเทียบเงื่อนไขหลายๆ เงื่อนไขในการตัดสินใจว่าสอดคล้องกับเงื่อนไขที่กำหนดหรือไม่ โดยในภาษา Python มีตัวดำเนินการทางตรรกะดังนี้

  • and: การ and จะให้ผลเป็น True เมื่อเงื่อนไขทั้งสองเป็นจริง หรือ False เมื่อมีอย่างน้อยหนึ่งเงื่อนไขเป็นเท็จ
  • or: การ or จะให้ผลเป็น True เมื่อมีอย่างน้อยหนึ่งเงื่อนไขเป็นจริง หรือ False เมื่อเงื่อนไขทั้งสองเป็นเท็จ
  • not: การ not จะสลับผลลัพธ์จาก True เป็น False และจาก False เป็น True

ตัวอย่างการใช้งานตัวดำเนินการทางตรรกะ (Logical Operators) ในภาษา Python ดังนี้

a = 10
b = 5
c = 3

# ตัวดำเนินการ and
if a > b and a > c:
    print("a is the largest number")

# ตัวดำเนินการ or
if a > b or a > c:
    print("At least one of the conditions is true")

# ตัวดำเนินการ not
if not b > a:
    print("b is not greater than a")

ผลลัพธ์ที่ได้จากโค้ดข้างต้นคือ

a is the largest number
At least one of the conditions is true
b is not greater than a

ตัวดำเนินการแบบทำซ้ำ (Assignment Operators)

เป็นตัวดำเนินการที่ใช้ในการกำหนดค่าของตัวแปร โดยจะรวมกับตัวดำเนินการเลขคณิต หรือตัวดำเนินการทางตรรกะ เพื่อลดการเขียนโค้ดที่ซ้ำซ้อน และเพิ่มความเข้าใจในการอ่านโค้ด

ตัวดำเนินการแบบทำซ้ำมีหลายแบบ ได้แก่ +=, -=, *=, /=, //=, %=, **= ซึ่งมีความหมายเหมือนกับการเขียนโค้ดในรูปแบบต่อไปนี้

  • x += y คือ x = x + y
  • x -= y คือ x = x – y
  • x *= y คือ x = x * y
  • x /= y คือ x = x / y
  • x //= y คือ x = x // y
  • x %= y คือ x = x % y
  • x **= y คือ x = x ** y

ตัวอย่าง การใช้งานตัวดำเนินการแบบทำซ้ำ คือ

x = 10
x += 5
print(x)  # 15

y = 20
y -= 5
print(y)  # 15

z = 10
z *= 2
print(z)  # 20

a = 15
a /= 3
print(a)  # 5.0

b = 7
b //= 3
print(b)  # 2

c = 10
c %= 3
print(c)  # 1

d = 2
d **= 3
print(d)  # 8

ตัวดำเนินการแบบทำซ้ำแบบขยาย (Augmented Assignment Operators)

ใช้สำหรับเพิ่มค่าและกำหนดค่าใหม่ให้กับตัวแปรในเวลาเดียวกัน โดยจะใช้ตัวดำเนินการเลขคณิตและตัวดำเนินการทางตรรกะร่วมกันกับเครื่องหมายเท่ากับ (=)

ตัวอย่างเช่น หากต้องการเพิ่มค่าของตัวแปร x ด้วยค่า 5 และกำหนดค่าใหม่ให้กับตัวแปร y ด้วยค่า 10 จะใช้ตัวดำเนินการแบบทำซ้ำแบบขยาย (Augmented Assignment Operators) ได้ดังนี้

x = 5
y = 8
x += 5 # เพิ่มค่าของ x ด้วย 5
y -= 2 # ลดค่าของ y ด้วย 2
print(x) # 10
print(y) # 6

ในตัวอย่างนี้ เมื่อใช้ x += 5 จะเป็นการเพิ่มค่า x ด้วย 5 และกำหนดค่าใหม่ให้กับตัวแปร x ด้วยผลรวม ซึ่งเป็น 10 และ y -= 2 จะเป็นการลดค่า y ด้วย 2 และกำหนดค่าใหม่ให้กับตัวแปร y ด้วยผลต่าง ซึ่งเป็น 6

ตัวดำเนินการแบบตรรกะแบบต่อเนื่อง (Bitwise Operators)

ใช้ในการดำเนินการทางตรรกะกับตัวเลขแบบทวิภาค (bitwise) ซึ่งเป็นการดำเนินการที่ใช้เลขฐานสองในการแสดงผล และใช้ตัวดำเนินการแบบตรรกะเพื่อดำเนินการกับแต่ละตำแหน่ง (bit) ของตัวเลขตัวดำเนินการแบบตรรกะแบบต่อเนื่อง (bitwise operators) ที่ใช้ได้ในภาษา Python มีดังนี้

  • & (and)
  • | (or)
  • ^ (exclusive or)
  • ~ (not)
  • << (left shift)
  • >> (right shift)
ตัวดำเนินการแบบตรรกะแบบต่อเนื่องทั้งหมด 6 ตัว ได้แก่
  • & (bitwise and): ดำเนินการทางตรรกะแบบ and กับแต่ละตำแหน่งของตัวเลข ผลลัพธ์จะเป็น 1 ก็ต่อเมื่อทั้งสองตำแหน่งเป็น 1
  • | (bitwise or): ดำเนินการทางตรรกะแบบ or กับแต่ละตำแหน่งของตัวเลข ผลลัพธ์จะเป็น 1 ก็ต่อเมื่ออย่างน้อยหนึ่งตำแหน่งเป็น 1
  • ^ (bitwise xor): ดำเนินการทางตรรกะแบบ xor กับแต่ละตำแหน่งของตัวเลข ผลลัพธ์จะเป็น 1 ก็ต่อเมื่อตำแหน่งที่เท่ากันของตัวเลขทั้งสองไม่เหมือนกัน
  • ~ (bitwise not): ดำเนินการทางตรรกะแบบ not กับแต่ละตำแหน่งของตัวเลข ผลลัพธ์จะเป็นการเปลี่ยน 0 เป็น 1 และ 1 เป็น 0
  • << (left shift): ดึงตำแหน่ง bit ทั้งหมดของตัวเลขไปทางซ้ายตามจำนวนครั้งที่ระบุ ตำแหน่ง bit ที่ว่างจะเติมด้วย 0
  • >> (right shift): ดึงตำแหน่ง bit ทั้งหมดของตัวเลขไปทางขวาตามจำนวนครั้งที่ระบุ ตำแหน่ง bit ที่ว่างจะเติมด้วย 0

เราสามารถใช้ตัวดำเนินการแบบตรรกะเพื่อจัดการกับตัวเลขที่ถูกแปลงเป็นแบบทวิภาค (bit) เช่นกัน ในการเขียนโปรแกรม สามารถนำมาใช้ในการจัดการกับข้อมูลแบบ binary ได้ เช่น การเข้ารหัสและถอดรหัส การจัดการกับข้อมูลที่อยู่ในรูปแบบแพ็คเกจ และอื่นๆ อีกมากมาย

ตัวดำเนินการแบบตรรกะแบบต่อเนื่อง (Bitwise Operators) เป็นตัวดำเนินการที่ใช้กับตัวเลขฐานสอง (binary) โดยจะทำการคำนวณค่าของแต่ละ bit ของตัวเลขที่ถูกกำหนดมา โดยที่ bit 0 แทนตำแหน่งหลักหน่วย, bit 1 แทนตำแหน่งหลักสิบ, bit 2 แทนตำแหน่งหลักร้อย และอื่น ๆ ตามลำดับไปเรื่อยๆ

ตัวอย่างเช่น 5 & 3 = 1 วิธีการถ้าต้องการหาค่า bitwise AND ของเลข 5 (binary 101) และเลข 3 (binary 011) จะได้ผลลัพธ์เป็น 1 (binary 001) 

การใช้ & (bitwise AND) เพื่อคำนวณค่า bitwise AND ของเลขฐานสอง สามารถทำได้ดังนี้
x = 5  # 0101
y = 3  # 0011

result = x & y  # 0001

print(result)  # 1

 

การใช้ | (bitwise OR) เพื่อคำนวณค่า bitwise OR ของเลขฐานสอง สามารถทำได้ดังนี้

x = 5  # 0101
y = 3  # 0011

result = x | y  # 0111

print(result)  # 7

 

การใช้ ^ (bitwise XOR) เพื่อคำนวณค่า bitwise XOR ของเลขฐานสอง สามารถทำได้ดังนี้

x = 5  # 0101
y = 3  # 0011

result = x ^ y  # 0110

print(result)  # 6

 

การใช้ ~ (bitwise NOT) เพื่อคำนวณค่า bitwise NOT ของเลขฐานสอง สามารถทำได้ดังนี้

x = 5  # 0101

result = ~x  # 1010 (หรือ -6 ในฐานสิบ)

print(result)  # -6

 

การใช้ << (bitwise Left Shift) เพื่อคำนวณค่า bitwise left shift ของเลขฐานสอง

x = 0b1100   # 12 in binary
y = x << 2   # bitwise left shift x by 2 bits

print(bin(y))  # output: 0b110000 (48 in binary)

จากตัวอย่างนี้ เรากำหนดค่าตัวแปร x เป็น 12 ในระบบฐานสอง (0b1100) และกำหนดค่าตัวแปร y เป็นการทำ bitwise left shift ของ x ไปทางซ้าย 2 ตำแหน่ง ซึ่งจะได้ค่าเท่ากับ 48 ในระบบฐานสอง (0b110000) ซึ่งเป็นผลลัพธ์ที่แสดงออกมาในระบบฐานสองด้วยฟังก์ชัน bin() ซึ่งจะแปลงตัวเลขเป็นเลขฐานสองและเพิ่มคำนำหน้า “0b” เข้าไปด้วย

 

การใช้ >> (bitwise Right Shift) เพื่อคำนวณค่า bitwise right shift ของเลขฐานสอง

x = 0b110101  # เลขฐานสอง 110101
y = x >> 2    # เลื่อนตำแหน่งไปทางขวาสองตำแหน่ง

print(bin(y)) # แปลงเลขฐานสองให้เป็นสตริงแล้วพิมพ์ค่าออกมา ควรได้ 0b001101

จากตัวอย่าง ค่าตัวแปร x เป็นเลขฐานสอง 110101 หลังจากนั้นทำการเลื่อนตำแหน่งไปทางขวาสองตำแหน่ง โดยใช้ตัวดำเนินการ >> จากนั้นเก็บผลลัพธ์ลงในตัวแปร y ซึ่งควรจะได้เป็นเลขฐานสอง 001101 และจะถูกแปลงให้เป็นสตริงแล้วพิมพ์ค่าออกมาด้วยฟังก์ชัน bin() ซึ่งจะแสดงผลลัพธ์เป็น 0b001101

ตัวดำเนินการเงื่อนไข (Identity Operators)

เป็นตัวดำเนินการที่ใช้ในการเปรียบเทียบว่าตัวแปรสองตัวมีค่าเท่ากันหรือไม่ โดยตรวจสอบจาก identity (ตัวอ้างอิง) ของตัวแปร ซึ่งในภาษา Python จะใช้คีย์เวิร์ด is และ is not เป็นตัวดำเนินการเงื่อนไขที่ใช้ในการทำงานกับตัวแปรชนิด object เท่านั้น โดยเมื่อเราใช้ is เพื่อเปรียบเทียบตัวแปรสองตัว ถ้าค่า identity เท่ากัน จะคืนค่าเป็น True แต่ถ้าไม่เท่ากันจะคืนค่าเป็น False ในกรณีของ is not ก็จะกลับค่าตรงกันข้ามกับ is คือ จะคืนค่า False เมื่อ identity เท่ากัน และคืนค่า True เมื่อ identity ไม่เท่ากัน

ตัวอย่างการใช้งานตัวดำเนินการเงื่อนไขเช่น is และ is not ใน Python ดังนี้

x = [1, 2, 3]
y = [1, 2, 3]
z = x

print(x is z)    # True เพราะ x และ z มี identity เดียวกัน
print(x is y)    # False เพราะ x และ y มี identity ต่างกัน
print(x is not y)  # True เพราะ x และ y มี identity ต่างกัน
print(x is not z)  # False เพราะ x และ z มี identity เดียวกัน

จากตัวอย่าง ค่า x เป็น list [1, 2, 3] และมี identity เดียวกันกับ z ซึ่งเป็นตัวแปรที่ชี้ไปยัง list เดียวกันกับ x ในขณะเดียวกัน ตัวแปร y เก็บค่า list เดียวกับ x แต่มี identity ต่างกัน ดังนั้นการเปรียบเทียบ x is z

ตัวดำเนินการช่วง (Membership Operators)

เป็นตัวดำเนินการที่ใช้ในการตรวจสอบว่ามีข้อมูลใน sequence หรือไม่ โดยมีสองตัวดำเนินการคือ in และ not in

  • in จะเป็นจริง (True) ถ้ามีค่าที่ต้องการอยู่ใน sequence
  • not in จะเป็นจริง (True) ถ้าไม่มีค่าที่ต้องการอยู่ใน sequence

Sequence ที่ใช้กับตัวดำเนินการช่วง จะมีได้หลายประเภท เช่น String, List, Tuple, Set

ตัวอย่าง การใช้งานตัวดำเนินการช่วง (Membership Operators) ดังนี้

fruits = ["apple", "banana", "cherry"]

# ตรวจสอบว่ามี "banana" อยู่ใน fruits หรือไม่
if "banana" in fruits:
  print("Yes, 'banana' is in the fruits list")

# ตรวจสอบว่าไม่มี "orange" อยู่ใน fruits หรือไม่
if "orange" not in fruits:
  print("No, 'orange' is not in the fruits list")

ผลลัพธ์ที่ได้

Yes, 'banana' is in the fruits list
No, 'orange' is not in the fruits list