Skip to content

Latest commit

 

History

History
258 lines (161 loc) · 13.5 KB

op_exp.md

File metadata and controls

258 lines (161 loc) · 13.5 KB

اپراتورها و عبارت‌ها

بیشتر فراخوانی‌ها(خطوط منطقی) که می‌نویسید دارای عبارت‌ها هستند. عبارات‌ها را می‌توان به دو بخش تقسیم کرد عملوندها و عبارت‌ها.

برای مثال 2 + 3

اپراتور، یک قابلیتی است که می‌تواند نمادهای مانند + یا کلیدهای خاص کیبورد را استفاده کند. اپراتورها به بعضی اطلاعات برای انجام این کار نیاز دارن که به این اطلاعات عملوند می‌گویند. در این خصوص 2 و 3 عملوند هستند.

اپراتورها

به طور خلاصه‌وار به اپراتورها یک نگاهی می‌کنیم.

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

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

چند مثال برای اشنایی:

  • + (جمع)

    • اضافه کردن دو دستور العمل
    • 3 + 5 نتیجه‌اش 8.'a' + 'b' نتیجه‌اش 'ab'.
  • - (منفی)

    • کم کردن یک عدد از عدد دیگر
    • 5.2- نتیجه‌اش منفی می‌شود و 50 - 24 نتیجه‌اش 26.
  • * (ضرب)

    • ضرب دو عدد را می‌دهد یا رشته‌ی را چندبار تکرار می‌کند.
    • 2 * 3 نتیجه‌اش 6. 'la' * 3 نتیجه‌اش 'lalala' .
  • ** (توان)

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

    • تقسیم x به y
    • 3 / 13 نتیجه‌اش 4.333333333333333 .
  • // (تقسیم صحیح)

    • تقسیم x به y به صورتکی که کوچکترین عدد را در نظر می‌گیرد.
    • 3 // 13 نتیجه‌اش 4.
    • 3 // 13- نتیجه‌اش 5-.
  • % (باقیمانده)

    • باقیمانده تقسیم عدد را برمی‌گرداند.
    • 3 % 13 نتیجه‌اش 1.-25.5 % 2.25 نتیچه‌اش 1.5
  • << (به چپ جابه‌جا کردن (left shift))

    • به اندازه‌ی یک بیت از شماره به سمت چپ جابه‌جا می‌کند.(هر عدد در حافظه به صورت مبنای دودویی است مانند 0 و 1)
    • 2 << 2 نتیجه‌اش 8. 2 در مبنای دو 10 بیت را نمایش می‌دهد.
    • ۲ بیت به چپ جابه‌جا کردن نتیجه‌اش 1000 که در مبنای ده 8 را نمایش می‌دهد.
  • >> (به راست جابه‌جا کردن (right shift))

    • به اندازه‌ی یک بیت از شماره به سمت راست جابه‌جا می‌کند.
    • 11 >> 1 نتیجه‌اش 5.
    • 11 در حالتی بیتی 1011 را نمایش می‌دهد، اگر به اندازه ۱ بیت سمت راست جابه‌جا کنیم نتیجه‌اش 101 است.که در مبنای ده‌دهی 5 است.
  • & (بیت منطقی AND)

    • بیت منطقی AND و عدد
    • 3 & 5 نتیجه‌اش 1.
  • | (بیت منطقی OR)

    • بیت منطقی OR و عدد
    • 3 | 5 نتیجه‌اش 7.
  • ^ (بیت منطقی XOR)

    • بیت منطقی XOR و عدد
    • 3 ^ 5 نتیجه‌اش 6.
  • ~ (بیت منطقی (وارونه‌کردن)invert)

  • < (کمتر)

    • برسی‌می‌کند، ایا X کمتر Y است. همه‌ی مقایسه‌های عملوند‌ها True یا False را برمی‌گردانند.به این نکته‌های توجه کنید.

    • این 3 > 5 نتیجه‌اش False و 5 > 3 نتیجه‌اش True.

    • مقایسه می‌تواند به صورت زنچیره‌ای باشد: 7 > 5 > 3 نتیجه‌اش 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 (بولی NOT)

    • اگر X برارTrue باشد نتیجه‌اش False است. اگر X برار False باشد نتیجه‌اش True است.
    • این x = True; not x نتیجه‌اش False.
  • and (بولی AND)

    • این x and y نتیجه‌اش False اگر X برار False وگرنه Y را برسی می‌کند.
    • این x = False; y = True; x and y نتیجه‌اش False چونکه X برار False.در این حالت پایتون Y را ارزیابی می‌کند بخاطر انکه می‌داند قسمت راستی 'and' عبارت False است که بدان معنی است که تمامی عبارت‌ها False بدون دلالت دیگر عبارت‌ها خواهد بود. این را به نام short-circuit evaluation می‌نامیم.
  • or (بولی OR)

    • اگر x برار True باشد نتیجه‌اش True است در غیر این صورت Y را ارزیابی می‌کند.
    • این x = True; y = False; x or y نتیجه‌اش True است. در اینجاهم از Short-circuit evaluation استفاده می‌شود

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

