عملگرها در پایتون از بخشهای اصلی این زبان برنامهنویسی هستند. بدون آنها نمیتوان عملیات ریاضی، مقایسهای یا منطقی را روی مقادیر و متغیرها انجام داد. هر زمان که نیاز دارید چند عدد را جمع بزنید، دو متغیر را مقایسه کنید یا شرطی را در برنامه بررسی کنید، به این نمادهای از پیش تعریفشده نیاز خواهید داشت.
تمام پردازشهای محاسباتی و تصمیمگیریهای منطقی برنامه به این نمادها وابسته است. به همین دلیل، شناخت انواع عملگرها یکی از اولین گامهای عملی در مسیر آموزش برنامه نویسی پایتون برای نوشتن کدهای کاربردی است. در این مطلب، همهی دستهبندیهای عملگرها، نحوهی نوشتار (سینتکس)، قوانین اولویت اجرا و خطاهای رایج آنها را همراه با جدول و مثالهای کد بررسی میکنیم.
عملگر (Operator) و عملوند (Operand) در پایتون چیست؟
در زبان برنامه نویسی پایتون، «عملگرها» (Operators) نمادهای خاصی هستند که عملیات حسابی یا منطقی را انجام میدهند. مقدار یا متغیری که عملگر روی آن کار میکند، «عملوند» (Operand) نام دارد. برای نمونه، در عبارت ۲ + ۳، علامت + عملگر جمع و اعداد ۲ و ۳ عملوند هستند. عدد ۵ نیز خروجی عملیات خواهد بود. عملگرها علاوه بر مقادیر ثابت، روی متغیرها کار میکنند و میتوانند یک متغیر را با یک مقدار یا دو متغیر را با یکدیگر ترکیب کنند:
sum1 = 100 + 50 # 150 (100 + 50)
sum2 = sum1 + 250 # 400 (150 + 250)
sum3 = sum2 + sum2 # 800 (400 + 400)
پایتون عملگرها را در ۷ گروه اصلی دستهبندی میکند:
- عملگرهای حسابی (Arithmetic operators)
- عملگرهای مقایسهای (Comparison operators)
- عملگرهای منطقی (Logical operators)
- عملگرهای تخصیص (Assignment operators)
- عملگرهای همانی (Identity operators)
- عملگرهای عضویت (Membership operators)
- عملگرهای بیتی (Bitwise operators)
عملگرهای حسابی در پایتون (Arithmetic Operators)
عملگرهای حسابی در پایتون محاسبات ریاضی پایه، مانند جمع، تفریق، ضرب و تقسیم را انجام میدهند. علاوه بر چهار عمل اصلی، عملگر توان (**) برای به توان رساندن و محاسبهی رادیکال در پایتون کاربرد دارد. عملگر باقیمانده (%) نیز برای تشخیص بخشپذیری اعداد به کار میرود. جدول زیر همهی عملگرهای ریاضی در پایتون و عملکرد هرکدام را نشان میدهد:
| عملگر | شرح عملکرد | مثال |
|---|---|---|
| + | جمع کردن دو عملوند یا علامت مثبت یگانی | x + y یا +۲ |
| – | تفریق عملوند سمت راست از چپ یا علامت منفی یگانی | x – y یا -۲ |
| * | ضرب دو عملوند در یکدیگر | x * y |
| / | تقسیم عملوند سمت چپ بر سمت راست (همیشه با خروجی اعشاری) | x / y |
| % | عملیات پیمانهای (محاسبه باقیمانده تقسیم عملوند چپ بر راست) | x % y |
| // | تقسیم صحیح (محاسبه خارج قسمت صحیح تقسیم) | x // y |
| به توان رساندن (عملوند چپ به توان عملوند راست) | x y |
کد زیر عملکرد هر ۷ عملگر حسابی را روی دو متغیر نشان میدهد:
a = 15
b = 4
print("Addition:", a + b)
print("Subtraction:", a - b)
print("Multiplication:", a * b)
print("Division:", a / b)
print("Floor Division:", a // b)
print("Modulus:", a % b)
print("Exponentiation:", a b)
خروجی اجرای این کد:
Addition: 19
Subtraction: 11
Multiplication: 60
Division: 3.75
Floor Division: 3
Modulus: 3
Exponentiation: 50625
تفاوت تقسیم عادی (/) و تقسیم صحیح (//)
در پایتون، عملگر تقسیم عادی (/) همیشه عددی اعشاری از نوع float برمیگرداند، حتی اگر دو عدد بر هم بخشپذیر باشند. مثلاً حاصل ۱۰ / ۲ برابر با ۵.۰ و حاصل ۱۵ / ۴ برابر با ۳.۷۵ است. عملگر تقسیم صحیح (//) بخش اعشار را نادیده میگیرد و خارج قسمت صحیح تقسیم را برمیگرداند. در تقسیم اعداد صحیح، خروجی این عملگر از نوع int است؛ به همین دلیل، حاصل عبارت ۱۵ // ۴ عدد ۳ خواهد بود.

عملگرهای مقایسهای در پایتون (Comparison Operators)
عملگرهای مقایسهای در پایتون دو مقدار یا متغیر را با هم مقایسه میکنند و بر اساس درستی یا نادرستی شرط، نتیجه را برمیگردانند. خروجی محاسبه با این عملگرها از نوع دادهی بولین (Boolean) است: True یا False که حرف اول هر دو بزرگ است.

| عملگر | شرح عملکرد | مثال |
|---|---|---|
| > | بزرگتر از (درست است اگر عملوند چپ بزرگتر از راست باشد) | x > y |
| < | کوچکتر از (درست است اگر عملوند چپ کوچکتر از راست باشد) | x < y |
| == | برابر با (درست است اگر هر دو عملوند مساوی باشند) | x == y |
| != | نامساوی (درست است اگر دو عملوند با هم برابر نباشند) | x != y |
| >= | بزرگتر یا مساوی (درست است اگر عملوند چپ بزرگتر یا مساوی راست باشد) | x >= y |
| <= | کوچکتر یا مساوی (درست است اگر عملوند چپ کوچکتر یا مساوی راست باشد) | x <= y |
در این مثال، نتیجهی مقایسهی دو عدد ۱۳ و ۳۳ را میبینید:
a = 13
b = 33
print(a > b)
print(a < b)
print(a == b)
print(a != b)
print(a >= b)
print(a <= b)
خروجی:
False
True
False
True
False
True
عملگرهای منطقی در پایتون (Logical Operators)
عملگرهای منطقی در پایتون شامل and، or و not هستند و عبارتهای شرطی را ترکیب میکنند. خروجی این عملگرها در عبارتهای شرطی از نوع دادهی بولین، یعنی True یا False است. اگر هر سه عملگر در یک عبارت حضور داشته باشند، ابتدا not، سپس and و در آخر or ارزیابی میشود.
| عملگر | شرح عملکرد | مثال |
|---|---|---|
| and | در صورتی True برمیگرداند که هر دو عملوند True باشند | x and y |
| or | در صورتی True برمیگرداند که حداقل یکی از دو عملوند True باشد) | x or y |
| not | نتیجه را معکوس میکند (اگر عملوند False باشد، خروجی True میشود و برعکس) | not x |
این سه عملگر روی مقادیر بولین به شکل زیر کار میکنند:
a = True
b = False
print(a and b)
print(a or b)
print(not a)
خروجی:
False
True
False
عملگرهای تخصیص در پایتون (Assignment Operators)
عملگرهای تخصیص در پایتون به متغیرها مقدار میدهند. سادهترین آنها علامت = است که مقدار سمت راست را به متغیر سمت چپ اختصاص میدهد؛ مثلاً x = ۵. عملگرهای تخصیص ترکیبی نیز وجود دارند که ابتدا یک عملیات حسابی یا بیتی را روی متغیر انجام میدهند و سپس نتیجهی جدید را در همان متغیر ذخیره میکنند.
| عملگر | مثال | معادل بازشده |
|---|---|---|
| = | x = 5 | x = 5 |
| += | x += 5 | x = x + 5 |
| -= | x -= 5 | x = x – 5 |
| *= | x *= 5 | x = x * 5 |
| /= | x /= 5 | x = x / 5 |
| %= | x %= 5 | x = x % 5 |
| //= | x //= 5 | x = x // 5 |
| = | x = 5 | x = x 5 |
| &= | x &= 5 | x = x & 5 |
| /= | x /= 5 | x = x / 5 |
| ^= | x ^= 5 | x = x ^ 5 |
| >>= | x >>= 5 | x = x >> 5 |
| <<= | x <<= 5 | x = x << 5 |
کد زیر نشان میدهد که عملگرهای تخصیص چگونه مقدار متغیر b را تغییر میدهند:
a = 10
b = a
print(b)
b += a
print(b)
b -= a
print(b)
b *= a
print(b)
b <<= a
print(b)
خروجی:
10
20
10
100
102400
چرا عملگرهای ++ و — در پایتون وجود ندارند؟
برنامهنویسانی که پس از آموزش زبان php وارد پایتون میشوند، معمولاً به دنبال عملگرهای افزایش و کاهش یکواحدی (++ و –) میگردند. در پایتون، عملگرهای Increment و Decrement به این شکل وجود ندارند. بنابراین برای اضافه کردن یک واحد به متغیر، به جای x++ باید از سینتکس x += ۱ و برای کم کردن یک واحد، به جای x– باید از x -= ۱ استفاده کنید. اگر در حلقههای شمارشی به کاهش گام حرکت نیاز دارید، میتوانید آرگومان سوم تابع range را منفی قرار دهید:

for i in range(10, 0, -1):
print(i)
عملگرهای خاص در پایتون (همانی و عضویت)
پایتون دو دسته عملگر ویژه دارد: عملگرهای همانی برای بررسی موقعیت اشیا در حافظه و عملگرهای عضویت برای جستوجوی مقادیر درون ساختارهای داده.
عملگرهای همانی (is و is not) و تفاوت آنها با ==
عملگرهای همانی در پایتون، یعنی is و is not، بررسی میکنند که آیا دو متغیر یا مقدار در بخش یکسانی از حافظه قرار دارند و به یک شیء (Object) واحد اشاره میکنند یا خیر.

| عملگر | شرح عملکرد | مثال |
|---|---|---|
| is | اگر دو عملوند به یک شیء یکسان در حافظه اشاره کنند، True برمیگرداند | x is True |
| is not | اگر دو عملوند به شیء یکسانی در حافظه اشاره نکنند، True برمیگرداند | x is not True |
عملگر مقایسهای == و عملگر هویت is با هم تفاوت دارند: دو متغیر با مقادیر مساوی (==) لزوماً همانی (is) نیستند و در یک خانه از حافظه قرار ندارند. این تفاوت را در مثال زیر میبینید:
x1 = 5
y1 = 5
x2 = 'Hello'
y2 = 'Hello'
x3 = [1, 2, 3]
y3 = [1, 2, 3]
print(x1 is not y1)
print(x2 is y2)
print(x3 == y3)
print(x3 is y3)
خروجی:
False
True
True
False
در این کد، x1 و y1 اعداد صحیح با مقادیر برابر هستند و پایتون آنها را در یک بخش از حافظه نگه میدارد. بنابراین هم برابرند و هم همانی، و عبارت x1 is not y1 مقدار False میدهد. همین رفتار برای رشتههای یکسان x2 و y2 نیز برقرار است و x2 is y2 مقدار True برمیگرداند. x3 و y3 لیست هستند. مقادیر درون آنها با هم برابر است و x3 == y3 مقدار True میدهد، ولی به دلیل تغییرپذیر بودن (Mutable) ساختار لیست در پایتون، مفسر آنها را در بخشهای جداگانهای از حافظه ذخیره میکند. در نتیجه، خروجی x3 is y3 برابر با False است.
عملگرهای عضویت (in و not in) در توالیها و دیکشنری
عملگرهای عضویت در پایتون وجود یا نبود یک مقدار یا متغیر را در یک توالی، مانند رشته، لیست، تاپل، مجموعه و دیکشنری، بررسی میکنند.

| عملگر | شرح عملکرد | مثال |
|---|---|---|
| in | اگر مقدار در توالی پیدا شود، True برمیگرداند | 5 in x |
| not in | اگر مقدار در توالی پیدا نشود، True برمیگرداند | 5 not in x |
هنگام استفاده از این عملگرها، دو نکته را در نظر بگیرید. در کار با رشتهها در پایتون، مفسر به بزرگی و کوچکی حروف حساس (Case Sensitive) است. همچنین در ساختار دیکشنری در پایتون، عملگر in فقط وجود «کلید» (Key) را بررسی میکند؛ با این عملگر نمیتوان مستقیماً وجود یک «مقدار» (Value) را بررسی کرد.
x = 'Hello world'
y = {1: 'a', 2: 'b'}
print('H' in x)
print('hello' not in x)
print(1 in y)
print('a' in y)
خروجی:
True
True
True
False
در این کد، حرف ‘H’ در رشتهی x وجود دارد، اما ‘hello’ با حرف کوچک در آن نیست. در دیکشنری y نیز عدد ۱ یک کلید است و بررسی آن خروجی True میدهد، اما ‘a’ یک مقدار (Value) است و بررسی in برای آن False برمیگرداند.
عملگرهای بیتی در پایتون (Bitwise Operators)
عملگرهای بیتی در پایتون روی اعداد دودویی (Binary یا همان صفر و یک) کار میکنند و عملیات را بیتبهبیت انجام میدهند. برای مثال، عدد ۲ در مبنای دودویی برابر با ۱۰ و عدد ۷ برابر با ۱۱۱ است. در جدول زیر، فرض بر این است که x = ۱۰ با معادل باینری ۰۰۰۰ ۱۰۱۰ و y = ۴ با معادل باینری ۰۰۰۰ ۰۱۰۰ باشد:

| عملگر | شرح عملکرد | مثال و خروجی باینری |
|---|---|---|
| & | AND بیتی (فقط زمانی ۱ میدهد که هر دو بیت ۱ باشند) | x & y = 0 (0000 0000) |
| / | OR بیتی (زمانی ۱ میدهد که حداقل یکی از دو بیت ۱ باشد) | x / y = 14 (0000 1110) |
| ~ | NOT یا نقیض بیتی (بیتها را معکوس میکند) | ~x = -11 (1111 0101) |
| ^ | XOR بیتی (زمانی ۱ میدهد که دو بیت با هم متفاوت باشند) | x ^ y = 14 (0000 1110) |
| >> | شیفت به راست بیتی (جابهجایی بیتها به سمت راست) | x >> 2 = 2 (0000 0010) |
| << | شیفت به چپ بیتی (جابهجایی بیتها به سمت چپ) | x << 2 = 40 (0010 1000) |
پیادهسازی این عملگرها در کد پایتون:
a = 10
b = 4
print(a & b)
print(a | b)
print(~a)
print(a ^ b)
print(a >> 2)
print(a << 2)
خروجی:
0
14
-11
14
2
40
عملگر سهتایی در پایتون (Ternary Operator)
عملگرهای سهتایی، که «عبارات شرطی» (Conditional Expressions) نیز نام دارند، از نسخهی ۲.۵ به پایتون اضافه شدند. این عملگر به شما اجازه میدهد به جای ساختار چندخطی if-else، شرط را در یک خط بررسی و کد را فشرده کنید. الگوی نوشتاری آن به این صورت است:
[on_true] if [expression] else [on_false]
در مثال زیر، عملگر سهتایی عدد کوچکتر بین a و b را در یک خط مشخص میکند:
a, b = 10, 20
min_val = a if a < b else b
print(min_val)
خروجی:
10
اولویت و ترتیب اجرای عملگرها در پایتون
اگر در یک عبارت بیش از یک عملگر وجود داشته باشد، قوانین «اولویت عملگرها در پایتون» (Operator Precedence) مشخص میکند که کدام عملیات باید زودتر اجرا شود. عملگرهای محاسباتی از بالاترین به پایینترین، این ترتیب اولویت را دارند:
- پرانتز ()
- توان **
- ضرب و تقسیمها (*، /، //، %)
- جمع و تفریق (+، -)
در عملگرهای منطقی نیز اولویت به ترتیب با not، سپس and و در آخر or است. کد زیر تأثیر این اولویت را در یک عبارت ریاضی و یک شرط ترکیبی نشان میدهد:
print(12 + (6 - 2) * 3)
name = "Alex"
age = 0
if name == "Alex" or name == "John" and age >= 2:
print("Hello! Welcome.")
else:
print("Good Bye!!")
خروجی:
24
Hello! Welcome.
در عبارت ریاضی، ابتدا محاسبهی داخل پرانتز انجام میشود: ۶ – ۲ برابر با ۴ است. سپس ضرب ۴ * ۳ نتیجهی ۱۲ را میدهد و در آخر، این نتیجه با ۱۲ جمع میشود و عدد ۲۴ چاپ میشود. در دستور شرطی، اولویت and بالاتر از or است؛ بنابراین ابتدا بخش name == “John” and age >= ۲ ارزیابی میشود که حاصل آن False است. سپس این نتیجه همراه با شرط اول، یعنی name == “Alex” که True است، وارد عملگر or میشود و شرط کلی برقرار میشود.
شرکتپذیری عملگرها (Operator Associativity) هنگام تساوی اولویت
اگر در یک عبارت دو یا چند عملگر با اولویت یکسان قرار بگیرند، مثلاً هم ضرب و هم تقسیم، یا هم جمع و هم تفریق، قانون «شرکتپذیری» (Associativity) جهت اجرای آنها را مشخص میکند. بیشتر عملگرها در پایتون شرکتپذیری از «چپ به راست» دارند، اما عملگر توان (**) از «راست به چپ» اجرا میشود:

print(100 / 10 * 10)
print(5 - 2 + 3)
print(5 - (2 + 3))
print(2 3 2)
خروجی:
100.0
6
0
512
در خط اول، تقسیم و ضرب هماولویت هستند؛ بنابراین محاسبه از چپ به راست انجام میشود. ابتدا حاصل ۱۰۰ / ۱۰ برابر با ۱۰.۰ میشود و سپس ضرب آن در ۱۰، نتیجهی ۱۰۰.۰ را میدهد. در خط آخر، یعنی عبارت ۲ 3 ۲، عملگر توان از راست به چپ ارزیابی میشود. به همین دلیل، ابتدا حاصل ۳ ** ۲ برابر با ۹ میشود و سپس ۲ به توان ۹ میرسد که خروجی ۵۱۲ را تولید میکند.
خطاهای رایج هنگام کار با عملگرهای پایتون
هنگام نوشتن عبارتهای محاسباتی و منطقی در پایتون، دو خطای پرتکرار زیر ممکن است اجرای برنامه را متوقف کنند:

۱. خطای NameError هنگام نوشتن true یا false با حروف کوچک:
پایتون به حروف بزرگ و کوچک حساس است. اگر در مقایسهها یا عملگرهای منطقی، مقادیر بولین را به صورت false یا true بنویسید، مفسر آنها را نام یک متغیر تعریفنشده میداند و خطای NameError میدهد:
# کد دارای خطا
print(type(false)) # NameError: name 'false' is not defined
برای رفع این خطا، حرف اول مقادیر بولین را بزرگ بنویسید:
# کد صحیح
print(type(False))
۲. خطای TypeError هنگام محاسبه مستقیم روی خروجی input():
تابع input() هر مقداری را که از کاربر بگیرد، به صورت رشته (str) ذخیره میکند. اگر ورودی کاربر را مستقیماً در یک عملیات ریاضی قرار دهید، بهویژه ضرب در عدد اعشاری یا تفریق، با خطای عدم تطابق نوع داده روبهرو میشوید:
# کد دارای خطا
h = input('h = ')
t = 388.15 - 0.0065 * h
# TypeError: can't multiply sequence by non-int of type 'float'
برای رفع این مشکل، باید پیش از انجام عملیات حسابی، خروجی input() را با توابع تبدیل نوع مانند int() برای اعداد صحیح یا float() برای اعداد اعشاری به عدد تبدیل کنید:
# کد اصلاحشده
h = int(input('h = '))
t = 388.15 - 0.0065 * h
print(t)