بسیاری از اوقات در زبان های برنامه نویسی در شرایطی قرار می گیریم که خروجی یک دستور true (صحیح) یا false (غلط) می باشد. ما می توانیم تقریبا تمام دستورات در پایتون را به همین شکل ارزیابی کرده و آن ها را به true یا false برسانیم. به طور مثال زمانی که دو مقدار را مقایسه کنید، پایتون آن ها را ارزیابی کرده و مقدار true یا false را برمی گرداند:
print(10 > 9) print(10 == 9) print(10 < 9)
خروجی:
True False False
همچنین هنگامی که شرطی را در یک دستور if قرار می دهید، پایتون یک مقدار Boolean (یعنی true یا false) را برمی گرداند. مثال:
a = 200 b = 33 if b > a: print("b is greater than a") else: print("b is not greater than a")
خروجی:
b is not greater than a
در مثال بالا برای شرط مورد نظر مقدار false برگردانده می شود (33 بزرگتر از 200 نیست) بنابراین قسمت else اجرا می شود.
البته بعضی اوقات تشخیص اینکه فلان مقدار برابر با true یا false است برای برنامه نویسان مبتدی کار سختی است. اگر شما هم از این دسته افراد هستید، برای راحت تر شدن کارتان از تابع ()bool استفاده کنید؛ این تابع هر مقداری را ارزیابی کرده و به جای آن true یا false برمی گرداند. مثال:
print(bool("Hello")) print(bool(15))
خروجی:
True
True
همچنین مثالی دیگر:
x = "Hello" y = 15 print(bool(x)) print(bool(y))
خروجی:
True
True
هشدار: تقریبا تمامی دستورات و مقادیر برابر با true هستند:
مثالی از مقادیر true:
print(bool("abc")) print(bool(123)) print(bool(["apple", "cherry", "banana"]))
خروجی:
True
True
True
مثالی از مقادیر false:
print(bool(False)) print(bool(None)) print(bool(0)) print(bool("")) print(bool(())) print(bool([])) print(bool({}))
خروجی:
False
False
False
False
False
False
False
نکته: اگر اشیائی داشته باشید که از کلاسی با تابع __len__
ساخته شده باشند که آن تابع مقدار صفر یا false برگرداند، شیء ما نیز false خواهد بود:
class myclass(): def __len__(self): return 0 myobj = myclass() print(bool(myobj))
مشخصا خروجی false است.
توجه داشته باشید که توابع نیز می توانند مقادیر Boolean برگردانند (محدود به شرط ها نیست). به طور مثال تابع ()isinstance تعیین می کند که مقدار شما از نوع داده ای خاص است یا خیر؛ در صورتی که از آن نوع داده بود true و در غیر این صورت false را برمی گرداند:
x = 200 print(isinstance(x, int))
در اینجا پرسیده ایم که آیا عدد x از نوع int (عدد صحیح) است یا خیر. خروجی قطعا true می باشد.
اپراتورها در پایتون به ما این امکان را می دهند که روی متغیرها و مقادیر متفاوت عملیات های مختلفی را اجرا کنیم. زبان پایتون اپراتورها را به دسته های زیر تقسیم می کند:
اپراتور | نام |
مثال |
+ | جمع | x + y |
- | تفریق | x - y |
* | ضرب | x * y |
/ | تقسیم | x / y |
% | باقی مانده | x % y |
** | توان | x ** y |
// | Floor division | x // y |
نکته: floor division در جدول بالا x را بر y تقسیم کرده سپس مقدار را به پایین ترین عدد بدون اعشار گرد می کند:
x = 15 y = 2 print(x // y)
خروجی مقدار 7 خواهد بود.
دیگر موارد جدول نیز بسیار ساده بوده و از عملیات های پایه ی ریاضی محسوب می شوند.
اپراتورهای انتساب زمانی کارایی دارند که بخواهیم مقداری را به متغیری نسبت دهیم، به زبان ساده تر متغیر را مقداردهی کنیم:
اپراتور | مثال | معادل |
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x - 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
//= | x //= 3 | x = x // 3 |
**= | x **= 3 | x = x ** 3 |
&= | x &= 3 | x = x & 3 |
|= | x |= 3 | x = x | 3 |
^= | x ^= 3 | x = x ^ 3 |
>>= | x >>= 3 | x = x >> 3 |
<<= | x <<= 3 |
x = x << 3 |
نکته: ما از اپراتورهایی مانند |= تقریبا هیچگاه استفاده نمی کنیم، چرا که مربوط به کار با bit ها می باشند و مخصوص پروژه های خیلی خاص و بسیار پیشرفته است. مثال ساده:
x = 5 x += 3 print(x)
خروجی عدد 8 می باشد.
همانطور که از نام این اپراتورها مشخص است، مخصوص مقایسه بین دو مقدار هستند:
اپراتور | نام | مثال |
== | مساوی است با | x == y |
!= | مساوی نیست با | x != y |
> | بزرگتر است از | x > y |
< | کوچکتر است از | x < y |
>= | بزرگتر یا مساوی با | x >= y |
<= | کوچکتر یا مساوی با | x <= y |
مثالی ساده:
x = 5 y = 3 print(x >= y)
خروجی قطعا true می باشد.
اپراتورهای منطقی برای ترکیب کردن دستورات شرطی استفاده می شوند:
اپراتور | توضیحات | مثال |
and | اگر هر دو دستور صحیح باشند مقدار true برمیگرداند |
x < 5 and x < 10 |
or | اگر یکی از دو دستور صحیح باشد مقدار true برمیگرداند | x < 5 or x < 4 |
not | نتایج را برعکس میکند؛ اگر نتیجه true باشد مقدار false را برمیگرداند. |
not(x < 5 and x < 10) |
مثالی ساده:
x = 5 print(x > 3 and x < 10)
خروجی عبارت True خواهد بود چرا که هر دو شرط صحیح است.
این نوع اپراتورها برای مقایسه ی اشیاء استفاده می شوند؛ البته نه برای اینکه آیا برابر هستند یا خیر بلکه از این جهت مقایسه می شوند که آیا یکی هستند و مکان یکسانی را در حافظه اشغال می کنند یا خیر:
اپراتور | توضیحات | مثال |
Is | اگر هر دو متغیر یکی باشند true را برمیگرداند. | x is y |
Is not | اگر هر دو متغیر یکی نباشند مقدار true را برمیگرداند. | x is not y |
مثالی ساده:
x = ["apple", "banana"] y = ["apple", "banana"] z = x print(x is z)
خروجی true است چرا که z همان x است.
print(x is y(
خروجی false است چرا که x و y دو شیء متفاوت هستند (حتی اگر محتوایشان یکی باشد، به صورت جداگانه تعریف شده و در حافظه ی برنامه جایگاه جداگانه ای دارند).
print(x == y)
خروجی true است. در این قسمت می خواستم تفاوت بین == و is را بدانید؛ بر اساس == متغیرهای x و y یکی هستند چرا که محتویاتشان یکی است (کاری به جایگاه آن ها در حافظه ندارد).
این اپراتورها بررسی می کنند که آیا sequence (سری یا توالی) خاصی در یک شیء موجود است یا خیر:
اپراتور | توضیحات | مثال |
in | اگر توالی خاصی با مقدار خاصی درون شیء باشد، مقدار true برگردانده می شود. | x in y |
Not in | اگر توالی خاصی با مقدار خاصی درون شیء نباشد، مقدار true برگردانده می شود. | x not in y |
مثالی ساده:
x = ["apple", "banana"] print("banana" in x)
خروجی true است چرا که این رشته در شیء موجود است.
اپراتورهای bitwise برای مقایسه ی اعداد باینری (دودویی) استفاده می شود:
اپراتور | نام | توضیحات |
& | AND | اگر هر دو بیت 1 باشند، تک تک بیت ها را به 1 تبدیل میکند. |
| | OR | اگر یکی از دو بیت 1 باشند، تک تک بیت ها را به 1 تبدیل میکند. |
^ | XOR | اگر فقط یکی از دو بیت 1 باشند، تک تک بیت ها را به 1 تبدیل میکند. |
~ | NOT | تمام بیت ها را برعکس میکند. |
<< | Zero fill left shift | از سمت راست صفر اضافه میکند تا بیت هایی که در سمت چپ هستند، خارج شوند. |
>> | Signed right shift | از بیت های سمت چپ کپی گرفته و آن ها را از همان سمت چپ وارد میکند تا بیت های سمت راست خارج شوند (حذف شوند). |
به شما اطمینان می دهم که تقریبا هیچگاه از این اپراتورها استفاده نخواهید کرد، حتی برای طراحی وب سایت های پیشرفته. موارد استفاده از این اپراتورها بسیار بسیار نادر و خاص است. امیدوارم این مقاله درک عمیقی نسبت به اپراتورهای این زبان به شما داده باشد. ما در طول این دوره مکررا از این اپراتورها استفاده خواهیم کرد، بنابراین از نظر یادگیری جای نگرانی نیست.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.