اولویت عملگرها در پایتون – تقدم و ترتیب عملگرها به زبان ساده


توانایی پردازش عبارتهای محاسباتی پیچیده به کمک طیف گستردهای از عملگرها یکی از ویژگیهای کلیدی پایتون است. مطلع بودن از روشی که پایتون برای ارزیابی عبارتها استفاده میکند و نظمی که برای اعمال عملگرها در نظر گرفته، برای نوشتن کدهای صحیح و کارآمد الزامی است. برای پیشرفت در برنامهنویسی پایتون، نیز فهم اولویت عملگرها بسیار ضروری است. کمبود دانش توسعهدهندگان درباره این مسئله حیاتی میتواند باعث بروز رفتارهای غیر منتظره در برنامه نوشته شده شود. در این مطلب از مجله فرادرس تلاش کردیم که به بررسی این مبحث با جزییات کامل بپردازیم و دانش لازم درباره روش صحیح کار با عملگرها را برای کدنویسی کارآمدتر در اختیار شما قرار دهیم.
- نحوه تأثیرگذاری اولویت عملگرها بر خروجی کد را یاد خواهید گرفت.
- انواع و دستهبندی عملگرها در پایتون را میآموزید.
- قوانین «PEMDAS» و نقش پرانتزها در اولویت عملگرها را خواهید آموخت.
- نحوه بازنویسی اولویتها با پرانتز را به صورت عملی تمرین خواهید کرد.
- نکات کلیدی و سوالات رایج درباره اولویت عملگرها در پروژه را خواهید شناخت.
- میآموزید چگونه به کمک قواعد اولویتها کدهای پایدارتری بنویسید.
باید برای درک پیچیدگیهای مربوط به اولویت اجرای عملگرها در پایتون آماده شوید. در این مطلب اصول کلیدی مربوط به اولویت عملگرها را به همراه جزییات و مثالها توضیح دادهایم و برای کمک به درک بهتر مخاطبان، عملگرها را در جدولی به همراه قانون PEMDAS و ارتباط عملگرها با یکدیگر در پایتون نمایش میدهیم.
اولویت عملگرها در پایتون چیست؟
اولویت عملگرها به مجموعهای از قوانین میگویند که نظم اجرای عملگرها را تعیین میکنند. این مجموعه قوانین درباره اینکه عملگرها در زمان اجرای هر عملیات با چه ترتیبی ارزیابی شوند حکم رانی میکنند.
برای اینکه زمان پیادهسازی در کدهای برنامه از مبهمنویسی ناخواسته، جلوگیری شود بسیار ضروری است که نسبت به این قوانین اطلاعات کافی داشته باشیم. این ابهامات در کدها میتوانند باعث ایجاد نتایج غیرمنتظرهای شوند. فرض کنیم که عبارتی مانند 3 + 4 * 2 را کدنویسی کردهایم. چطور باید اجرا شود؟ این عبارت باید اول به شکل(3 + 4) * 2 اجرا شود یا به شکل 3 + (4 * 2) . اولویت عملگر به وسیله تخصیص اولویت اجرا به عملگرها به این سوالات پاسخ میدهد.
اولویت عملگرها در پایتون صرفا موضوعی آکادمیک و تئوری نیست. بلکه برای برنامههای کاربردی، بسیار حیاتی است. وجود اشتباه در درک اولویت عملگرها در پایتون میتواند منجر به بروز باگ در کدها شود. این باگها معمولا خطایابی بسیار دشواری دارند. برعکس بعضی از زبانهای برنامهنویسی دیگر، پایتون مجموعه منحصر بهفردی از قوانین مخصوص به خود را دارد. در مبحث الگوریتمهای «یادگیری ماشین» (Machine Learning)، درک اشتباه از اولویت عملگرها میتواند سبب محاسبات غلط شود و در نهایت بر دقت و کارایی مدل تاثیر میگذارد.
مجموعه غنی عملگرهای پایتون شامل عملگرهایی مانند موارد لیست شده در زیر است.
- عملگرهای ریاضی در پایتون، مانند + , - , * , / و غیره
- عملگرهای مقایسهای پایتون مانند == , != , > , <
- عملگرهای منطقی مانند and و or و not و غیره
- عملگرهای بیتی در پایتون تقریبا مانند عملگرهای منطقی هستند
و چندین مورد عملگرد دیگر که در ادامه به همه آنها رسیدگی میکنیم.

