بکندباز

تفاوت بین ‘and’ و ‘&’ در پایتون

دوره پیشنهادی:  آموزش پایتون

and یک AND منطقی است که اگر هر دو عملوند true باشند True را برمی گرداند در حالی که ‘&’ یک عملگر بیتی در پایتون است که روی بیت ها عمل می کند و عملیات بیت به بیت را انجام می دهد. در ادامه با مثال هایی این موضوع را باز می کنیم.

توجه: هنگامی که یک مقدار صحیح 0 باشد، در صورت استفاده در عملیات منطقی به عنوان False در نظر گرفته می شود و در غیر این صورت True در نظر گرفته می شود.

مثال:

# کد پایتون برای بررسی تفاوت بین and و &

a = 14
b = 4

print(b and a) # دستور چاپ 1
print(b & a) #دستور چاپ 2

خروجی:

14
4

این به این دلیل است که ‘and’ بررسی می کند که آیا هر دو عبارت از نظر منطقی True هستند یا خیر، در حالی که ‘&’ عمل بیتی AND را روی هر دو عبارت انجام می دهد.

در دستور چاپ 1، کامپایلر بررسی می کند که آیا عبارت اول True است یا خیر. اگر عبارت اول False باشد، دستور دوم را بررسی نمی کند و بلافاصله False را برمی گرداند، چرا که عملیات AND بین یک False با هر چیزی False است. این کار با عنوان “ارزیابی تنبل (lazy evaluation)” شناخته می شود. اگر عبارت اول True باشد، شرط دوم بررسی می شود و طبق قوانین عملیات AND، فقط در صورتی نتیجه True است که هر دو عبارت True باشند. در مورد مثال بالا، کامپایلر عبارت اول را بررسی می کند. از آنجایی که مقدار b برابر 4 است، True است (هر عددی غیر از صفر True است). سپس به سمت دستور دوم حرکت می کند که آن نیز True است زیرا مقدار a برابر با 14 است. بنابراین، خروجی True می شود.

در عملیات AND خروجی True به شکل مقدار آخرین دستوری که اجرا شده است نمایش داده می شود. یعنی مقدار True در خروجی برگردانده نمی شود و معادل آن عدد 14 در خروجی برگردانده می شود. اگر یکی از (یا هر دوی) دستورات False باشند، همان مقدار به عنوان False برگردانده می شوند. (در مثال های بعد این موضوع را بیشتر بررسی می کنیم.)

در دستور چاپ 2، کامپایلر عملیات AND بیتی را بین مقدار دو دستور انجام می دهد. یعنی حاصل هر دو دستور، به صورت باینری تبدیل شده و بیت به بیت عملیات AND بین آنها انجام می شود و نتیجه دوباره به صورت دسیمال برگردانده خواهد شد. در اینجا، عبارت به صورت زیر ارزیابی می شود:
مقدار 4 در باینری 0000 0100 و مقدار 14 در باینری برابر با 0000 1110 است.

0000 0100
   & = 0000 0100 = 4
0000 1110

بنابراین، خروجی 4 است.

برای تشریح این موضوع می‌توانیم مثال دیگری بزنیم.

مثال:

# کد پایتون برای بررسی تفاوت بین and و &

a, b = 9, 10
print(a & b)#خط 1
print(a and b)#خط 2

خروجی:

8
10

در خط اول عملیات AND به صورت بیتی روی a و b انجام می شود و در خط دوم عملیات AND منطقی انجام می شود.
در خط 1، a = 1001، b = 1010، انجام & روی a و b، مقدار 1000 را به ما می دهد که مقدار باینری عدد 8 است.

در خط 2، عبارت ‘a and b’ ابتدا a را ارزیابی می کند. اگر a برابر با False (یا صفر) باشد، مقدار آن بلافاصله به دلیل “ارزیابی تنبل” که در بالا توضیح داده شد، برگردانده می شود، در غیر این صورت، b ارزیابی می شود. اگر b نیز غیر صفر باشد، مقدار حاصل برگردانده می شود. در اینجا نتیجه True است پس مقدار b برگردانده می شود زیرا آخرین مقداری است که بررسی می شود.

مثال:

# کد پایتون برای بررسی تفاوت بین and و &

a, b = 0, 10
print(a & b)#0
print(a and b)#0

خروجی:

0
0

در این مثال مقدار a & b برابر با 0 است. چرا عملیات بیتی بین هر عدد و 0 برابر با صفر می شود.

مقدار a and b برابر با False خواهد بود. چرا که در عملیات AND منطقی اگر اولین مقدار False باشد، همان در خروجی چاپ می شود و در اینجا مقدار False برابر با 0 است.

مثال:

# کد پایتون برای بررسی تفاوت بین and و &

a, b = False, 14
print(a & b)# 0
print(a and b)# False

خروجی:

0
False

در این مثال مقدار a & b برابر با 0 است. چرا که مقدار باینری False برابر با صفر بوده و عملیات بیتی بین a و b نیز برابر با صفر می شود.

مقدار a and b برابر با False خواهد بود. چرا که در عملیات AND منطقی اگر اولین مقدار False باشد، همان در خروجی چاپ می شود.

 

zohreh

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*

    H. Gh پاسخ

    خیلی قشنگ و واضح توضیح دادید، ممنونم.