RASPBERRY_PYTHON Telegram 6463
یکی از کاربرد های bitwise operator ها:

سلام. اگرچه توی زبان های سطح پایین تر استفاده از bitwise operator ها خیلی مرسومه، توی پایتون کمتر نیاز میشه تا برای حل مشکلمون بریم سراغشون و عموما از جایگزین های high-level تری استفاده میکنیم. ولی دونستن اینکه چیکار میکنن بعضی جاها میتونه مفید باشه.

فرض کنید میخوایم با یک regex ساده یه عبارتی رو match کنیم:
import re
print(re.search("ABC.", "abc\n"))
مچ نمیشن! حالا کافیه به عنوان flag بهش عدد ۱۸ رو بدیم:
print(re.search("ABC.", "abc\n", flags=18))
مچ شد! درواقع با دادن عدد ۱۸ بهش گفتیم که case-insensitive باش و new line character ها رو هم با نقطه بگیر. ولی چطور از عدد ۱۸ این رو فهمید؟

موضوع اینجاست که ما یک سری فلگ از پیش تعریف شده داریم که توان های عدد ۲ هستن. اگه یه نگاه بشون بندازیم:

TEMPLATE = 1 -> 00000001
IGNORECASE = 2 -> 00000010
LOCALE = 4 -> 00000100
MULTILINE = 8 -> 00001000
DOTALL = 16 -> 00010000
ما درواقع IGNORECASE رو OR کردیم با DOTALL که شد:
00010010
یا همون ۱۸.

حالا اگر کسی به ما عدد ۱۸ رو بده چطور میتونیم بفهمیم چه flag هایی ست شده؟ با AND:
TEMPLATE = 1
IGNORECASE = 2
LOCALE = 4
MULTILINE = 8
DOTALL = 16

flag = 18
if flag & TEMPLATE:
print("Has TEMPLATE flag")
if flag & IGNORECASE:
print("Has IGNORECASE flag")
if flag & DOTALL:
print("Has DOTALL flag")

به جای پاس دادن عدد ۱۸ میشه خیلی راحت از "|" استفاده کرد و چیزی رو حفظ نکرد:
print(re.search("ABC.", "abc\n", flags=IGNORECASE | DOTALL))
این خودش ۱۸ رو میفرسته.

نکته ی خوبش این بود که تنها با یک عدد این اطلاعات رو منتقل کردیم.

مثال دومی که از این استفاده کرده ماژول selectors هست که وقتی یه socket ای آماده میشه و میخواد بگه آماده ی read هست یا write ، بهمون یه mask میده که از روی این mask باید بفهمیم. یعنی یه همچین چیزی داریم:

EVENT_READ = (1 << 0)
EVENT_WRITE = (1 << 1)

اگه ۳ بود یعنی هم READ هم WRITE. اگه ۲ بود یعنی فقط WRITE، اگه 1 بود یعنی فقط READ.
با همون if بالا متوجه میشیم و کاری که قرار هست انجام بدیم رو با توجه به این عدد انجام میدیم.

🖊 @AmirSoroushh
👍9



tgoop.com/raspberry_python/6463
Create:
Last Update:

یکی از کاربرد های bitwise operator ها:

سلام. اگرچه توی زبان های سطح پایین تر استفاده از bitwise operator ها خیلی مرسومه، توی پایتون کمتر نیاز میشه تا برای حل مشکلمون بریم سراغشون و عموما از جایگزین های high-level تری استفاده میکنیم. ولی دونستن اینکه چیکار میکنن بعضی جاها میتونه مفید باشه.

فرض کنید میخوایم با یک regex ساده یه عبارتی رو match کنیم:

import re
print(re.search("ABC.", "abc\n"))
مچ نمیشن! حالا کافیه به عنوان flag بهش عدد ۱۸ رو بدیم:
print(re.search("ABC.", "abc\n", flags=18))
مچ شد! درواقع با دادن عدد ۱۸ بهش گفتیم که case-insensitive باش و new line character ها رو هم با نقطه بگیر. ولی چطور از عدد ۱۸ این رو فهمید؟

موضوع اینجاست که ما یک سری فلگ از پیش تعریف شده داریم که توان های عدد ۲ هستن. اگه یه نگاه بشون بندازیم:

TEMPLATE = 1 -> 00000001
IGNORECASE = 2 -> 00000010
LOCALE = 4 -> 00000100
MULTILINE = 8 -> 00001000
DOTALL = 16 -> 00010000
ما درواقع IGNORECASE رو OR کردیم با DOTALL که شد:
00010010
یا همون ۱۸.

حالا اگر کسی به ما عدد ۱۸ رو بده چطور میتونیم بفهمیم چه flag هایی ست شده؟ با AND:
TEMPLATE = 1
IGNORECASE = 2
LOCALE = 4
MULTILINE = 8
DOTALL = 16

flag = 18
if flag & TEMPLATE:
print("Has TEMPLATE flag")
if flag & IGNORECASE:
print("Has IGNORECASE flag")
if flag & DOTALL:
print("Has DOTALL flag")

به جای پاس دادن عدد ۱۸ میشه خیلی راحت از "|" استفاده کرد و چیزی رو حفظ نکرد:
print(re.search("ABC.", "abc\n", flags=IGNORECASE | DOTALL))
این خودش ۱۸ رو میفرسته.

نکته ی خوبش این بود که تنها با یک عدد این اطلاعات رو منتقل کردیم.

مثال دومی که از این استفاده کرده ماژول selectors هست که وقتی یه socket ای آماده میشه و میخواد بگه آماده ی read هست یا write ، بهمون یه mask میده که از روی این mask باید بفهمیم. یعنی یه همچین چیزی داریم:

EVENT_READ = (1 << 0)
EVENT_WRITE = (1 << 1)

اگه ۳ بود یعنی هم READ هم WRITE. اگه ۲ بود یعنی فقط WRITE، اگه 1 بود یعنی فقط READ.
با همون if بالا متوجه میشیم و کاری که قرار هست انجام بدیم رو با توجه به این عدد انجام میدیم.

🖊 @AmirSoroushh

BY 🐍 Python & Raspberry 🐍


Share with your friend now:
tgoop.com/raspberry_python/6463

View MORE
Open in Telegram


Telegram News

Date: |

As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. The public channel had more than 109,000 subscribers, Judge Hui said. Ng had the power to remove or amend the messages in the channel, but he “allowed them to exist.” You can invite up to 200 people from your contacts to join your channel as the next step. Select the users you want to add and click “Invite.” You can skip this step altogether. While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc. Choose quality over quantity. Remember that one high-quality post is better than five short publications of questionable value.
from us


Telegram 🐍 Python & Raspberry 🐍
FROM American