هر دستهبندی از عملگرها سطح اولویت مخصوص به خود را دارد که بهصورت درونی برای مفسر پایتون کدنویسی شدهاند. زمانی که درحال انتقال کدها از زبان برنامهنویسی دیگری به زبان پایتون هستید، توجه به اولویت عملگرها در پایتون بسیار ضروری است. هر زبان برنامهنویسی مجموعه قوانین منحصر بهفرد خود را برای اولویت عملگرها دارد و هر قانونی که شاید در یک زبان خاص وجود داشته باشد لازم نیست که حتما در زبان پایتون هم برقرار باشد. تسلط به قوانین اولویت عملگرها در پایتون نه تنها ما را به برنامهنویس بهتری تبدیل خواهد کرد بلکه در مورد خواندن و خطایابی موثرتر کدهایی که دیگران نوشتهاند هم کمک میکند.
جدول اولویت عملگرها در پایتون
درک اولویت عملگرها در پایتون یکی از اصول زیربنایی برای نوشتن کدهای تمیز و موثر است. قبل از اینکه بهصورت دقیقتر به قوانین و دستورالعملهای مربوط به این مبحث بپردازیم، لازم است که خود را با سلسله مراتب عملگرهای پایتون از طریق جدول اولیت آشنا کنیم. برای هرکسی که میخواهد روش کار اولویت عملگرها در پایتون را درک کند آشنایی با جدول پایین ضروری است.
انواع دستهبندی عملگرها | عملگر |
عملگرهای ریاضی | ** , *, / , +, - |
عملگرهای مقایسهای | ==، != ، >= ، <= ، >، < |
عملگرهای منطقی | not , and, or |
عملگرهای بیتی | & , | , ^ |
عملگرهای تخصیص | = , += , -= |
ردیفهای جدولی که در بالا دیده میشوند مربوط به 5 نوع از عملگرهای پایتون هستند. این عملگرها را در فهرست زیر توضیح دادهایم.
- عملگرهای ریاضی: ترتیب اولویت این عملگرهای از بیشترین به کمترین بهصورت زیر است.
- عملگر ** برای توان دارای بالاترین اولویت
- عملگر *برای ضرب
- عملگر / برای تقسیم
- عملگر +برای جمع
- عملگر -برای تفریق با پایینترین اولویت
- عملگرهای مقایسهای: این عملگرها برای مقایسه دو عملوند دو طرف خود استفاده میشوند.
- عملگر==برای مقایسه برابر بودن با اولویت اول
- عملگر!=برای مقایسه نابرابر بودن با اولویت اول
- عملگر <= به معنی کوچکتر مساوی با اولویت دوم
- عملگر >=به معنی بزرگتر مساوی با اولویت دوم
- عملگر >به معنی کوچکتر با اولویت دوم
- عملگر <به معنی بزرگتر با اولویت دوم
- توجه کنید هر چهار عملگر بزرگتر، کوچکتر، بزرگترمساوی و کوچکترمساوی دارای اولویت برابر هستند.
- عملگرهای منطقی: از این عملگرها برای محاسبات منطقی استفاده میشود.
- عملگر not در پایتون بالاترین اولویت را در بین عملگرهای منطقی دارد.
- عملگر andدارای اولویت دوم است.
- عملگر orپایینترین اولویت را بین عملگرهای منطقی دارد.
- عملگرهای بیتی: این عملگرها برای محاسبات بهصورت بیت به بیت استفاده میشوند. ترتیب اولویت عملگرهای بیتی از بیشترین به کمترین در ادامه فهرست شده است.
- عملگر AND با نماد & دارای بالاترین اولویت است.
- عملگر OR با نماد | اولویت دوم را دارد.
- عملگر XOR با نماد ^ پایینترین اولویت را دارد.
- عملگرهای تخصیص: عملگر تخصیص =برای اختصاص دادن مقادیر استفاده میشود، در حالی که += و -= «عملگرهای تخصیص مرکب» (Compound Assignment Operators) هستند. این عملگرها عملیاتی را به همراه عمل تخصیص بهصورت همزمان انجام میدهند.
اولویت عملگرها در پایتون بهصورت دلخواه تنظیم نشدهاند. این اولویتها طراحی شدهاند که میزان ابهام را در عبارات محاسباتی به حداقل ممکن برسانند و مسیر شفافی را برای اجرای عملیات در مقابل سیستم قرار دهند. این علتها برای طراحی اولویت در سناریوهای پیچیده برنامهنویسی بسیار حیاتی هستند.

