عملگرها و عبارت ها {op-exp#}

بیشتر دستورها (خطوط منطقی) که می نویسید شامل عبارات (expressions) هستند. یک مثال ساده از عبارت، 3 + 2 است. یک عبارت را می توان به عملگرها و عملوندها تجزیه کرد.

عملگرها قابلیتی هستند که کاری را انجام می دهند و می توان آنها را با نمادهایی مانند + یا با کلمات کلیدی خاص نمایش داد. عملگرها برای انجام عملیات خود به داده هایی نیاز دارند و این داده ها عملوند نامیده می شوند. در این مثال، 2 و 3 عملوند هستند.

عملگرها

در این بخش نگاهی کوتاه و مختصر به عملگرها و کاربرد آنها خواهیم داشت.

توجه داشته باشید که می توانید عبارات داده شده در مثال ها را با استفاده از مفسر و به صورت تعاملی ارزیابی کنید. برای مثال، برای آزمایش عبارت 3 + 2، از خط فرمان مفسر تعاملی پایتون استفاده کنید:

>>> 2 + 3
5
>>> 3 * 5
15
>>>

در اینجا، مروری سریع بر عملگرهای موجود ارائه شده است:

  • + (جمع)

    • دو شئ را با یکدیگر جمع می کند.
    • 5 + 3 مقدار 8 را می دهد. عبارت 'a' + 'b' مقدار 'ab' را ایجاد می کند.
  • - (تفریق)

    • تفریق یک عدد از عدد دیگر را انجام می دهد؛ اگر عملوند اول موجود نباشد، مقدار آن صفر در نظر گرفته می شود.
    • -5.2 یک عدد منفی ایجاد می کند و عبارت 24 - 50 مقدار 26 را می دهد.
  • * (ضرب)

    • حاصل ضرب دو عدد را بر می گرداند یا رشته را به همان تعداد مشخص تکرار می کند.
    • 3 * 2 مقدار 6 را ایجاد می کند. عبارت 'la' * 3' مقدار 'lalala' را می دهد.
  • ** (توان )

    • مقدار x را به توان y بر می گرداند.
    • 4**3 مقدار 81 را می دهد (یعنی 3 * 3 * 3 * 3)
  • / (تقسیم)

    • مقدار x را بر y تقسیم می کند.
    • 3 / 13 مقدار 4.333333333333333 را ایجاد می کند.
  • // (تقسیم و کف)

    • مقدار x را بر y تقسیم می کند و پاسخ را به سمت پایین تا نزدیک ترین مقدار صحیح گرد می کند. توجه داشته باشید که اگر یکی از مقادیر از نوع اعشاری باشد، نتیجه نیز از نوع اعشاری خواهد بود.
    • 3 // 13 مقدار 4 را ایجاد می کند.
    • 3 // 13- مقدار 5- را می دهد.
    • 1.81 // 9 مقدار 4.0 را می دهد.
  • % (باقی مانده)

    • باقی مانده حاصل از تقسیم را بر می گرداند.
    • 3 % 13 مقدار 1 را می دهد. 2.25 % 25.5- مقدار 1.5 را ایجاد می کند.
  • >> (شیفت به چپ )

    • بیت های یک عدد را به اندازۀ تعداد بیت های مشخص شده به چپ جا به جا می کند ( هر عدد در حافظه توسط بیت ها یا ارقام باینری یعنی 0 و 1، نمایش داده می شود).
    • 2 >> 2 مقدار 8 را می دهد. 2 در نمایش بیتی با 10 مشخص می شود.
    • با شیفت دادن 2 بیت به چپ، مقدار 1000 به دست می آید که نشان دهندۀ عدد 8 است.
  • << (شیفت به راست )

    • بیت های یک عدد را به اندازۀ تعداد بیت های مشخص شده به سمت راست جا به جا می کند.
    • 1 << 11 مقدار 5 را می دهد. 11 >> 1 gives 5.
    • عدد 11 در نمایش بیتی به صورت 1011 است که با شیفت 1 بیت به سمت راست، به 101 تبدیل می شود که همان عدد 5 است.
  • & (AND)

    • عمل AND بیتی را روی اعداد انجام می دهد: اگر هر دو عدد 1 باشند، نتیجه 1 خواهد بود. در غیر این صورت، نتیجه 0 می شود.
    • عبارت 3 & 5 مقدار 1 را می دهد. (عبارت 0011 & 0101 مقدار 0001 را می دهد)
  • | (OR)

    • عمل OR بیتی را روی اعداد انجام می دهد: اگر هر دو عدد 1 باشند، نتیجه 0 خواهد بود. در غیر این صورت، 1 خواهد بود.
    • عبارت 3 | 5 مقدار 7 را می دهد. (0011 | 0101 مقدار 0111 را ایجاد می کند).
  • ^ (XOR)

    • عمل XOR بیتی را روی اعداد انجام می دهد: اگر هر دو بیت (0 یا 1) یکسان باشند، نتیجه 0 می شود. در غیر این صورت، 1 می شود.
    • 3 ^ 5 مقدار 6 را می دهد (0011 ^ 0101 مقدار 0110 را ایجاد می کند).
  • ~ (معکوس بیتی)

    • معکوس بیتی x برابر با (x+1)- است.
    • عبارت 5~ مقدار 6- را می دهد. جزئیات بیشتر را می توانید در http://stackoverflow.com/a/11810203 مشاهده کنید.
  • > (کوچک تر از)

    • بررسی می کند که آیا x از y کوچکتر است یا خیر. تمام عملگرهای مقایسه ای مقدار True یا False را بر می گردانند. به بزرگ و کوچک بودن حروف در این نام ها توجه کنید.
    • 3 > 5 مقدار False و 5 > 3 مقدار True باز می گرداند.
    • مقایسه ها را می توان به صورت زنجیره ای و بدون محدودیت خاصی انجام داد: 3 < 5 < 7 مقدار True را ایجاد می کند.
  • < (بزرگ تر از)

    • بررسی می کند که آیا x بزرگتر از y است یا خیر.
    • عبارت 3 < 5 مقدار True را بر می گرداند. اگر هردو عملوند عدد باشند، ابتدا به یک نوع مشترک تبدیل می شوند. در غیر این صورت، مقدار False را بر می گرداند.
  • => (کوچک تر یا مساوی)

    • بررسی می کند که آیا x کوچکتر یا مساوی با y است یا خیر.
    • عبارت x = 3; y = 6; x <= y مقدار True را ایجاد می کند.
  • >= (بزرگتر یا مساوی)>=

    • بررسی می کند که آیا x از y بزرگتر یا مساوی است یا خیر.
    • عبارت x = 4; y = 3; x >= 3 مقدار True را بر می گرداند.
  • == (مساوی)

    • بررسی می کند که آیا دو شئ با یکدیگر برابر هستند یا خیر.
    • عبارت x = 2; y = 2; x == y مقدار True را بر می گرداند.
    • عبارت x = 'str'; y = 'stR'; x == y مقدار False را بر می گرداند.
    • عبارت x = 'str'; y = 'str'; x == y مقدار True را بر می گرداند.
  • =! (نا مساوی)

    • بررسی می کند که آیا دو شئ با یکدیگر برابر نیستند.
    • عبارت x = 2; y = 3; x != y مقدار True را بر می گرداند.
  • not (boolean NOT)

    • اگر x برابر True باشد، مقدار False را بر می گرداند. اگر x برابر False باشد، مقدار True را بر می گرداند.
    • عبارت x = True; not x مقدار False را باز می گرداند.
  • and (boolean AND)

    • اگر x برابر False باشد، عبارت x and y مقدار False را بر می گرداند. در غیر این صورت، نتیجۀ ارزیابی y را بر می گرداند.
    • عبارت x = False; y = True; x and y مقدار False را بر می گرداند زیرا x برابر False است. در این شرایط، پایتون y را ارزیابی نمی کند زیرا می داند سمت چپ عبارت 'and' برابر False است بنابراین صرف نظر از مقادیر دیگر کل عبارت False خواهد بود. این رفتار ارزیابی اتصال کوتاه (short-circuit evaluation) نامیده می شود.
  • or (boolean OR)

    • اگر x برابر True باشد، مقدار True را بر می گرداند. در غیر این صورت، نتیجۀ ارزیابی y را بر می گرداند.
    • عبارت x = True; y = False; x or y مقدار True را باز می گرداند. در اینجا نیز ارزیابی اتصال کوتاه اعمال می شود.

میان بر برای عملیات ریاضی و انتساب

معمول است که یک عملیات ریاضی را روی یک متغیر اجرا کنیم و سپس نتیجۀ آن عملیات را دوباره به همان متغیر نسبت دهیم. بنابراین، برای چنین عباراتی یک میان بر وجود دارد:

a = 2
a = a * 3

را نیز می توان به صورت زیر نوشت:

a = 2
a *= 3

توجه کنید که عبارت var = var operation expression به صورت var operation = expression نوشته می شود.

ترتیب ارزیابی

اگر عبارتی مانند 4 * 3 + 2 داشته باشید، ابتدا جمع انجام می شود یا ضرب؟ ریاضیات دبیرستان به ما می آموزد که ابتدا ضرب باید انجام شود. این بدان معناست که عملگر ضرب نسبت به عملگر جمع تقدم دارد.

جدول زیر ترتیب تقدم عملگرها در پایتون را نشان می دهد؛ این جدول از کمترین تقدم (کمترین میزان اتصال) تا بیشترین تقدم (بیشترین مقدار اتصال) مرتب شده است. این بدان معناست که در یک عبارت مشخص، پایتون ابتدا عملگرها و عباراتی را ارزیابی می کند که در بخش پایین تر جدول قرار دارند و سپس به مواردی می پردازد که در بخش بالاتر جدول آمده اند.

جدول زیر که از راهنمای مرجع پایتون گرفته شده است، برای کامل بودن مطالب ارائه شده است. بسیار بهتر است که برای گروه بندی مناسب عملگرها و عملوندها از پرانتز استفاده کنید تا تقدم آنها را به صورت آشکار مشخص کنید. این کار باعث خوانایی بیشتر برنامه می شود. برای جزئیات بیشتر به تغییر ترتیب ارزیابی مراجعه کنید.

  • lambda : lambda عبارت
  • if - else : عبارت شرطی
  • or : Boolean OR
  • and : Boolean AND
  • not x : Boolean NOT
  • in, not in, is, is not, <, <=, >, >=, !=, == : مقایسه ها، شامل آزمون های عضویت و آزمون های هویتی
  • | : Bitwise OR
  • ^ : Bitwise XOR
  • & : Bitwise AND
  • <<, >> : شیفت ها
  • +, - : جمع و تفریق
  • *, /, //, % : ضرب، تقسیم، تقسیم و کف و باقی مانده
  • +x, -x, ~x : Positive, Negative, bitwise NOT
  • ** : توان رسانی
  • x[index], x[index:index], x(arguments...), x.attribute : دسترسی به عنصر، برش، فراخوانی و ارجاع به ویژگی
  • (expressions...), [expressions...], {key: value...}, {expressions...} : ایجاد اتصال یا تاپل، ایجاد لیست، ایجاد دیکشنری، ایجاد مجموعه

عملگرهایی که تاکنون با آنها آشنا نشده ایم، در فصل های بعدی توضیح داده خواهند شد.

عملگرهایی که تقدم یکسانی دارند در یک ردیف از جدول بالا قرار گرفته اند. برای مثال، + و - تقدم یکسانی دارند.

تغییر ترتیب ارزیابی {changing-order-of-evaluation#}

برای خواناتر کردن عبارات، می توانیم از پرانتزها استفاده کنیم. برای مثال، (4 * 3) + 2 قطعاً درک ساده تری نسبت به 4 * 3 + 2 دارد، زیرا عبارت دوم به دانستن تقدم عملگرها نیاز دارد. همانند هر چیز دیگری، پرانتزها باید به اندازه و به صورت منطقی استفاده شوند (در استفاده از آنها زیاده روی نکنید) و نباید اضافی باشند؛ مانند ((4 * 3) + 2).

استفاده از پرانتز یک مزیت دیگر نیز دارد - به ما اجازه می دهد ترتیب ارزیابی را تغییر دهیم. برای مثال، اگر بخواهید در یک عبارت، جمع پیش از ضرب انجام شود، می توانید چیزی مانند 4 * (3 + 2) بنویسید.

شرکت پذیری

عملگرها معمولاً از چپ به راست با یکدیگر ترکیب می شوند. این بدان معناست که عملگرهایی با تقدم یکسان، به ترتیب از چپ به راست ارزیابی می شوند. برای مثال، 4 + 3 + 2 به صورت 4 + (3 + 2) ارزیابی می شود.

عبارات

مثال را با نام expression.py ذخیره کنید:

length = 5
breadth = 2

area = length * breadth
print('Area is', area)
print('Perimeter is', 2 * (length + breadth))

خروجی:

$ python expression.py
Area is 10
Perimeter is 14

نحوۀ عملکرد

طول و عرض مستطیل در متغیرهایی با همین نام ذخیره می شوند. از این متغیرها برای مساحبۀ مساحت و محیط مستطیل با کمک عبارت ها استفاده می کنیم. نتیجۀ عبارت length * breadth را در متغیر area ذخیره کرده و سپس با استفاده از تابع print آن را چاپ می کنیم. در حالت دوم، مستقیماً از مقدار عبارت (length + breadth) * 2 در تابع print استفاده می کنیم.

همچنین توجه کنید که پایتون خروجی را به شکلی مرتب و خوانا چاپ می کند. اگرچه فاصله ای بین 'Area is' و متغیر area مشخص نکرده ایم، پایتون این فاصله را برای ما قرار می دهد تا خروجی مرتبی داشته باشیم و برنامه نیز به این شکل خواناتر باشد؛ زیرا دیگر لازم نیست نگران فاصله گذاری در رشته هایی باشیم که برای خروجی استفاده می کنیم. این نمونه ای از این است که چگونه پایتون کار برنامه نویس را آسان می کند.

جمع بندی

دیدیم که چگونه از عملگرها، عملوندها و عبارات استفاده کنیم؛ این ها اجزای سازندۀ اساسی هر برنامه هستند. در ادامه، خواهیم دید که چگونه با استفاده از دستورها از این موارد در برنامه های خود بهره بگیریم.

results matching ""

    No results matching ""