عملگرها در پایتون اجرای عملیات ریاضی، منطقی و مقایسهای روی اعداد و متغیرها را ممکن میکنند. بدون عملگرها هیچ کاری نمیتوانیم انجام دهیم و حتی برای جمع دو عدد یا مقایسه آنها به این ابزارها وابسته هستیم. هرقدر هم که در مفاهیم پیشرفتهتر پایتون مثل توابع، کلاسها و کتابخانهها حرفهای شویم، باز هم برای پیادهسازی منطق برنامههایمان، به عملگرها وابستهایم. پس بیایید این ابزارهای حیاتی را بهتر بشناسیم. پایتون طیف گستردهای از عملگرها را ارائه میدهد که هر کدام کاربرد خاص خود را دارند، از جمله عملگرهای حسابی برای محاسبات ریاضی، مقایسهای برای بررسی شرایط، عملگرهای منطقی برای ترکیب شرطها، عملگرهای بیتی برای عملیات روی بیتها و عملگرهای تخصیص برای مدیریت مقادیر متغیرها. شناخت انواع عملگرها در پایتون و نحوه استفاده از آنها به برنامهنویسان کمک میکند تا کدهایی خوانا، بهینه و قدرتمند بنویسند. در این مقاله از کلاسور به بررسی دقیقتر هر یک از این دستهها خواهیم پرداخت. ابتداییترین و پرکاربردترین ابزار در هر زبان برنامهنویسی عملگرهای محاسباتی هستند که برای انجام عملیات ریاضی به کار میروند. این عملگرها در پایتون شامل ابزارهای جمع، تفریق، ضرب، تقسیم و سایر عملیات ریاضی هستند. در ادامه هر یک از این اپراتورها را به همراه مثالهای عملی بررسی میکنیم. + (جمع): برای جمع کردن دو مقدار، متغیر، لیست و غیره استفاده میشود. در این مثال عبارت بعد از # توضیح خروجی هر عملیات است: (تفریق): این عملگر علاوهبر تفریق دو عدد، میتواند برای منفی کردن یک عدد نیز استفاده شود: (ضرب): این عملگر در پایتون فراتر از ضرب ساده ریاضی عمل کرده و برای تکرار رشتهها و لیستها نیز استفاده میشود: / (تقسیم): حتی اگر هر دو عملوند عدد صحیح باشند، این عملگر همیشه تقسیم را با اعشار انجام میدهد. این یکی از تغییرات مهم در پایتون ۳ نسبت به پایتون ۲ است: // (تقسیم صحیح): گاهی میخواهیم نتیجه تقسیم بدون اعشار باشد. در این موارد از تقسیم صحیح استفاده میکنیم: % (باقیمانده): این اپراتور باقیمانده تقسیم را محاسبه میکند و در بسیاری از الگوریتمها، مخصوصاً در تشخیص اعداد زوج و فرد یا مضارب خاص کاربرد دارد: ** (توان): با این عملگر میتوانیم هر عدد را به توان دلخواه برسانیم. این اپراتور نسبت به کتابخانه math.pow() کارآمدتر است: عملگرهای مقایسهای در پایتون برای مقایسه دو مقدار یا متغیر به کار رفته و نتیجه را به صورت بولین (True یا False) بازمیگردانند. این عملگرها بیشتر در شرطها و حلقهها برای تصمیمگیریهای منطقی کاربرد دارند. در ادامه هر یک از آنها را همراه با مثالهای کاربردی بررسی میکنیم. == (برابری): برابری دو مقدار را بررسی میکند. در نظر داشته باشید که == مقادیر را مقایسه میکند، نه مرجع حافظه را: != (نامساوی): عکس مورد قبلی عمل میکند و زمانی True برمیگرداند که دو مقدار با هم برابر نباشند: > و < (بزرگتر و کوچکتر): این عملگرها برای مقایسه مقادیر استفاده میشوند. در رشتهها، مقایسه بر اساس ترتیب الفبایی صورت میگیرد: >= و <= (بزرگتر یا مساوی، کوچکتر یا مساوی)**: این عملگرها مشابه عملگرهای > و < هستند، با این تفاوت که در صورت برابری دو مقدار نیز True برمیگردانند: یکی از ویژگیهای قدرتمند پایتون امکان زنجیرهای کردن مقایسههاست. به لطف این ویژگی میتوانیم شرطهای مختلفی را بررسی کرده و بر اساس نتیجه آنها، بخشهای خاصی از کد را اجرا کنیم: این نوع نگارش با جلوگیری از تکرار متغیرها خوانایی کد را افزایش میدهد. برای نگارش کد مشابه در زبانهای دیگر مثل جاوا یا++C باید از عملگر منطقی AND استفاده کرد که خوانایی کمتری دارد. آموزش عملگرها در پایتون بدون پرداختن به عملگرهای منطقی ناقص خواهد بود. از این موارد برای ترکیب شرطها و ایجاد منطق پیچیدهتر استفاده میشود. and (و): این عملگر بررسی میکند که آیا هر دو شرط برقرار هستند یا خیر. بنابراین نتیجه تنها در صورتی True خواهد بود که هر دو شرط جاری باشند: or (یا): این عملگر زمانی True برمیگرداند که حداقل یکی از عبارات True باشد. not (نقیض): نتیجه شرط را معکوس میکند؛ یعنی True را به False و False را به True تبدیل میکند: نکتهای که اغلب برنامهنویسان مبتدی از آن غافل میشوند، این است که عملگرهای منطقی در پایتون از ارزیابی کوتاه (short-circuit evaluation) استفاده میکنند. برای مثال در عبارت x and y، اگر x برابر False باشد، دیگر y بررسی نمیشود و نتیجه مستقیماً False خواهد بود. این ویژگی برای بهینهسازی و جلوگیری از خطاهای احتمالی بسیار مفید است. این عملگرها در پایتون راه میانبری برای انجام عملیات و ذخیره نتیجه در متغیر هستند. مزیت آنها افزایش خوانایی و کاهش طول کدهاست. = (مقداردهی): سادهترین عملگر انتساب است که مقدار سمت راست را به متغیر سمت چپ اختصاص میدهد: +=، -=، *=، /= و سایر عملگرهای ترکیبی: عمل انتساب را با یکی از عملگرهای محاسباتی ترکیب میکنند. به عنوان مثال، x += 5 معادل x = x + 5 است: کاربرد عملگرهای انتساب در برنامههای واقعی بسیار گسترده است. برای مثال در شمارش تعداد تکرار یک کلمه در متن یا جمعآوری امتیازات در یک بازی، استفاده از += سادهترین و کاربردیترین روش ممکن خواهد بود: عملگرهای بیتی مستقیم روی بیتهای دادهها عمل میکنند و برای پردازش دادهها در سطح پایین مثل رمزنگاری و بهینهسازی عملکرد کاربرد دارند. این عملگرها محاسبات را روی نمایش باینری اعداد صحیح انجام میدهند. مثلا تبدیل باینری دو عدد 12 و 5 به ترتیب 1100 و 0101 است؛ بنابراین محاسبه بر مبنای آنها انجام میشود. در ادامه هر یک از این عملگرها را به طور کامل بررسی میکنیم. & (AND بیتی): عملگر AND بیتی که با نماد & نمایش داده میشود، بیتهای متناظر دو عدد را با هم مقایسه میکند. اگر هر دو بیت 1 باشند، نتیجه 1 خواهد بود؛ در غیر این صورت نتیجه 0 است. در واقع این عملگر یک عملیات منطقی AND را در سطح بیتها انجام میدهد: نتیجه اجرای این کد عدد 12 خواهد بود چون نمایش باینری آن 0000 1100 است. | (OR بیتی): اگر حداقل یکی از بیتها 1 باشد، نتیجه 1 خواهد بود: ^ (XOR بیتی): اگر فقط یکی از بیتها 1 باشد (نه هر دو)، نتیجه 1 خواهد بود: ~ (نقیض بیتی): هر بیت را معکوس میکند: نتیجه این عملگر برابر است با منفی ۶۱ چون پایتون از نمایش مکمل دو برای اعداد منفی استفاده میکند. در این نمایش نقیض هر عدد، برابر است با «منفی آن عدد منهای یک». << و >> (شیفت بیتی چپ و راست): این عملگرها بیتهای هر عدد صحیح را به سمت چپ یا راست جابهجا میکنند. در شیفت چپ، بیتها به سمت چپ منتقل شده و بیتهای خالی در سمت راست با صفر پر میشوند. در شیفت راست، بیتها به سمت راست منتقل شده و بیتهای خالی در سمت چپ با بیت علامت (برای اعداد منفی) یا صفر (برای اعداد مثبت) پر میشوند: شیفت به چپ (<<) معادل ضرب عدد در ۲ به توان تعداد بیتهای شیفت است. شیفت به راست (>>) هم معادل تقسیم عدد بر ۲ به توان تعداد بیتهای شیفت است (البته با گرد کردن به سمت پایین). عملگرهای بیتی در حوزههایی مانند پردازش تصویر، رمزنگاری، فشردهسازی دادهها و کار با پروتکلهای شبکه کاربرد گستردهای دارند. در پردازش تصویر از عملگرهای بیتی برای اعمال فیلتر یا ماسک روی پیکسلها استفاده میشود. برنامهنویسهای حرفهای اغلب از عملگر AND بیتی برای فیلتر بیتهای خاص از یک عدد استفاده میکنند. مثلاً در برنامههای گرافیکی استخراج کانالهای رنگی از یک پیکسل با این عملگر انجام میشود. در رمزنگاری عملگر XOR برای تولید کلیدهای رمزنگاری یا پنهانسازی دادهها به کار میرود. در بهینهسازی عملکرد هم شیفتهای بیتی جایگزین سریعتری برای ضرب و تقسیم بر توانهای ۲ هستند. دیگر کاربرد مهم عملگرهای بیتی فشردهسازی دادههاست؛ چون به الگوریتمها اجازه میدهند دادهها را در سطح بیت (و نه فقط بایت) مدیریت کنند. برای مثال کدهای با طول متغیر (مثل کدهای هافمن) یا دادههای کوچکتر از یک بایت را بدون اتلاف فضا، پشت سر هم در جریان خروجی قرار میدهند. این عملگر برای بررسی وجود عنصری خاص در یک مجموعه، لیست، رشته یا دیکشنری استفاده میشوند. عملگر عضویت به برنامهنویس کمک میکند تا عملیات جستوجو به شکلی ساده و خوانا انجام دهد. in (بررسی عضویت): اگر مقدار مورد نظر در مجموعه وجود داشته باشد، True برمیگرداند. این عملگر برای دیکشنریها کلیدها را بررسی میکند، نه مقادیر: not in (بررسی عدم عضویت): عملگر not in برعکس in است و نبود عنصری خاص در مجموعه داده را بررسی میکند: عملگرهای عضویت در پایتون کاربردهای متنوعی دارند و برای اعتبارسنجی ورودیها، فیلتر دادهها یا بررسی شرایط خاص میتوان از آنها بهره برد: این عملگرها کمی خاصتر بوده و به ما میگویند که آیا دو متغیر متفاوت به یک شیء یکسان در حافظه اشاره میکنند یا خیر. is: اگر دو متغیر به یک شیء اشاره کنند، True برمیگرداند. توجه داشته باشید که این عملگر هویت آبجکتها را مقایسه میکند نه مقدار آنها را: در این مثال هرچند a و b از نظر محتوا یکسانند، اما به دو آبجکت متفاوت در حافظه اشاره میکنند. از طرف دیگر a و c به یک آبجکت مشترک اشاره میکنند بنابراین عملگر is نتیجه True را برمیگرداند. is not: اگر دو متغیر به اشیاء متفاوتی اشاره کنند، True برمیگرداند: یکی از رایجترین اشتباهات برنامهنویسهای تازهکار در پایتون یکی دانستن عملگرهای == و is است. عملگر == مقادیر را مقایسه میکند، در حالی که is هویت آبجکتها را بررسی میکند. برای اجتناب از این اشتباه متخصصان پایتون توصیه میکنند که از عملگر is فقط برای مقایسه با None ،True یا False استفاده شود. ترتیب اجرای عملگرها در پایتون از قواعد خاصی پیروی میکند. برای مثال عملگرهای محاسباتی (**، *، + و ...) اولویت بالاتری نسبت به عملگرهای مقایسهای (==، is) دارند. در جدول زیر اولویت عملگرها در پایتون را از بالاترین (بالا) تا پایینترین اولویت (پایین) مشاهده میکنید: اگر میخواهید ترتیب اجرای عملگرها را تغییر دهید، از پرانتز استفاده کنید. عبارات داخل پرانتز همیشه اول اجرا میشوند. در ادامه برای درک بهتر کاربرد عملگرها چند مثال را با هم مرور میکنیم. همانطور که میبینید، در مثالهای پیشرفته ترکیب عملگرها با ساختارهای کنترلی (if, for) و توابع بسیار رایج است. محاسبه و مقایسه روی اعداد: بررسی شرط با عملگرهای منطقی: محاسبه تخفیف: بررسی شرایط برای پذیرش در دوره: بررسی عدد اول با عملگرهای محاسباتی و منطقی: شیفت بیتی برای تولید اعداد تواندار: فیلتر کردن دادهها با in: نمونه پیشرفتهتر از فیلتر با in: بهینهسازی حافظه با is: استفاده از عملگرهای بیتی برای تنظیم دسترسیها: استفاده از عملگرهای هویتی برای مدیریت آبجکتها: در این مطلب از بلاگ کلاسور با عملگرها در زبان پایتون آشنا شدیم. دیدیم که این ابزارهای قدرتمند چطور اجرای عملیات مختلف محاسبه، مقایسه، جستجو و دستکاری دادهها را برای ما آسان میکنند. فراموش نکنید که حفظ کردن کاربرد عملگرها کافی نیست و تنها با تمرین مداوم یا حل پروژههای عملی در بوتکمپ پایتون روی این ابزارها مسلط خواهید شد. انواع عملگرها در پایتون کدامند؟ عملگرهای حسابی، مقایسهای، منطقی، بیتی، عملگرهای انتساب، هویت و عضویت از پرکاربردترین عملگرها در پایتون هستند. آیا میتوان در یک عبارت انواع عملگرها را با هم ترکیب کرد؟ بله، میتوانید عملگرهای حسابی، مقایسهای، منطقی و... را با هم ترکیب کرده و عملیات پیچیدهتری انجام دهید. سربارگذاری عملگر (Overloading) چیست؟ این قابلیت پایتون به شما اجازه میدهد رفتار یک عملگر معمولی را برای اشیا در کلاسهای سفارشی خودتان تغییر دهید. عملگرهای is و == چه تفاوتی دارند؟ اپراتور == برابری مقادیر را چک میکند اما is بررسی میکند که عملوندها به یک شیء یکسان در حافظه اشاره میکنند یا خیر (هویت یکسان). اولویت عملگرها چیست؟ اولویت، ترتیب اجرای عملگرها را در یک عبارت تعیین میکند. مثلاً ضرب و تقسیم قبل از جمع و تفریق انجام میشوند. از پرانتز میتوان برای تغییر اولویت استفاده کرد. نقش پرانتز در انجام عملیات چیست؟ پرانتزها برای تعیین ترتیب انجام عملیات استفاده میشوند. آنها مشخص میکنند که کدام بخش از یک عبارت باید زودتر از بقیه محاسبه شود. عملگر والروس (:=) چیست و چه کاربردی دارد؟ این عملگر (در پایتون 3.8 و بالاتر) امکان تخصیص مقدار به متغیر و استفاده همزمان از آن را فراهم میکند.انواع عملگرها در پایتون
عملگرهای محاسباتی (Arithmetic Operators)
عملگرهای مقایسهای (Comparison Operators)
کاربرد عملگرهای مقایسهای در شرطها
عملگرهای منطقی (Logical Operators)
عملگرهای انتساب (Assignment Operators)
عملگرهای بیتی (Bitwise Operators)
کاربرد عملگرهای بیتی در پردازش دادهها
عملگرهای عضویت (Membership Operators)
مثالهای کاربردی
عملگرهای هویتی (Identity Operators)
تفاوت == و is در پایتون
اولویت عملگرها در پایتون (Operator Precedence)
مثالهای عملی و کاربردی از عملگرها
تسلط بر عملگرهای پایتون؛ تمرین کلید موفقیت
سوالات متداول