قانون اولویت عملگرها در پایتون | PEMDAS
نام قانون اولویت عملگرهای پایتون PEMDAS از سرنام واژههای «پرانتزها» (Parentheses)، «توان» (Exponent)، «ضرب» (Multiplication)، «تقسیم» (Division)، «جمع بستن» (Addition) و «عمل تفریق» (Subtraction) گرفته شده است. این کلمه راهنما به عنوان کلیدواژهای کار میکند که با بهخواطر سپردن آن میتوانید اولویت اجرای عملگرهای پایتون را برای همیشه در ذهن داشته باشید. برای هر کسی که میخواهد کدهای بدون خطا در پایتون بنویسد، درک و حفظ قانون PEMDAS بسیار ضروری است. در جدول زیر هر کدام از اجزای تشکیلدهنده PEMDAS به همراه اولویتشان را میتوانیم ببینیم.
اولویت | نام مولفه | عملگرها |
اول | پرانتز | () |
دوم | توان | ** |
سوم | عملیات ضرب و تقسیم | * و / |
چهارم | عملیات جمع و تفریق | +و - |
درباره جدول بالا و این عملگرها در ادامه بهصورت فهرستوار توضیحی ارائه کردیم تا با موارد مطرح شده در جدول بهطور کامل آشنا شوید.
- «پرانتزها» (Parentheses) (): هر چیزی داخل پرانتز باشد بیشترین اولویت اجرا را دارد. پرانتزها کمک میکنند که اولویت سایر عملگرها را Override کنیم. یعنی اگر در عبارت محاسباتی، قسمتی از عبارت را که شامل عملگری با پایینترین اولویت است، درون پرانتز قرار بدهیم اولویت بالاتری برای اجرا نسبت به همه عملگرهای با اولویت بیشتر دارد که خارج از پرانتز قرار دارند. اولویت اجرا همیشه با درونیترین پرانتز است.
- «توان» (Exponent) **: بعد از پرانتزها محاسبات مربوط به عملیات توان بالاترین اولویت را دارند.
- عملیات «ضرب» (Multiplication) *و «تقسیم» (Division)/ : این عملگرها دارای اولویت اجرای یکسانی هستند و بعد از توان و پرانتز نوبت به اجرای عملیات ضرب و تقسیم میرسد. از آنجا که در هر عبارت محاسباتی محدودیتی در تعداد حضور این عملگرها وجود ندارد و دارای اولویت اجرای یکسان هستند، در یک عبارت، اجرا بین این عملگرها از چپ به راست به ترتیب بیشترین تا کمترین اولویت را شامل میشود.
- عملیات «جمع بستن» (Addition)+ و «تفریق» (Subtraction)-: این عملگرها آخرین اولویت را بین عملگرهای PEMDAS دارند. اولویت اجرای این دو دسته عملگر با هم به یک اندازه است. مانند عملگرهای ضرب و تقسیم اگر در هر عبارتی این عملگرها در کنار یکدیگر قرار بگیرند، به شرط نبودن پرانتز، اولویت اجرا بیشترین تا کمترین به ترتیب از چپ به راست داده میشود.
قانون PEMDAS در پایتون تضمین میکند که عبارتهای محاسباتی با نظمی مشخص اجرا شوند. توجه به این قانون باعث میشود در کدهای نوشته شده خطاها به حداقل برسند و از اتفاقات غیرمنتظره پیشگیری شود. در زمان نوشتن عبارات محاسباتی پیچیده استفاده از قانون PEMDAS کمک میکند که ابهامات به حداقل برسند. بنابراین، برای هر برنامهنویس حرفهای که قصد دارد مهارتهای خود را در زبان پایتون ارتقا بدهد تسلط و توجه به قانون PEMDAS ضروری است. فرقی نمیکند که در زمینه «علم داده» (Data Science)، «توسعه وب» (Web Development) یا نوشتن برنامههای اتوماسیون اداری فعالیت کنیم، دانستن اولویت اجرای عملگرها یکی از مهمترین مهارتهایی است که باید داشته باشیم.
با درک کلی درباره قواعد اولویت عملگرها در پایتون، میتوانید منطق برنامهنویسی خود را بهصورت نزدیکی با روش تفسیر عبارتهای محاسباتی توسط پایتون تطبیق دهید. به این ترتیب احتمال ایجاد باگ در کدها و خطاهای منطقی برنامهتان را به اندازه زیادی کاهش میدهید.
قاعده شرکت پذیری | Associativity Rule
بعد از درونیسازی قانون PEMDAS و اولویت اجرای عملگرها در پایتون نوبت به بررسی موضوع بسیار ضروری بعدی یعنی «قاعده شرکتپذیری» (Associativity Rule) میرسد. این قاعده توضیح میدهد که وقتی عملگرهای درون عبارتی یکسان، اولویت برابر باهم دارند پایتون چگونه این عبارتها را حل میکند. شرکتپذیری بخصوص زمانی بسیار حیاتی میشود که در عبارتی با چندین عملگر روبهرو شوید که از لحاظ اولویتبندی با هم در یک سطح باشند.
شرکت پذیری عملگرها
این قاعده جهتی را که این عملگرها باید اجرا شوند مشخص میکند. از راست به چپ یا از چپ به راست اجرا شدن عملگرها با نظر قاعده شرکتپذیری تعیین میشود.
نوع شرکتپذیری | عملگرها |
عملگرهای «شرکتپذیر از سمت چپ» (Left-Associative) | +, -, *, / |
عملگرهای «شرکتپذیر از سمت راست» (Right-Associative) | **, = |
درباره جدول بالا و قوانین شرکتپذیری در ادامه بهصورت فهرستوار برای هر دو گروه از عملگرها توضیحی نوشتهایم.
- عملگرهای شرکتپذیر از سمت چپ: این عملگرها شامل جمع +، تفریق-، ضرب*و تقسیم/ میشوند. در عبارت محاسباتی که شامل این عملگرها شود، مفسر پایتون از چپ به راست به ارزیابی عبارت میپردازد. به عنوان مثال، در عبارت 3 + 4 - 2 پایتون در ابتدا 4+3 را محاسبه میکند که برابر با 7 میشود و سپس عمل منها کردن را با عدد 2 انجام میدهد که نتیجهای برابر با عدد 5 میدهد.
- عملگرهای شرکتپذیر از سمت راست: این دسته از علمگرها نیز شامل عملگر توان ** و تخصیص یا همان مساوی =میشوند. وقتی که از این عملگرها در کنار هم استفاده کنیم پایتون از راست به چپ عبارت را ارزیابی میکند. برای مثال، در عبارت 3 ** 2 ** 1 مفسر پایتون اول از همه عبارت 2**1 را محاسبه میکند که عدد 2 را بدست می آورد و بعد از آن 3**2 را محاسبه میکند و جواب نهایی برابر با عدد 9 میشود.
اهمیت شرکت پذیری
درک قانون شرکتپذیری، قسمت اجتناب ناپذیری از فهم مبحث چگونگی ارزیابی عبارتها در پایتون است. بدون فهمیدن این قانون نمیتوانیم روش اجرای عبارتهای محاسباتی را در پایتون متوجه شویم. عدم موفقیت در درک این قانون میتواند باعث رخدادن خطاهای نامحسوسی در کدها شود که پیداکردنشان نیز بسیار سخت است. برای توسعهدهندگان حرفهای یا دانشمندان داده بسیار ضروری است که برای نوشتن کدهای منطقی و بدون خطا با کارایی بالا به این قوانین بهصورت سفت و سخت پایبند باشند.
میتوان قاعده شرکتپذیری را مکملی برای قوانین مربوط به اولویت عملگرها در پایتون دانست. مسلط شدن به قوانین مربوط به هر دو مطلب شرکتپذیری و اولویت عملگرها در پایتون کمک میکند که کدها و عبارتهایی بنویسید که نه تنها از لحاظ سینتکس صحیح هستند بلکه از لحاظ منطقی هم کامل و بدون خطا هستند.
مراعات کردن این قوانین تضمین میکنند که کدهای شما دقیقا طبق انتظار عمل کنند. مخصوصا وقتی که با عملیات ریاضی و منطقی پیچیدهای کار میکنید رفتار صحیح کدها حیاتی است. پس دفعه بعد که با عبارت پیچیدهای روبهرو شدید دقیقا میدانید که پایتون این عبارت را چگونه تفسیر خواهد کرد و دانستن این مطلب، خطایابی و برطرف کردن مشکلات کد را بهصورت قابل ملاحظهای آسانتر میکند.