معمولا عملیات ریاضی در متغییرها انجام می‌شود و جواب ان‌ها هم به متغییرها بر می‌گردد. بخاطر همین برای همچنین عبارت‌های مینابرهای مانند زیر را داریم:

a = 2
a = a * 3

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

a = 2
a *= 3

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

برسی سفارش

اگر شما چنین عبارتی را دارید 4 * 3 + 2 بنظر شما اول جمع می‌شود یا ضرب می‌شود؟ طبق دروس ریاضی که در دبیرستان یاد گرفتیم، باید اول عمل ضرب انجام شود. و این بدان معنی است که عملوند ضرب اولویت بیشتر نسبت به عملوند جمع دارد .

در جدول بعدی اولویت عملوندهای پایتون گفته شده است. از پایین‌ترین اولویت (اخرین مرحله) تا بالاترین اولویت(اولین مرحله). این بدان معنی است که عبارت‌های پایتون در این جدول، اول عبارت‌ها و عملوندهای که اولویت پایین‌تر دارند ارزیابی می‌شوند و بعد ان‌های که اولویت بیشتر دارند ارزیابی می‌شوند.

جدول بعدی از Python reference manual گرفته شده است. ترجیحا بهتر است که از پرانتز برای گروه‌بندی عملوند‌ها و عبارت‌ها استفاده شود. بخاطر انکه به این صورت می‌توانیم به راحتی اولویت را درک کنیم.همچنین به راحتر کردن خواندن برنامه، این موضوع کمک می‌کند.بیشتر بدانید Changing the Order of Evaluation.

  • lambda : Lambda Expression
  • if - else : Conditional expression(عبارت شرطی)
  • or : Boolean OR (OR بولی)
  • and : Boolean AND (AND بولی)
  • not x : Boolean NOT (NOT بولی)
  • in, not in, is, is not, <, <=, >, >=, !=, == : Comparisons, including membership tests and identity tests (مقایسه، شامل ارزیابی هویت ، انتساب متغییر)
  • | : Bitwise OR (OR بیت‌منطقی)
  • ^ : Bitwise XOR (XOR بیت‌منطقی)
  • & : Bitwise AND (AND بیت‌منطقی)
  • <<, >> : Shifts (جابه‌جاکردن یا همون شیفت دادن)
  • +, - : Addition and subtraction (جمع و تفریق)
  • *, /, //, % : Multiplication, Division, Floor Division and Remainder (ضرب، تقسیم، تقسیم صحیح و باقیمانده)
  • +x, -x, ~x : Positive, Negative, bitwise NOT (NOT مثت، منفی، بیت‌منطقی)
  • ** : Exponentiation
  • x[index], x[index:index], x(arguments...), x.attribute : Subscription, slicing, call, attribute reference (فراخوانی، بقیه را هر کسی که معنی تخصصی ‌اش را می‌داند بگذارد)
  • (expressions...), [expressions...], {key: value...}, {expressions...} : Binding or tuple display, list display, dictionary display, set display (...)

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

اپراتورهای که اولویت یکسان دارند همان طور که در جدول بالا می‌بیند. برای مثال + و - که اولویت یکسانی دارند. تمامی انان در یک خط نوشته شده‌اند.

تغییر دادن به منظور ارزیابی

{#changing-order-of-evaluation}

برای انکه عبارت‌ها را بهتر بفهیم و راحتر قابل خواندن باشند می‌توانیم پرانتز استفاده کنیم. برای مثال 2 + (3 * 4) واقعا فهم این راحتر از 2 + 3 * 4 بخاطرهمین اولویت عملوندها یادگیراش مهم است. این را هم در نظر بگیرید که پرانتزها باید عاقلانه استفاده شوند(جوگیر نشوید).همچین پرانتزها باید مقداردهی شوند برای مثال (2 + (3 * 4)).

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

ارتباطات

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

عبارت‌ها

مثال (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+ خروجی 2 * (length + breadth) را چاپ می‌کنیم. همین طور که مشاهده می‌کنید دراینجا از محتویات عبارت‌ها استفاده می‌کنیم.

همچنین این نکته را در نظر بگیرید که پایتون به چه زیبایی خروجی را چاپ می‌کند. حتی با اینکه بین 'Area is' و متغییر area فاصله نگذاشتیم. به چه زیبایی پایتون این فاصله‌های را گذشته است. برای این که یک خروجی تمیز و قابل خواندن داشته باشیم(دیگر نیاز نیست برای فاصله‌ی خطوط نگران باشیم). این یکی از مثال‌ها‌ی است که پایتون زندگی برنامه‌نویسان را اسوده‌تر می‌کند.

خلاصه

چگونگی استفاده از اپراتورها و عبارت‌ها را دیدیم. این موضوع یک ساختار مهم در بلوک‌های برنامه‌نویسی است. در فصول بعدی خواهیم دید چگونه دربرنامه‌هایمان ازفراخوانی‌ها استفاده کنیم.

test