چند مثال برای آشنایی با عملگرها
در ادامه برای هر کدام از انواع عملگرها بهصورت جداگانه مثالی پیادهسازی کردهایم.
عملگرهای مقایسه ای
در کد پایین برای عملگرهای مقایسهای که در این مطلب در جدول بالا نمایش دادهایم. چند مثال پیادهسازی کردیم تا روش کار هر عملگر را ببینید.
عملگرهای منطقی
نمونهای از رفتار همه عملگرهای منطقی را که در این مطلب در جدول بالا توضیح دادهایم در مثال پیادهسازی شده پایین آوردهایم.
عملگرهای ریاضی
نمونهای از رفتار همه عملگرهای ریاضی را که در جدول بالای این مطلب توضیح دادهایم در مثال پیادهسازی شده پایین کدنویسی کردهایم.
عملگرهای بیتی
برای رفتار هر کدام از عملگرهای بیتی جدول ابتدای مطلب، در کد پیادهسازی شده پایین یک مثال نمایش دادهایم.
عملگرهای تخصیص
مثالی از عملکرد عملگرهای تخصیص را که در اولین جدول این مطلب مورد اشاره قرار دادهایم را در مثال پیادهسازی شده پایین آوردهایم.
مثال هایی درباره اولویت عملگرها در پایتون
عملگرها در پایتون سطوح اولویت متفاوتی دارند. وقتی که عملگرهای پایتون در عبارات پیچیده مورد ارزیابی قرار میگیرند این اولویتها هستند که ترتیب اجرای عملگرها را تعیین میکنند. به عنوان مثال، اولویت کلی برای عملگرهای منطقی از بالاترین اولویت تا پایینترین اولویت بهصورت زیر است.
- not
- and
- or
برای تغییر اولویتها میتوانید از پرانتز استفاده کنید. برای این نمونه در زیر مثالی را کدنویسی کردهایم.
در مثال بالا عملگر not بیشترین اولویت را دارد بعد از آن اولویت اجرای andبالاتر است و در آخر اولویت عملگر orقرار دارد. بنابراین در ابتدا عبارت y and not z بررسی شده است و بعد از آن نتیجه با استفاده از عملگر orبا x مقایسه شده است.
استفاده از پرانتزها به برنامهنویسان کمک میکند که بهطور صریح اولویت اجرای عملگرها را مشخص کنند و در نتیجه برنامهنویسان میتوانند اولویت اجرای عملگرها را مطابق نیازشان نگهدارند. بهخصوص در عبارتهای پیچیده برای تضمین رفتار مورد انتظار، استفاده از پرانتزها بسیار کمک کننده است.
در ادامه مثالی درباره استفاده از پرانتزها را پیادهسازی کردهایم.
در این مثال از پرانتزها برای توضیح دادن ترتیب ارزیابی عملگرها منطقی استفاده شده است تا مطمئن شویم که اولویت اجرا همانطور که انتظار داریم حفظ خواهد شد.
سوالات متداول
در انتهای این مطلب از مجله فرادرس، به سوالات متداول پیرامون موضوع اولویت عملگرها در پایتون پاسخ دادهایم.
اولویت اجرای عملگرها در پایتون چیست؟
اولویت عملگرها در پایتون ترتیبی را نشان میدهد که عملگرهای هر عبارت باید طبق آن در پایتون ارزیابی شوند. زمانی که در عبارتی چندین عملگر متفاوت استفاده شده باشند، این قاعده ترتیب اجرای عملگرها را تعیین میکند.
قوانین مربوط به اولویت عملگرها در پایتون چگونه تعیین شده اند؟
قوانین مربوط به اولویت عملگرها در پایتون توسط دستورالعملهای زبان برنامهنویسی پایتون تعیین میشوند که در واقع ترتیب اجرای هر عملگر را در عبارت محاسباتی تعیین میکند. عملگرهایی که اولویت بالاتری دارند در عبارتها قبل از عملگرهای دیگر باید اجرا شوند.
آیا می توان اولویت عملگرها را در پایتون بازنویسی کرد؟
بله اولیت عملگرها در پایتون با استفاده از پرانتزها قابل بازنویسیاند. برنامهنویسان با دستهبندی عبارتها در پرانتزها میتوانند ترتیب اجرای عملگرها را کنترل کنند. در واقع برنامهنویسان با بکاربردن پرانتزها میتوانند قوانین پیشفرض برای اولویت عملگرها را مطابق خواست خودشان دستکاری کنند.
اولویت عملگرها چگونه میتوانند بر روی خروجی عبارت ها در پایتون تاثیر بگذارند؟
اولویت عملگرها با مشخص کردن ترتیب ارزیابی عملگرها در هر عبارت بر روی خروجی آن عبارت تاثیر میگذارند. عبارتهایی که از چندین عملگر مختلف با اولویتهای مختلفی درون خود استفاده میکنند درصورت عدم کنترل مناسب بر روی اولویت عملگرها میتوانند باعث بروز خطاهای غیرمنتظرهای شوند که به سختی میتوان تشخیص داد.
چند مورد از کاربردهای رایج قوانین مربوط به اولویت عملگرها در پایتون را نام ببرید؟
به عنوان موارد کاربردی رایج برای استتفاده از قوانین اولویت عملگرها در پایتون میتوان به موارد زیر اشاره کرد.
- محاسبات ریاضی
- جریان کنترل اطلاعات
- کار بر روی رشتهها
- عملیات بیتی
- برنامهنویسی شیگرایانه
- و غیره
برنامهنویسان با کمک درک و استفاده از این قوانین بهطور موثر، میتوانند کدهای کارآمدتر و بهتری بنویسند.

جمع بندی
تسلط بر روی اولویت عملگرها در پایتون میتواند بهطرز چشمگیری مهارتهای هر برنامهنویسی را در کدنویسی ارتقا دهد و باعث کاهش باگهای برنامهها شود. برای آنهایی که علاقهمند به تسلط در پایتون هستند و میخواهند که مهارتهایشان را به سطح بالاتری ارتقا بدهند توجه به این نکات ساده ولی بسیار مهم در کدنویسی ضروری است. در این مطلب از مجله فرادرس تلاش کردیم تا بهطور کامل مبحث اولویت عملگرها در پایتون را بررسی کنیم و به همه جوانب این مبحث بپردازیم.
در این مطلب از اولویت عملگرهای پایتون صحبت کردیم و قانون PEMDAS را با تمام جزییات مورد بررسی قرار دادیم. سپس به تشریح قانون شرکتپذیری پرداختیم که مکمل قوانین مربوط به اولویت عملگرها در پایتون است. برای معرفی و نمایش هر کدام از عملگرهای مهم و پرکاربرد مثالهایی با استفاده از کد آوردیم و درنهایت به چند سوال پر تکرار در این زمینه پاسخ دادیم.