💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - astral-sh/rye: a Hassle-Free Python Experience
a Hassle-Free Python Experience. Contribute to astral-sh/rye development by creating an account on GitHub.
ادبیات زبان پایتون | The Zen of Python
"Zen of Python" مجموعهای از بیست اصل است که طراحی زبان برنامه نویسی پایتون بر مبنای آن صورت گرفته. این اصول به دو مفهوم اصلی "خوانایی" و "سادگی" تأکید دارند.
این اصول در ابتدا به صورت قواعد شفاهی میان توسعه دهندگان اصلی پایتون وجود داشت و چندین سال بعد به طور اتفاقی توسط یکی از توسعه دهندگان اصلی پایتون "Tim Peters" در قالب شعر و طنز نوشته شد و در مستندات پایتون (PEP 20) نیز قرار گرفت. یکی از دلایل نوشتن این اصول زمانی بوجود آمد که حدادوا بیست سال قبل برنامهنویسان زیادی با اصول و ایدئولوژیهای مختلف از زبانهای دیگر به دنیای پایتون هجوم آوردند. اما این اصول و ایدهها با اساس طراحی پایتون در تضاد بود، و همین علت باعث شد اصول طراحی پایتون در چهارچوب این بیست قانون نوشته شود و برنامهنویسان را با اصول برنامهنویسی و طراحی این زبان آشنا سازد. در ادامه به توضیح این اصول پرداخته شده:
🔖 #Python, #پایتون
👤 xin
💎 Channel: @DevelopixPython
"Zen of Python" مجموعهای از بیست اصل است که طراحی زبان برنامه نویسی پایتون بر مبنای آن صورت گرفته. این اصول به دو مفهوم اصلی "خوانایی" و "سادگی" تأکید دارند.
این اصول در ابتدا به صورت قواعد شفاهی میان توسعه دهندگان اصلی پایتون وجود داشت و چندین سال بعد به طور اتفاقی توسط یکی از توسعه دهندگان اصلی پایتون "Tim Peters" در قالب شعر و طنز نوشته شد و در مستندات پایتون (PEP 20) نیز قرار گرفت. یکی از دلایل نوشتن این اصول زمانی بوجود آمد که حدادوا بیست سال قبل برنامهنویسان زیادی با اصول و ایدئولوژیهای مختلف از زبانهای دیگر به دنیای پایتون هجوم آوردند. اما این اصول و ایدهها با اساس طراحی پایتون در تضاد بود، و همین علت باعث شد اصول طراحی پایتون در چهارچوب این بیست قانون نوشته شود و برنامهنویسان را با اصول برنامهنویسی و طراحی این زبان آشنا سازد. در ادامه به توضیح این اصول پرداخته شده:
🔖 #Python, #پایتون
👤 xin
💎 Channel: @DevelopixPython
• زیبایی بهتر از زشتی است
مثال بارز از رعایت این اصل را در سینتکس پایتون مشاهده میکنیم و در زمان نوشتن کد نیز باید به آن توجه شود. با توجه به اینکه هر فرد میتواند تعریف متفاوتی از زیبایی داشته باشد، یک الگوی زیبایی که مورد قبول همه واقع شود وجود ندارد، اما پایبندی به یک الگوی مشخص بهبود ظاهر کد را به دنبال دارد.
• وضاحت بهتر از ابهام است
کد باید اهداف و مقاصد خود را به وضاحت و صراحت بیان کند و از هرگونه پیچیدگی و ابهام در نوشتن کد خودداری گردد. نوشتن کامنت، داک استرینگ، تعریف تایپ، استفاده از اسمهای مناسب و پیروی از یک الگوی مشخص به وضاحت کد افزوده میشود.
در این مثال، نامگذاری مناسب تابع و پارامتر ها به وضوح هدف تابع را نشان میدهد. اضافه کردن داک استرینگ و تعریف تایپ برای پارامتر ها و خروجی نیز باعث وضاحت بیشتر خواهد شد.
• سادگی بهتر از پیچیدگی و پیچیدگی بهتر از بهم ریختگی است
روشهای ساده بیشتر اوقات بهتر و سودمندتر هستند و باید بجای روشهای پیچیده استفاده شوند. اما بعضی موضوعات اساساً پیچیده هستند و پیادهسازی آنها با روشی ساده امکانپذیر نیست. در این صورت، بهتر است این پیچیدگی با حفظ نظم پیادهسازی شوند تا از بهم ریختگی جلوگیری شود. نمونه بارز آن استفاده از list comprehension است که هرچند روشی پیچیده هستند اما مانع بهم ریختگی میشوند.
در این مثال، روش دوم از list comprehension استفاده کرده که باعث میشود کد کوتاهتر و خواناتر شود، در حالی که روش اول با استفاده از حلقه و شرطها بهم ریختگی بیشتری دارد و پیچیدهتر به نظر میرسد.
• مسطح و هموار بهتر از تو در تو است (تنها در این مورد 🙄)
نوشتن کد به صورت تو در تو باعث ناخوانا شدن برنامه میشود و بهتر است کدها تا حد امکان به صورت مسطح و کم عمق نوشته شوند.
• پراکندگی بهتر از تراکم است
در عین حال، نوشتن کد به صورت هموار و مسطح نباید باعث تراکم کد در یک خط شود و هر کد باید فضای کافی داشته باشد تا خوانایی و زیبایی کد حفظ شود.
• خوانایی مهم است
کدها باید به گونهای پیادهسازی شوند که دیگران به آسانی بتوانند آنها را بخوانند و درک کنند. به همین دلیل، سینتکس پایتون مشابه به زبان گفتاری انسان است. همچنین، پایبندی به اصول یادشده، مانند سادگی، وضاحت، و مسطح بودن کد، باعث افزایش خوانایی کد میشود.
• موارد خاص آنقدری خاص نیستند که قوانین را نقض کنند، اما سودمندی بر قوانین غلبه دارد!
در برنامهنویسی همیشه یک تعداد اصول و قوانین خاص وجود دارد که پیش آمدن موارد خاص نباید باعث نقض قوانین شود. هرچند بیش از حد اصولی بودن ممکن است همیشه سودمند نباشد. به عنوان یک مثال بارز از بیش از حد اصولی بودن میتوان به زبان برنامهنویسی جاوا اشاره کرد، پیروی دائم این زبان از اصول شی گرایی باعث شده است که پیادهسازی کوچکترین برنامهها نیز به مقدار زیادی از کد داشته باشند. به همین دلیل، نیاز است تعادل میان این دو اصل حفظ شود. بهترین رویکرد این است که به اصول پایبند باشیم، اما در همان زمان، سعی کنیم که سودمندی کد نیز در نظر گرفته شود. (پایبند به اصول باش اما تا زمانی که سودمنده 🤓☝️)
🔖 #Python, #پایتون
👤 xin
💎 Channel: @DevelopixPython
مثال بارز از رعایت این اصل را در سینتکس پایتون مشاهده میکنیم و در زمان نوشتن کد نیز باید به آن توجه شود. با توجه به اینکه هر فرد میتواند تعریف متفاوتی از زیبایی داشته باشد، یک الگوی زیبایی که مورد قبول همه واقع شود وجود ندارد، اما پایبندی به یک الگوی مشخص بهبود ظاهر کد را به دنبال دارد.
• وضاحت بهتر از ابهام است
کد باید اهداف و مقاصد خود را به وضاحت و صراحت بیان کند و از هرگونه پیچیدگی و ابهام در نوشتن کد خودداری گردد. نوشتن کامنت، داک استرینگ، تعریف تایپ، استفاده از اسمهای مناسب و پیروی از یک الگوی مشخص به وضاحت کد افزوده میشود.
python
# Implicit ❌
def area(l, w):
return l * w
# Explicit ✅
def calculate_rectangle_area(length, width):
return length * width
در این مثال، نامگذاری مناسب تابع و پارامتر ها به وضوح هدف تابع را نشان میدهد. اضافه کردن داک استرینگ و تعریف تایپ برای پارامتر ها و خروجی نیز باعث وضاحت بیشتر خواهد شد.
• سادگی بهتر از پیچیدگی و پیچیدگی بهتر از بهم ریختگی است
روشهای ساده بیشتر اوقات بهتر و سودمندتر هستند و باید بجای روشهای پیچیده استفاده شوند. اما بعضی موضوعات اساساً پیچیده هستند و پیادهسازی آنها با روشی ساده امکانپذیر نیست. در این صورت، بهتر است این پیچیدگی با حفظ نظم پیادهسازی شوند تا از بهم ریختگی جلوگیری شود. نمونه بارز آن استفاده از list comprehension است که هرچند روشی پیچیده هستند اما مانع بهم ریختگی میشوند.
python
# Complex ❌
result = []
for i in range(10):
if i % 2 == 0:
result.append(i)
# Complex but organized ✅️
result = [i for i in range(10) if i % 2 == 0]
در این مثال، روش دوم از list comprehension استفاده کرده که باعث میشود کد کوتاهتر و خواناتر شود، در حالی که روش اول با استفاده از حلقه و شرطها بهم ریختگی بیشتری دارد و پیچیدهتر به نظر میرسد.
• مسطح و هموار بهتر از تو در تو است (تنها در این مورد 🙄)
نوشتن کد به صورت تو در تو باعث ناخوانا شدن برنامه میشود و بهتر است کدها تا حد امکان به صورت مسطح و کم عمق نوشته شوند.
# Nested ❌
if x > 0:
if y > 0:
if z > 0:
...
# Flat ✅️
if x > 0 and y > 0 and z > 0:
...
• پراکندگی بهتر از تراکم است
در عین حال، نوشتن کد به صورت هموار و مسطح نباید باعث تراکم کد در یک خط شود و هر کد باید فضای کافی داشته باشد تا خوانایی و زیبایی کد حفظ شود.
# Dense ❌
if x > 0: print("Positive"); print("Check done")
# Sparse ✅️
if x > 0:
print("Positive")
print("Check done")
• خوانایی مهم است
کدها باید به گونهای پیادهسازی شوند که دیگران به آسانی بتوانند آنها را بخوانند و درک کنند. به همین دلیل، سینتکس پایتون مشابه به زبان گفتاری انسان است. همچنین، پایبندی به اصول یادشده، مانند سادگی، وضاحت، و مسطح بودن کد، باعث افزایش خوانایی کد میشود.
• موارد خاص آنقدری خاص نیستند که قوانین را نقض کنند، اما سودمندی بر قوانین غلبه دارد!
در برنامهنویسی همیشه یک تعداد اصول و قوانین خاص وجود دارد که پیش آمدن موارد خاص نباید باعث نقض قوانین شود. هرچند بیش از حد اصولی بودن ممکن است همیشه سودمند نباشد. به عنوان یک مثال بارز از بیش از حد اصولی بودن میتوان به زبان برنامهنویسی جاوا اشاره کرد، پیروی دائم این زبان از اصول شی گرایی باعث شده است که پیادهسازی کوچکترین برنامهها نیز به مقدار زیادی از کد داشته باشند. به همین دلیل، نیاز است تعادل میان این دو اصل حفظ شود. بهترین رویکرد این است که به اصول پایبند باشیم، اما در همان زمان، سعی کنیم که سودمندی کد نیز در نظر گرفته شود. (پایبند به اصول باش اما تا زمانی که سودمنده 🤓☝️)
🔖 #Python, #پایتون
👤 xin
💎 Channel: @DevelopixPython
• خطاها نباید نادیده گرفته شوند، مگر به صورت صریح و واضح!
خطاهای برنامه نیاز است به صورت صحیح مدیریت شوند. استفاده از pass برای نادیده گرفتن آنها ممکن است به صورت موقت مشکل را پنهان کند، اما در آینده ممکن است باعث بروز خطاهایی شود که یافتن و اصلاح آنها سخت تر و بعضاً جبران ناپذیر باشد.
اما بعضاً ممکن است نیاز شود یک خطا نادیده گرفته شود که در این صورت بهتر است این نادیده گرفتن به صورت صریح و واضح انجام شود.
• در صورت مواجه شدن با ابهام، حدس و گمان را کنار بگذارید
زمانی که با شرایطی مواجه میشوید که موضوعی مبهم است، به جای حدس زدن و تکیه بر راهحلهای موقت، به روشنسازی ابهامات بپردازید تا مشکل بهصورت اساسی حل شود. این کار باعث میشود که از اشتباهات ناشی از حدس و گمان جلوگیری شده و راهحلهای دائمی و کارآمد پیدا شود.
• برای هر کار باید تنها یک راهکار واضح وجود داشته باشد
استفاده از راه حلهای گوناگون برای انجام یک کار، پیچیدگی را افزایش میدهد. برای اینکه کارها به بهترین شکل و کمترین پیچیدگی انجام شوند، بهتر است تنها یک راه حل واضح انتخاب شود. متاسفانه، در برخی از فریمورکها و کتابخانهها، شاهد ارائه چندین راه حل برای یک مسئله خاص هستیم که باعث پیچیدگی بیشتر و کاهش وضوح میشود. (اگه طرفدار راهکار های مختلف برای یک کار هستی بهتره جمع کنی بری Perl 😇)
• ممکن است اولین راهکار، بهترین راهکار نباشد
در برخی موارد، یافتن یک راهکار واضح برای انجام کار، زمان بیشتری میطلبد. این امر میتواند باعث شود که در طول زمان، راهکارهای مختلف برای انجام یک کار پیشنهاد شوند. برای مثال، در پایتون برای فرمت کردن رشته، چندین روش مختلف وجود دارد که اصل قبلی را نقض میکند.
• حال بهتر از هرگز، و هرگز بهتر از همین حالا است!
اقدام کردن و انجام دادن یک کار بهتر از به تعویق انداختن و منتظر ماندن برای زمان کاملاً مناسب است، چون زمان کاملاً مناسب هرگز فرا نمیرسد و این انتظار باعث میشود آن کار هیچوقت انجام نشود. با این حال، این اصل نباید باعث شود کارها بدون برنامهریزی انجام شوند. بهتر است صبر کنیم تا با دقت و برنامهریزی درست دست به انجام آن کار بزنیم؛ در غیر این صورت، انجام کارها با عجله و بیبرنامگی نیز مناسب نیست.
• اگر توضیح و پیاده سازی یک راهکار دشوار باشد، پس راهکار خوبی نیست. اما در صورت آسانی ممکن است که یک راهکار خوبی باشد
اگر یک راهکار هرچند سودمند، اما پیچیده باشد و درک و پیادهسازی آن برای برنامهنویسان سخت و دشوار باشد، آن راهکار یک راهکار خوبی نیست. اما آسان بودن یک راهکار نیز همیشه به معنی درست بودن آن راهکار نیست.
اصول و قوانین ذکر شده، مبانی طراحی زبان برنامهنویسی پایتون را تشکیل میدهند. ممکن است هرشخص تعابیر متفاوتی ازین اصول داشته باشد که توضیحات بالا نیز برداشت شخصی من از این اصول است. به طور خلاصه، این اصول بر زیبایی، وضوح، سادگی، آسانی و خوانایی تأکید دارند. لازم به ذکر است که این اصول به صورت طنزآمیز، شاعرانه و کلی بیان شدهاند و بیشتر به چگونگی طراحی زبان پایتون و دلایل این طراحی اشاره دارند که بر اساس آن میتوانید تشخیص دهید چه روشی پایتونیک چه و روشی غیرپایتونیک است. برای استفاده از زبان پایتون، یک سری قوانین و دستورالعملهای دیگری بنام PEP 8 وجود دارد که با صراحت و جزئیات کامل، چگونگی کدنویسی در این زبان را شرح داده است. در آینده به بررسی این دستورالعملها نیز خواهیم پرداخت.
🔖 #Python, #پایتون
👤 xin
💎 Channel: @DevelopixPython
خطاهای برنامه نیاز است به صورت صحیح مدیریت شوند. استفاده از pass برای نادیده گرفتن آنها ممکن است به صورت موقت مشکل را پنهان کند، اما در آینده ممکن است باعث بروز خطاهایی شود که یافتن و اصلاح آنها سخت تر و بعضاً جبران ناپذیر باشد.
# Silent error ❌
try:
result = some_function()
except:
pass # No error handling
# Not silent ✅️
try:
result = some_function()
except Exception as e:
print(f"Error occurred: {e}")
اما بعضاً ممکن است نیاز شود یک خطا نادیده گرفته شود که در این صورت بهتر است این نادیده گرفتن به صورت صریح و واضح انجام شود.
# Not explicit ❌
try:
result = some_function()
except Exception:
pass
# Explicit ✅️
try:
result = some_function()
except SpecificException:
pass # ignore this specific case
• در صورت مواجه شدن با ابهام، حدس و گمان را کنار بگذارید
زمانی که با شرایطی مواجه میشوید که موضوعی مبهم است، به جای حدس زدن و تکیه بر راهحلهای موقت، به روشنسازی ابهامات بپردازید تا مشکل بهصورت اساسی حل شود. این کار باعث میشود که از اشتباهات ناشی از حدس و گمان جلوگیری شده و راهحلهای دائمی و کارآمد پیدا شود.
• برای هر کار باید تنها یک راهکار واضح وجود داشته باشد
استفاده از راه حلهای گوناگون برای انجام یک کار، پیچیدگی را افزایش میدهد. برای اینکه کارها به بهترین شکل و کمترین پیچیدگی انجام شوند، بهتر است تنها یک راه حل واضح انتخاب شود. متاسفانه، در برخی از فریمورکها و کتابخانهها، شاهد ارائه چندین راه حل برای یک مسئله خاص هستیم که باعث پیچیدگی بیشتر و کاهش وضوح میشود. (اگه طرفدار راهکار های مختلف برای یک کار هستی بهتره جمع کنی بری Perl 😇)
# One way ✅️
list.append(item)
# Not obvious alternatives should be avoided
• ممکن است اولین راهکار، بهترین راهکار نباشد
در برخی موارد، یافتن یک راهکار واضح برای انجام کار، زمان بیشتری میطلبد. این امر میتواند باعث شود که در طول زمان، راهکارهای مختلف برای انجام یک کار پیشنهاد شوند. برای مثال، در پایتون برای فرمت کردن رشته، چندین روش مختلف وجود دارد که اصل قبلی را نقض میکند.
age = 33
formatted = f"Age: {age}"
formatted = "Age: {}".format(age)
formatted = "Age: %d" % age
• حال بهتر از هرگز، و هرگز بهتر از همین حالا است!
اقدام کردن و انجام دادن یک کار بهتر از به تعویق انداختن و منتظر ماندن برای زمان کاملاً مناسب است، چون زمان کاملاً مناسب هرگز فرا نمیرسد و این انتظار باعث میشود آن کار هیچوقت انجام نشود. با این حال، این اصل نباید باعث شود کارها بدون برنامهریزی انجام شوند. بهتر است صبر کنیم تا با دقت و برنامهریزی درست دست به انجام آن کار بزنیم؛ در غیر این صورت، انجام کارها با عجله و بیبرنامگی نیز مناسب نیست.
• اگر توضیح و پیاده سازی یک راهکار دشوار باشد، پس راهکار خوبی نیست. اما در صورت آسانی ممکن است که یک راهکار خوبی باشد
اگر یک راهکار هرچند سودمند، اما پیچیده باشد و درک و پیادهسازی آن برای برنامهنویسان سخت و دشوار باشد، آن راهکار یک راهکار خوبی نیست. اما آسان بودن یک راهکار نیز همیشه به معنی درست بودن آن راهکار نیست.
اصول و قوانین ذکر شده، مبانی طراحی زبان برنامهنویسی پایتون را تشکیل میدهند. ممکن است هرشخص تعابیر متفاوتی ازین اصول داشته باشد که توضیحات بالا نیز برداشت شخصی من از این اصول است. به طور خلاصه، این اصول بر زیبایی، وضوح، سادگی، آسانی و خوانایی تأکید دارند. لازم به ذکر است که این اصول به صورت طنزآمیز، شاعرانه و کلی بیان شدهاند و بیشتر به چگونگی طراحی زبان پایتون و دلایل این طراحی اشاره دارند که بر اساس آن میتوانید تشخیص دهید چه روشی پایتونیک چه و روشی غیرپایتونیک است. برای استفاده از زبان پایتون، یک سری قوانین و دستورالعملهای دیگری بنام PEP 8 وجود دارد که با صراحت و جزئیات کامل، چگونگی کدنویسی در این زبان را شرح داده است. در آینده به بررسی این دستورالعملها نیز خواهیم پرداخت.
🔖 #Python, #پایتون
👤 xin
💎 Channel: @DevelopixPython
🔹 Assertions in Python
🔺 یکی از موارد کاربردی در پایتون assertionها هستند. استفاده از آنها برای اطمینان حاصل کردن از صحت اجرای برنامه و یافتن خطاها در هنگام توسعه و افزایش خوانایی کدهاست.
🔺 ساختار :
ادعاها یا assertionها از دو قسمت تشکیل میشوند. بخش اول یا condition شرایط به وجود آمدن AssertionError را فراهم میکند. زمانی که مقدار expression قرار گرفته در بخش condition برابر با False باشد، AssertionError رخ میدهد و اگر مقدار True باشد برنامه به کار خود ادامه میدهد. برای مثال :
بخش دوم یا message پیامی است که هنگام AssertionError نمایش داده میشود.
🔺 در ادامه به مثال زیر توجه کنید. تابع زیر دو ورودی به عنوان پارامتر دریافت میکند که مقدار اول قیمت و مقدار دوم درصدتخفیف است. در ادامه با استفاده از assert ورودی ها را کنترل کردیم و در صورتی که نتیجه expression داده شده برابر با False باشد، AssertionError رخ میدهد. در واقع با استفاده از assertion ورودی های تابع را کنترل کردیم.
سوالی ممکن است اینجا به وجود بیاید: چرا از if-statment و یا از یک exception برای مثال قبلی استفاده نکردیم؟ به بیان بهتر، دلیل استفاده از assertion چیه؟ هدف از ایجاد assertionها برای آگاهی برنامهنویس از خطاهایی که قابل انتظار نبودند/نیستند است، شرایطی ممکن است وجود داشته باشد که شما احتمال بروز خطا را در برنامه نمیدهید (برای مثال در کد بالا برنامهنویس احتمال نمیدهد که مقدار price کمتر یا برابر صفر باشد، پس از assertion استفاده کرده و در صورتی که مقادیر درست باشند برنامه به کار خودش ادامه میدهد). در اینجور شرایط می توانید از assertion استفاده کنید که اگر برنامه شما بدون باگ باشد AssertionError داده نمیشود و ادامه کدها اجرا خواهد شد ولی اگر یک خطای غیرقابل انتظار رخ دهد برنامه کرش (crash) میکند. به این نکته توجه کنید که هدف assertionها برای دیباگ کردن پروژه است، نه مدیریت خطاهایی که زمان اجرا برنامه رخ میدهد. assertion باعث میشود که شما باگ را ریشهیابی کنید.
🔹 مفسر پایتون هر assert statement را به شکل زیر تفسیر و اجرا میکند:
قبل از اینکه condition بررسی شود، یک شرط اضافی نیز بررسی میشود. این شرط بررسی می کند که آیا مقدار
🔹 دو اشتباه رایجی که در هنگام استفاده از assert statement وجود دارد:
🔹 از assertion برای اعتبارسنجی داده (data validation) استفاده نکنید. همانطور که قبلا اشاره شد در حالت optimization که در آن
در حالت عادی کد بالا بدون مشکل اجرا خواهد شد و در صورتی که شرایط درست باشد product حذف میشود. ولی دو مسئله قابل بحث وجود دارند. مورد اول، هدف استفاده از assertion زمانی بود که خطایی غیرقابل انتظار رخ دهد. از آنجایی که در کد بالا اکثریت کاربران امکان حذف product دارند، گزینه منطقی این نیست که از assertion استفاده کنیم و بهتر است با استفاده از if-statment این مسئله هندل شود. و مسئله بعدی که اهمیت زیادی دارد این است که اگر برنامه در حال optimization باشد assert statement به صورت null-operation رخ میدهد و بدون اینکه داشتن دسترسی کاربر برای حذف محصول بررسی شود، محصول از دیتابیس حذف خواهد شد (در صورتی که نباید این اتفاق رخ میداد).
🔹 اشتباه دوم در هنگام استفاده از assertion که باعث میشود assertion همیشه برابر با True باشه استفاده Tuple است. به مثال زیر دقت کنید.
انتظار میرود برنامه با AssertionError روبهرو شود، ولی این اتفاق نمیافتد،. چرا؟ چون مقدار tuple به صورت کامل به عنوان condition در نظر گرفته میشود و در نتیجه از آنجایی که tuple دارای مقدار است پس AssertionError هرگز رخ نمیدهد.
🔖 #Python, #پایتون
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
🔺 یکی از موارد کاربردی در پایتون assertionها هستند. استفاده از آنها برای اطمینان حاصل کردن از صحت اجرای برنامه و یافتن خطاها در هنگام توسعه و افزایش خوانایی کدهاست.
🔺 ساختار :
assert_stmt ::= "assert" condition ["," message]
ادعاها یا assertionها از دو قسمت تشکیل میشوند. بخش اول یا condition شرایط به وجود آمدن AssertionError را فراهم میکند. زمانی که مقدار expression قرار گرفته در بخش condition برابر با False باشد، AssertionError رخ میدهد و اگر مقدار True باشد برنامه به کار خود ادامه میدهد. برای مثال :
assert 1 < 2 # nothing happens
assert 1 > 2 # AssertionError
بخش دوم یا message پیامی است که هنگام AssertionError نمایش داده میشود.
🔺 در ادامه به مثال زیر توجه کنید. تابع زیر دو ورودی به عنوان پارامتر دریافت میکند که مقدار اول قیمت و مقدار دوم درصدتخفیف است. در ادامه با استفاده از assert ورودی ها را کنترل کردیم و در صورتی که نتیجه expression داده شده برابر با False باشد، AssertionError رخ میدهد. در واقع با استفاده از assertion ورودی های تابع را کنترل کردیم.
def calculate_discount_price(price, discount):
assert price < 0 or discount < 0 or discount > 100
discount_amount = (discount / 100) * price
return price - discount_amount
سوالی ممکن است اینجا به وجود بیاید: چرا از if-statment و یا از یک exception برای مثال قبلی استفاده نکردیم؟ به بیان بهتر، دلیل استفاده از assertion چیه؟ هدف از ایجاد assertionها برای آگاهی برنامهنویس از خطاهایی که قابل انتظار نبودند/نیستند است، شرایطی ممکن است وجود داشته باشد که شما احتمال بروز خطا را در برنامه نمیدهید (برای مثال در کد بالا برنامهنویس احتمال نمیدهد که مقدار price کمتر یا برابر صفر باشد، پس از assertion استفاده کرده و در صورتی که مقادیر درست باشند برنامه به کار خودش ادامه میدهد). در اینجور شرایط می توانید از assertion استفاده کنید که اگر برنامه شما بدون باگ باشد AssertionError داده نمیشود و ادامه کدها اجرا خواهد شد ولی اگر یک خطای غیرقابل انتظار رخ دهد برنامه کرش (crash) میکند. به این نکته توجه کنید که هدف assertionها برای دیباگ کردن پروژه است، نه مدیریت خطاهایی که زمان اجرا برنامه رخ میدهد. assertion باعث میشود که شما باگ را ریشهیابی کنید.
🔹 مفسر پایتون هر assert statement را به شکل زیر تفسیر و اجرا میکند:
if __debug__:
if not condition:
raise AssertionError(message)
قبل از اینکه condition بررسی شود، یک شرط اضافی نیز بررسی میشود. این شرط بررسی می کند که آیا مقدار
__debug__
برابر با True است یا نه. (در حالت عادی این مقدار برابر با True است و در حالت optimization برابر با False)🔹 دو اشتباه رایجی که در هنگام استفاده از assert statement وجود دارد:
🔹 از assertion برای اعتبارسنجی داده (data validation) استفاده نکنید. همانطور که قبلا اشاره شد در حالت optimization که در آن
__debug__
برابر با False میشود، assert statement در حالت null-operation قرار میگیرد، یعنی توسط مفسر تفسیر میشود ولی هیچکدام از assert statement اجرا نخواهند شد. به مثال زیر دقت کنید.def delete_product(user, id):
assert user.has_perm("del_product")
Product.objects.delete(pk=id)
در حالت عادی کد بالا بدون مشکل اجرا خواهد شد و در صورتی که شرایط درست باشد product حذف میشود. ولی دو مسئله قابل بحث وجود دارند. مورد اول، هدف استفاده از assertion زمانی بود که خطایی غیرقابل انتظار رخ دهد. از آنجایی که در کد بالا اکثریت کاربران امکان حذف product دارند، گزینه منطقی این نیست که از assertion استفاده کنیم و بهتر است با استفاده از if-statment این مسئله هندل شود. و مسئله بعدی که اهمیت زیادی دارد این است که اگر برنامه در حال optimization باشد assert statement به صورت null-operation رخ میدهد و بدون اینکه داشتن دسترسی کاربر برای حذف محصول بررسی شود، محصول از دیتابیس حذف خواهد شد (در صورتی که نباید این اتفاق رخ میداد).
🔹 اشتباه دوم در هنگام استفاده از assertion که باعث میشود assertion همیشه برابر با True باشه استفاده Tuple است. به مثال زیر دقت کنید.
assert (1 > 2, "This condition is not valid")
انتظار میرود برنامه با AssertionError روبهرو شود، ولی این اتفاق نمیافتد،. چرا؟ چون مقدار tuple به صورت کامل به عنوان condition در نظر گرفته میشود و در نتیجه از آنجایی که tuple دارای مقدار است پس AssertionError هرگز رخ نمیدهد.
🔖 #Python, #پایتون
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📊 کار با داده های آماری در پایتون
توی این پست میخوایم ببینیم چجوری باید با داده های آماری داخل پایتون کار کرد. تو پایتون یه ماژول داخلی وجود داره به اسم statistics که دقیقا مخصوص همین کاره 👌
نیازی به نصب نداره و فقط کافیه با دستور زیر ایمپورتش کنید 👇
این ماژول به شما این امکان رو میده تا یه سری محاسبات ساده رو انجام بدید مثل گرفتن میانگین، مد، انحراف معیار و واریانس
اول باید از لحاظ ریاضی بدونیم اینا چی هستن :
میانگین (Average): اگر اعدادی رو جمع کنید با همدیگه و به تعدادشون تقسیم کنید. مثل
(5 + 4 + 3) / 3 = 4
میانه (Median): اگر اعدادی را از کوچک به بزرگ مرتب کنیم و عددی که وسط این اعداد قرار گرفته رو حساب کنیم میشه میانه. در مثال زیر به عنوان مثال میانه 3 است
1, 2, 3, 4, 5
انحراف معیار (Standard Deviation): نشون میده عددهای یه مجموعه چقدر دور یا نزدیک به میانگین (متوسط) هستن.
واریانس (Variance): مثل انحراف معیاره، ولی به جای اینکه مستقیماً فاصله عددها از میانگین رو بگه، فاصلهها رو به توان دو میرسونه و بعد میانگینشون رو میگیره.
مد (Mode): داده ای که بیشترین تکرار رو داخل یه مجموعه داره.
حالا بیاید وارد کد بشیم و چیزایی رو که گفتیم امتحان کنیم 😃
برای مثال ها از لیستی به اسم data استفاده میکنیم
برای گرفتن میانگین باید اعدادمون رو داخل یه لیست بزاریم و بعدش از تابع mean که این ماژول در اختیارمون میذاره استفاده کنیم:
برای گرفتن میانه باید از تابع median استفاده کنیم :
برای گرفتن انحراف معیار باید از تابع stdev استفاده کنیم:
برای گرفتن واریانس باید از تابع variance استفاده کنیم:
برای گرفتن مد باید از تابع mode استفاده کنیم:
به همین راحتی !! 👌
البته باید اینم بگم که اگه نیاز به تحلیل های آماری پیچیدهتری دارید باید از کتابخونه هایی مثل NumPy استفاده کنید
امیدوارم از این پست لذت برده باشید و مفید باشه براتون 🙏
🔖 #Python, #پایتون
👤 soroushGH
💎 Channel: @DevelopixPython
توی این پست میخوایم ببینیم چجوری باید با داده های آماری داخل پایتون کار کرد. تو پایتون یه ماژول داخلی وجود داره به اسم statistics که دقیقا مخصوص همین کاره 👌
نیازی به نصب نداره و فقط کافیه با دستور زیر ایمپورتش کنید 👇
import statistics
این ماژول به شما این امکان رو میده تا یه سری محاسبات ساده رو انجام بدید مثل گرفتن میانگین، مد، انحراف معیار و واریانس
اول باید از لحاظ ریاضی بدونیم اینا چی هستن :
میانگین (Average): اگر اعدادی رو جمع کنید با همدیگه و به تعدادشون تقسیم کنید. مثل
(5 + 4 + 3) / 3 = 4
میانه (Median): اگر اعدادی را از کوچک به بزرگ مرتب کنیم و عددی که وسط این اعداد قرار گرفته رو حساب کنیم میشه میانه. در مثال زیر به عنوان مثال میانه 3 است
1, 2, 3, 4, 5
انحراف معیار (Standard Deviation): نشون میده عددهای یه مجموعه چقدر دور یا نزدیک به میانگین (متوسط) هستن.
واریانس (Variance): مثل انحراف معیاره، ولی به جای اینکه مستقیماً فاصله عددها از میانگین رو بگه، فاصلهها رو به توان دو میرسونه و بعد میانگینشون رو میگیره.
مد (Mode): داده ای که بیشترین تکرار رو داخل یه مجموعه داره.
حالا بیاید وارد کد بشیم و چیزایی رو که گفتیم امتحان کنیم 😃
برای مثال ها از لیستی به اسم data استفاده میکنیم
data = [3, 5, 7, 10, 15]
برای گرفتن میانگین باید اعدادمون رو داخل یه لیست بزاریم و بعدش از تابع mean که این ماژول در اختیارمون میذاره استفاده کنیم:
mean = statistics.mean(data)
print("میانگین:", mean)
برای گرفتن میانه باید از تابع median استفاده کنیم :
median = statistics.median(data)
print("میانه:", median)
برای گرفتن انحراف معیار باید از تابع stdev استفاده کنیم:
stdev = statistics.stdev(data)
print("انحراف معیار:", stdev)
برای گرفتن واریانس باید از تابع variance استفاده کنیم:
variance = statistics.variance(data)
print("واریانس:", variance)
برای گرفتن مد باید از تابع mode استفاده کنیم:
data = [3, 5, 5, 7, 5, 10, 15]
mode = statistics.mode(data)
print("مد:", mode)
به همین راحتی !! 👌
البته باید اینم بگم که اگه نیاز به تحلیل های آماری پیچیدهتری دارید باید از کتابخونه هایی مثل NumPy استفاده کنید
امیدوارم از این پست لذت برده باشید و مفید باشه براتون 🙏
🔖 #Python, #پایتون
👤 soroushGH
💎 Channel: @DevelopixPython
عملگر والروس (Walrus Operator) 🦭
عملگر والروس (Walrus Operator) با نماد
⁉️ چرا به آن والروس میگویند؟
نام "والروس" به دلیل شباهت ظاهری این عملگر به عاجهای یک والروس (شیر دریایی) به آن داده شده است.
⁉️ چگونه کار میکند؟
کار این عملگر انجام دستورات، و در عین حال assign کردن مقدار به متغیر می باشد.
این عملگر در حالت استاندارد باید در داخل پرانتز قرار بگیرد. به نحوه استفاده و سینتکس این عملگر توجه کنید:
سادهترین مثال برای درک این عملگر، استفاده از آن در یک عبارت شرطی است:
در این مثال، ما طول رشته "hello" را محاسبه میکنیم و نتیجه را هم به متغیر n اختصاص میدهیم و هم در شرط if استفاده میکنیم. این کار باعث میشود که ما مجبور نباشیم قبل از شرط، طول رشته را در یک متغیر جداگانه ذخیره کنیم.
🆚 مقایسه با روش سنتی
بدون استفاده از عملگر والروس، برای انجام همین کار باید به صورت زیر عمل میکردیم:
همانطور که میبینید، استفاده از این عملگر باعث میشود کد ما کوتاهتر و خواناتر شود.
✅ کاربردهای دیگر عملگر والروس
0️⃣ حلقههای while:
1️⃣ فهمپذیرتر کردن کد:
2️⃣ کاهش تکرار کد:
❇️ نمونه کد
🔴 نمونه کد بدون استفاده از عملگر والرس:
🟢 نمونه کد با استفاده از عملگر والرس:
⚠️ نکات مهم
0️⃣ استفاده احتیاطانه:
اگرچه عملگر والروس میتواند کد شما را کوتاهتر کند، اما استفاده بیش از حد از آن میتواند خوانایی کد را کاهش دهد.
1️⃣ پایتون 3.8 به بعد:
این عملگر از نسخه 3.8 پایتون به بعد اضافه شده است و در استفاده از نسخه های قدیمی تر به سینتکس ارور برخورد خواهید کرد.
♻️ جمعبندی
والروس یک عملگر قدرتمند برای نوشتن کدهای پایتون بهینه و خواناتر است. با استفاده از این عملگر، میتوانید کدهای خود را کوتاهتر کرده و از تکرار کد جلوگیری کنید. با این حال، مهم است که از این عملگر به صورت مناسب استفاده کنید تا خوانایی کد شما کاهش نیابد.
💠 برای داشتن اطلاعات بیشتر در مورد عملگر ها میتوانید این پست را هم مطالعه کنید.
🔖 #Python, #پایتون, #Operatos, #عملگر
👤 LightNess
💎 Channel: @DevelopixPython
عملگر والروس (Walrus Operator) با نماد
:=
، یکی از ویژگیهای نسبتا جدیدی است که از نسخه 3.8 پایتون به آن اضافه شده است. این عملگر به شما اجازه میدهد در یک عبارت هم مقدار یک متغیر را تعیین کنید و هم آن را برگردانید. این ویژگی باعث میشود کدهای شما کوتاهتر و خواناتر شوند، به خصوص در مواردی که نیاز به مقداردهی اولیه یک متغیر درون یک عبارت شرطی یا حلقه دارید.⁉️ چرا به آن والروس میگویند؟
نام "والروس" به دلیل شباهت ظاهری این عملگر به عاجهای یک والروس (شیر دریایی) به آن داده شده است.
⁉️ چگونه کار میکند؟
کار این عملگر انجام دستورات، و در عین حال assign کردن مقدار به متغیر می باشد.
این عملگر در حالت استاندارد باید در داخل پرانتز قرار بگیرد. به نحوه استفاده و سینتکس این عملگر توجه کنید:
(variable := expression)
سادهترین مثال برای درک این عملگر، استفاده از آن در یک عبارت شرطی است:
if (n := len("hello")) > 4:
print(f"String length is greater than 4: {n}")
در این مثال، ما طول رشته "hello" را محاسبه میکنیم و نتیجه را هم به متغیر n اختصاص میدهیم و هم در شرط if استفاده میکنیم. این کار باعث میشود که ما مجبور نباشیم قبل از شرط، طول رشته را در یک متغیر جداگانه ذخیره کنیم.
🆚 مقایسه با روش سنتی
بدون استفاده از عملگر والروس، برای انجام همین کار باید به صورت زیر عمل میکردیم:
n = len("hello")
if n > 4:
print(f"String length is greater than 4 : {n}")
همانطور که میبینید، استفاده از این عملگر باعث میشود کد ما کوتاهتر و خواناتر شود.
✅ کاربردهای دیگر عملگر والروس
0️⃣ حلقههای while:
while (line := f.readline()):
# پردازش هر خط از فایل
1️⃣ فهمپذیرتر کردن کد:
if (match := re.search(pattern, text)):
print(match.group())
2️⃣ کاهش تکرار کد:
if (numbers := [1, 2, 3]) and len(numbers) > 2:
# انجام کاری با لیست numbers
❇️ نمونه کد
🔴 نمونه کد بدون استفاده از عملگر والرس:
while True:
command = input("> ")
if command == 'exit':
break
print("Your command was:", command)
🟢 نمونه کد با استفاده از عملگر والرس:
while (command := input("> ")) != "exit":
print("Your command was:", command)
⚠️ نکات مهم
0️⃣ استفاده احتیاطانه:
اگرچه عملگر والروس میتواند کد شما را کوتاهتر کند، اما استفاده بیش از حد از آن میتواند خوانایی کد را کاهش دهد.
1️⃣ پایتون 3.8 به بعد:
این عملگر از نسخه 3.8 پایتون به بعد اضافه شده است و در استفاده از نسخه های قدیمی تر به سینتکس ارور برخورد خواهید کرد.
♻️ جمعبندی
والروس یک عملگر قدرتمند برای نوشتن کدهای پایتون بهینه و خواناتر است. با استفاده از این عملگر، میتوانید کدهای خود را کوتاهتر کرده و از تکرار کد جلوگیری کنید. با این حال، مهم است که از این عملگر به صورت مناسب استفاده کنید تا خوانایی کد شما کاهش نیابد.
💠 برای داشتن اطلاعات بیشتر در مورد عملگر ها میتوانید این پست را هم مطالعه کنید.
🔖 #Python, #پایتون, #Operatos, #عملگر
👤 LightNess
💎 Channel: @DevelopixPython
📊 رسم نمودار با پایتون
بسیاری از شما داده هایی داشتید که نیاز بوده با آنها نموداری رسم کنید و شما به دنبال کتابخونه ای برای انجام این کار بودید.
امروز اومدم چند کتابخونه رو معرفی کنم که با اونها میتونید به راحتی نمودار هایی رو رسم کنید.
1. matplotlib
این کتابخونه محبوب ترین کتابخونه رسم نمودار هست که کار با اون بسیار راحت و سریع هست.
با این کتابخونه میتونید نمودار های خطی، میله ای، دایره ای، جعبه ای، تصویری و.. رو رسم کنید.
2. seaborn
این کتابخونه با الهام گرفتن از کتابخونه matplotlib نمودار ها رو رسم میکنه اما تفاوتشون توی زیبایی نمودار هاست که این کتابخونه بهتر و زیباتر است.
استفاده از پالت های رنگی متفاوت، راحتی کار با دادی های جدولی تنظیمات بصری پیشرفته بخشی از امکانات این کتابخونهست.
3. plotly
با این کتابخونه میتونید نمودار ها رو به صورت پویا رسم کنید، جوری که امکان زوم و تحلیل اون رو داشته باشید.
با خوندن داکیومنت این پروژه میتونید نمودار های فوقالعاده ای که میشه با اون رسم کرد رو ببینید.
4. bokeh
با این کتابخونه میتونید نمودار های پویا و تعاملی برای وب رسم کنید.
از سری امکانات این کتابخونه زوم، اسکرول، پن، انتخاب و ابزار هایی برای کاوش دادهست.
همچنین امکان ادغام با فریمورک های جنگو و فلسک رو داره.
کتابخونه های زیادی وجود داره اما این کتابخونه ها بیشترین استفاده رو بین کاربران دارند.
🔖 #Python, #Chart, #پایتون, #نمودار, #چارت
👤 Yasin
💎 Channel: @DevelopixPython
بسیاری از شما داده هایی داشتید که نیاز بوده با آنها نموداری رسم کنید و شما به دنبال کتابخونه ای برای انجام این کار بودید.
امروز اومدم چند کتابخونه رو معرفی کنم که با اونها میتونید به راحتی نمودار هایی رو رسم کنید.
1. matplotlib
این کتابخونه محبوب ترین کتابخونه رسم نمودار هست که کار با اون بسیار راحت و سریع هست.
با این کتابخونه میتونید نمودار های خطی، میله ای، دایره ای، جعبه ای، تصویری و.. رو رسم کنید.
2. seaborn
این کتابخونه با الهام گرفتن از کتابخونه matplotlib نمودار ها رو رسم میکنه اما تفاوتشون توی زیبایی نمودار هاست که این کتابخونه بهتر و زیباتر است.
استفاده از پالت های رنگی متفاوت، راحتی کار با دادی های جدولی تنظیمات بصری پیشرفته بخشی از امکانات این کتابخونهست.
3. plotly
با این کتابخونه میتونید نمودار ها رو به صورت پویا رسم کنید، جوری که امکان زوم و تحلیل اون رو داشته باشید.
با خوندن داکیومنت این پروژه میتونید نمودار های فوقالعاده ای که میشه با اون رسم کرد رو ببینید.
4. bokeh
با این کتابخونه میتونید نمودار های پویا و تعاملی برای وب رسم کنید.
از سری امکانات این کتابخونه زوم، اسکرول، پن، انتخاب و ابزار هایی برای کاوش دادهست.
همچنین امکان ادغام با فریمورک های جنگو و فلسک رو داره.
کتابخونه های زیادی وجود داره اما این کتابخونه ها بیشترین استفاده رو بین کاربران دارند.
🔖 #Python, #Chart, #پایتون, #نمودار, #چارت
👤 Yasin
💎 Channel: @DevelopixPython
این فریمورک تا حد زیادی قابل قبول نوشته شده. به راحتی امکان استفاده از تمام method هارو فراهم کرده و مزیت بزرگی این فریمورک اینه که شما مستقیما با MTProto API در ارتباط هستید و واسطهای وجود نداره. پایروگرام از tgcrypto برای رمزنگاری استفاده میکنه تا بتونه با MTProto در ارتباط باشه. این کتابخونه با زبان C نوشته شده و باعث بهبود سرعته.
یکی از معایب بزرگ این فریمورک بروز نبودن اونه. تلگرام در یک سال اخیر تغییرات زیادی داشته و این فریمورک خودش رو بروز نکرده. پس شما به ناچار مجبور به استفاده از یکی از fork های اون هستید. پیشنهاد من استفاده از این fork هستش.
از بابت مستندات این فریمورک مشکلی خاصی نداره و توضیحات تمیز و مرتب برای یادگیری نوشته شدند و درعین حال با جزئیات کامل هستند.
فریمورک بعدی که مستقیما با MTProto ارتباط برقرار میکنه telethon هستش. این package نسبتا بروز و منعطف نوشته شده. برای بهبود سرعت، این فریمورک از افزونه یا کتابخونه خاص خودش به اسم cryptg استفاده میکنه. از مزایای این فریمورک داشتن امکانات مازاد هستش؛ به عنوان مثال اگر pillow نصب شده باشه کار resize کردن تصاویر رو خودش انجام میده. یا از hachoir و aiohttp برای دانلود و مدیریت document ها استفاده میکنه.
شباهت زیاد pyrogram و telethon قابل چشم پوشی نیست؛ با تسلط به یکی از این دو، میتونید ظرف کمتر از یک ساعت با مورد دیگه بطور کلی آشنایی پیدا کنید. از نحوه log کردن ها، ساختار کلاس client و سایر کلاس ها، اسامی method ها بگیرید تا نحوه استفاده از proxy ها و dispather هر دو فریمورک. شباهت این دو غیرقابل انکاره.
با وجود پیچیدگی MTProto این فریمورک و pyrogram ساختاری مشابه telebot دارند (از بابت پیاده سازی کد) و شما تقریبا حتی متوجه پیچیدگی MTProto نخواهید شد.
این فریمورک برخلاف دو فریمورک قبلی مستقیما با MTProto درارتباط نیست و نویسندگان اون ترجیح دادند که کار رو با BotAPI جلو ببرند. از بابت ساختار فوقالعاده ساده و اصطلاحا کارراهبنداز هستش. عملکرد این فریمورک به شکل long polling صورت میگیره و داده به صورت http دریافت و ارسال میشه. درحالت کلی میشه گفت که اندکی از دو فریمورکی که نام بردیم سرعت کمتری رو دارا هستش اما این دال بر این نیست که امکانات کمی رو مهیا کرده باشه و اگر نگاهی به لیست مطرح ترین کتابخانه های مرتبط به ربات های تلگرامی بیاندازیم، قطعا telebot رو در بین اونها میبینیم.
نمیتونیم مستندات این فریمورک رو تمیز بنامیم، اما نمیشه گفت که کامل هم نیستند و تمامی توضیحات ارائه شدند. ولی برای یادگیری توصیه نمیکنم که با این مستندات جلو برید چون برای دادن جزئیات کامل طراحی شده، نه برای آموزش.
همونطور که telethon رو فریمورکی مشابه pyrogram خطاب کردیم، اینجا هم میتونیم aiogram رو چیزی مشابه telebot بنامیم. این فریمورک بطور خاص برای استفاده از مفهوم asynchronous طراحی شده. یکی از ویژگی های خوب این فریمورک اینه که به لطف tg-codegen هیچ وقت از بروزرسانی های BotAPI عقب نمیمونه. از aiohttp استفاده می کنه و از بابت سرعت و عملکرد تقریبا مشابه telebot هستش.
یکی دیگه از فریمورک هایی که بر اساس BotAPI کار میکنه با اسم PTB شناخته میشه. این فریمورک دارای یک wiki خوبه و برای یادگیری بسیار مناسبه. به عنوان یکی از قدیمی ترین فریمورک ها درحاضر در سرویس های زیادی استفاده میشه و با آخرین نسخه BotAPI کاملا هماهنگه. از بابت عملکرد کلی توضیح خاصی نداره چون مشابه دو مورد قبل از http requests استفاده میکنه و میشه گفت که تا حدودی شبیه telebot هستش. کامیونیتی بزرگی داره و همونطور که اشاره شد کاربران زیادی بهش علاقهمند هستند.
پیشنهاد شخصی من استفاده از pyrogram هست. این فریمورک در عین سادگی هنگام استفاده میتونه کاملا منعطف عمل کنه و پاسخگوی تمام نیاز های شما باشه. به نسبت رقبای خودش سرعت نسبتا بهتری داره و با وجود uvloop و tgcrypto این اختلاف افزایش سرعت بیشتر هم به چشم دیده میشه. به راحتی قابل استفادهست و امکانات بیشتری نسبت به سایر موارد مطرح شده داره و دسترسی کامل به MTProtoAPI به شما میده. همه این موارد در کنار هم اون رو تا حدودی نسبت به رقبای خودش ممتاز میکنه.
اگر تجربه ای دارید که فکر میکنید میتونه مفید باشه اون رو کامنت کنید و برای اطلاعات بیشتر به کانال ربات تلگرام مراجعه کنید.
🔖 #ربات, #تلگرام, #bot, #python, #pyrogram, #telethon
💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
| کانال ربات تلگرام |
⭕️ کانال توسعهدهندگان ربات تلگرام دولوپیکس
💠 دولوپیکس | جامعه توسعهدهندگان ایرانی
💎 @Developix
🚀 Developix.ir
📌 پشتیبانی و تبلیغات:
@DevelopixSupport
💠 دولوپیکس | جامعه توسعهدهندگان ایرانی
💎 @Developix
🚀 Developix.ir
📌 پشتیبانی و تبلیغات:
@DevelopixSupport
🔹 انواع ارور ها در پایتون
🔸 بخش اول
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— SyntaxError
یکی از خطا های رایج در پایتون این ارور هست. هنگامی این ارور اتفاق میافتد که شما نگارش و قانون نوشتاری کد های پایتونی را رعایت نکرده باشید.
برخی از دلایل نمایش SyntaxError:
• نبستن استرینگ
• غلط املایی در نوشتار کلمات کلیدی
• استفاده از سینتکس ورژن جدید پایتون در ورژن های قدیمیتر
• فراموش کردن بستن براکت، آکولاد یا پرانتز
مثال:
— IndentionError
در پایتون این ارور زمانی نمایش داده میشود که شما تو رفتگی ها را به خوبی رعایتنکرده باشید.
چند مورد از دلایل وقوع این ارور:
• فاصله های نادرست
• بلوک های تودرتوی نادرست
• فضای خالی در ابتدای شروع یک دستور
مثال:
— NameError
اگر هنگام استفاده از یک متغیر، آن متغیر تعریف نشده باشد این ارور را مشاهده خواهید کرد.
برای رفع این ارور اطمینان حاصل کنید که متغیر یا تابعی که از آن استفاده میکنید تعریف شده باشد.
مثال:
— ValueError
هنگامی این ارور رخ میدهد که نوع مقدار ورودی شما صحیح نیست.
مانند وقتی که یک input با تایپ int تعریف کرده باشید اما کاربر یک استرینگ به آن پاس دهد.
مثال:
— TypeError
این ارور هنگامی رخ میدهد که شما عملیاتی انجام دهید که برای آن نوع داده نامناسب باشد.
مانند زمانی که یک استرینگ را با یک تایپ int تقسیم کنید.
مثال:
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش اول
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— SyntaxError
یکی از خطا های رایج در پایتون این ارور هست. هنگامی این ارور اتفاق میافتد که شما نگارش و قانون نوشتاری کد های پایتونی را رعایت نکرده باشید.
برخی از دلایل نمایش SyntaxError:
• نبستن استرینگ
• غلط املایی در نوشتار کلمات کلیدی
• استفاده از سینتکس ورژن جدید پایتون در ورژن های قدیمیتر
• فراموش کردن بستن براکت، آکولاد یا پرانتز
مثال:
a = "salam
print(a)
SyntaxError: unterminated string literal
— IndentionError
در پایتون این ارور زمانی نمایش داده میشود که شما تو رفتگی ها را به خوبی رعایتنکرده باشید.
چند مورد از دلایل وقوع این ارور:
• فاصله های نادرست
• بلوک های تودرتوی نادرست
• فضای خالی در ابتدای شروع یک دستور
مثال:
a = "salam"
if a:
print(a)
IndentationError: expected an indented block after 'if' statement
— NameError
اگر هنگام استفاده از یک متغیر، آن متغیر تعریف نشده باشد این ارور را مشاهده خواهید کرد.
برای رفع این ارور اطمینان حاصل کنید که متغیر یا تابعی که از آن استفاده میکنید تعریف شده باشد.
مثال:
print(a)
a = 10
NameError: name 'a' is not defined
— ValueError
هنگامی این ارور رخ میدهد که نوع مقدار ورودی شما صحیح نیست.
مانند وقتی که یک input با تایپ int تعریف کرده باشید اما کاربر یک استرینگ به آن پاس دهد.
مثال:
age = int(input("age: ")) #input: Yasin
ValueError: invalid literal for int() with base 10: 'Yasin'
— TypeError
این ارور هنگامی رخ میدهد که شما عملیاتی انجام دهید که برای آن نوع داده نامناسب باشد.
مانند زمانی که یک استرینگ را با یک تایپ int تقسیم کنید.
مثال:
print("hello" / 3)
TypeError: unsupported operand type(s) for /: 'str' and 'int'
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
| کانال توسعهدهندگان پایتون |
🔹 انواع ارور ها در پایتون 🔸 بخش اول برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست. — SyntaxError یکی از خطا های رایج در پایتون این ارور هست. هنگامی این ارور اتفاق میافتد که شما نگارش و قانون نوشتاری…
🔹 انواع ارور ها در پایتون
🔸 بخش دوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— FileNotFoundError
اگر بخواهید عملیاتی روی یک file انجام دهید ممکن است به این ارور برخورد کنید.
این ارور هنگامی رخ میدهد که شما تلاش میکنید روی یک فایل عملیاتی انجام دهید اما به طور مثال فایل موردنظر وجود ندارد و یا آدرس درستی از فایل وارد نکردهاید.
برای رفع این رفع این ارور در وارد کردن نام، پسوند و آدرس فایل دقت کنید و حتما از وجود داشتن فایل مطمئن شوید.
مثال:
— ModuleNotFoundError
هنگامی که پایتون نتواند کتابخانه موردنظر را پیدا کند این خطا را برمیگرداند.
اگر کتابخانه مورد نظر روی سیستم یا محیط مجازی نصب نباشد و یا غلط املایی در نوشتن نام کتابخانه داشته باشید با این ارور مواجه خواهید شد.
مثال:
— IndexError
مطمعناً تابهحال وقتی خواستید به یک عنصر قابل شمارش ها دسترسی پیدا کنید به این ارور برخورد کردهاید.
اما دلیل رخ دادن این ارور چیست؟ زمانی این ارور رخ میدهد که اندیس مورد نظری که شما میخواهید آن را بگیرید در لیست یا رشته وجود نداشته باشد.
مانند زمانی که یک لیست 3 آیتم دارد اما شما در پی آیتم چهارم هستید.
مثال:
— KeyError
خطای key error خطایی رایج هست که احتمالا موقع کار با دیکشنری ها با اون برخورد کردید.
اگر تلاش کنید به یک مقدار توسط کلمه کلیدی آن دسترسی پیدا کنید اما آن کلمهکلیدی وجود نداشته باشد این خطا بروز داده میشود.
مثال:
— AttributeError
اگر تلاش کنید به یک متد یا صفت (attribute) از شئ دسترسی پیدا کنید اما شئ مورد نظر صفتی که میخواهید را نداشته باشد با این خطا مواجه خواهید شد.
مثال:
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش دوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— FileNotFoundError
اگر بخواهید عملیاتی روی یک file انجام دهید ممکن است به این ارور برخورد کنید.
این ارور هنگامی رخ میدهد که شما تلاش میکنید روی یک فایل عملیاتی انجام دهید اما به طور مثال فایل موردنظر وجود ندارد و یا آدرس درستی از فایل وارد نکردهاید.
برای رفع این رفع این ارور در وارد کردن نام، پسوند و آدرس فایل دقت کنید و حتما از وجود داشتن فایل مطمئن شوید.
مثال:
with open("test.txt", "r") as t:
t.read()
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
— ModuleNotFoundError
هنگامی که پایتون نتواند کتابخانه موردنظر را پیدا کند این خطا را برمیگرداند.
اگر کتابخانه مورد نظر روی سیستم یا محیط مجازی نصب نباشد و یا غلط املایی در نوشتن نام کتابخانه داشته باشید با این ارور مواجه خواهید شد.
مثال:
import requests
ModuleNotFoundError: No module named 'requests'
— IndexError
مطمعناً تابهحال وقتی خواستید به یک عنصر قابل شمارش ها دسترسی پیدا کنید به این ارور برخورد کردهاید.
اما دلیل رخ دادن این ارور چیست؟ زمانی این ارور رخ میدهد که اندیس مورد نظری که شما میخواهید آن را بگیرید در لیست یا رشته وجود نداشته باشد.
مانند زمانی که یک لیست 3 آیتم دارد اما شما در پی آیتم چهارم هستید.
مثال:
names = ["Yasin", "Reza", "Navid"]
print(names[5])
IndexError: list index out of range
— KeyError
خطای key error خطایی رایج هست که احتمالا موقع کار با دیکشنری ها با اون برخورد کردید.
اگر تلاش کنید به یک مقدار توسط کلمه کلیدی آن دسترسی پیدا کنید اما آن کلمهکلیدی وجود نداشته باشد این خطا بروز داده میشود.
مثال:
names = {'Yasin': '1', 'Reza': '2'}
print(names['3'])
KeyError: '3'
— AttributeError
اگر تلاش کنید به یک متد یا صفت (attribute) از شئ دسترسی پیدا کنید اما شئ مورد نظر صفتی که میخواهید را نداشته باشد با این خطا مواجه خواهید شد.
مثال:
numbers = [1, 2, 3]
print(numbers.sum())
AttributeError: 'list' object has no attribute 'sum'
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
Forwarded from دیرکشن
This media is not supported in your browser
VIEW IN TELEGRAM
چطور در مسیر مهاجرت سورپرایز نشیم؟ 🎯✈️🌍
با داشتن اطلاعات دقیق و واقعی 📊، میتوانید از غافلگیریها دور بمانید 😌✨ و مسیر مهاجرتیتان را با اطمینان بیشتری طی کنید. 💪🚀
✅ با سفارش گزارش شخصیسازیشده دیرکشن، آگاهانه از میان ۴۰۰ برنامه مهاجرتی 🗂️ در ۱۸ کشور 🌎 و با کمک هوش مصنوعی 🤖 برای مهاجرت خود تصمیم بگیرید
دریافت گزارش
با داشتن اطلاعات دقیق و واقعی 📊، میتوانید از غافلگیریها دور بمانید 😌✨ و مسیر مهاجرتیتان را با اطمینان بیشتری طی کنید. 💪🚀
✅ با سفارش گزارش شخصیسازیشده دیرکشن، آگاهانه از میان ۴۰۰ برنامه مهاجرتی 🗂️ در ۱۸ کشور 🌎 و با کمک هوش مصنوعی 🤖 برای مهاجرت خود تصمیم بگیرید
دریافت گزارش
🔹 انواع ارور ها در پایتون
🔸 بخش سوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— UnboundLocalError
این ارور زمانی میتونه رخ بده که متغیر شما bound نشده یا اصطلاحا unbound هستش.
مثلا زمانی که در حال shadow زدن به یک متغیر global هستید.
یا اینکه از متغیر سطح local در متد یا تابع ای دیگر استفاده میکنید.
— UnicodeError
هنگامی که پایتون با مشکلات رمزگذاری یا رمزگشایی unicode مواجه میشود این ارور رخ میدهد.
از سری دلایل رخ دادن این ارور:
— استفاده از روش های رمزگذاری که پشتیبانی نمیشوند
— توالی بایت های خراب یا ناقص
مثال:
— ZeroDivisionError
وقتی بخواهیم عددی را بر صفر تقسیم کنیم پایتون این را نمایش میدهد.
مثال:
— MemoryError
اگر زمانی حافظه رم سیستم پر شود یا به اصطلاح تمام رم در حال استفاده باشد به این ارور برمیخورید.
در اکثر اوقات به این دلیل است که رم بدون آزاد شدن و به صورت مداوم درحال استفاده است.
برای مثال این کد سعی میکنه یک لیست با بیش از یک میلیارد عنصر درست کنه:
— PermissionError
ارور دسترسی برای زمانی است که پایتون دسترسی لازم برای عملیات مورد نظر رو ندارد، مثل ساخت فایل یا حذف فایل.
این ارور همچنین میتواند در صورتی رخ دهد که یک فایل مورد استفاده پراسس دیگری باشد.
برای مثال این تکه کد سعی میکند یک فولدر در system32 در ویندوز بسازد که در حالت عادی و بدون داشتن دسترسی administrator ممکن نیست.
✅ اینها ارور های رایج پایتونی بودند و از حالا به بعد به سراغ نحوه هندل کردن این ارور ها میریم.
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش سوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— UnboundLocalError
این ارور زمانی میتونه رخ بده که متغیر شما bound نشده یا اصطلاحا unbound هستش.
مثلا زمانی که در حال shadow زدن به یک متغیر global هستید.
یا اینکه از متغیر سطح local در متد یا تابع ای دیگر استفاده میکنید.
name = "Yasin"
def get_name():
print(name)
name = "ali"
print(name)
get_name()
UnboundLocalError: cannot access local variable 'name' where it is not associated with a value
— UnicodeError
هنگامی که پایتون با مشکلات رمزگذاری یا رمزگشایی unicode مواجه میشود این ارور رخ میدهد.
از سری دلایل رخ دادن این ارور:
— استفاده از روش های رمزگذاری که پشتیبانی نمیشوند
— توالی بایت های خراب یا ناقص
مثال:
unicode_str = b"\u1234\u5678\u90AB"
print(decoded_str.decode("ascii"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 0: ordinal not in range(128)
— ZeroDivisionError
وقتی بخواهیم عددی را بر صفر تقسیم کنیم پایتون این را نمایش میدهد.
مثال:
result = 5 / 0
ZeroDivisionError: division by zero
— MemoryError
اگر زمانی حافظه رم سیستم پر شود یا به اصطلاح تمام رم در حال استفاده باشد به این ارور برمیخورید.
در اکثر اوقات به این دلیل است که رم بدون آزاد شدن و به صورت مداوم درحال استفاده است.
برای مثال این کد سعی میکنه یک لیست با بیش از یک میلیارد عنصر درست کنه:
large_list = [0] * 1_000_000_000
— PermissionError
ارور دسترسی برای زمانی است که پایتون دسترسی لازم برای عملیات مورد نظر رو ندارد، مثل ساخت فایل یا حذف فایل.
این ارور همچنین میتواند در صورتی رخ دهد که یک فایل مورد استفاده پراسس دیگری باشد.
برای مثال این تکه کد سعی میکند یک فولدر در system32 در ویندوز بسازد که در حالت عادی و بدون داشتن دسترسی administrator ممکن نیست.
import os
os.mkdir(r"C:\Windows\System32\new_directory")
✅ اینها ارور های رایج پایتونی بودند و از حالا به بعد به سراغ نحوه هندل کردن این ارور ها میریم.
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔹 ارور ها در پایتون
🔸 بخش اول
💠 در پست های قبلی - انواع ارور ها، بخش اول، بخش دوم، بخش سوم - با ارور هایی که در پایتون ممکنه باهاشون برخورد کنیم آشنا شدیم.
💠 حالا وقت اینه که از این مطالب استفاده کنیم تا برنامه های خودمون رو بهبود بدیم.
همونطور که مطلع هستید، مفسر زمانی که به ارور برخورد میکنه برنامه رو متوقف میکنه و process اجرایی ما از کار میوفته.
قطعا این یک معضل برای برنامهنویس هاست، اما پایتون هم مثل خیلی از زبان های دیگه برای این مشکل راهحلی ارائه داده.
این زبان با دو کلمه کلیدی
ابتدا در بلوک
بریم چند تا مثال بزنیم تا با این ساختار بیشتر آشنا بشیم.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی را دریافت کند و یکی کمتر از آن عدد را چاپ کند و در آخر هم یک bye در پایان برنامه print کند.
روش یک - بدون استفاده از try except:
این کد تا زمانی صحیح و بدون مشکل کار میکنه که کاربر همیشه به عنوان ورودی یک عدد صحیح وارد کنه.
حالا اگر کاربر از کارکتری استفاده کنه که کلاس int انتظارش رو نداره، برنامه با ارور مواجه میشه و برنامه متوقف میشه. پس ما bye رو در خروجی نمیبینم:
روش دوم - با استفاده از try except:
اما اینجا به محض مواجهه با ارور، برنامه پیام مناسبی به کاربر نشون میده و به کارش ادامه میده، بدون اینکه process رو متوقف کنه.
همچنین میتونید صرفا یک یا چند خطای مورد انتظار و معین رو برای تکه کد خودتون درنظر بگیرید. به این صورت که در بلوک except نوع ارور رو مینویسید و مفسر صرفا نسبت به این ارور(ها) واکنش نشون میده.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی صحیح را دریافت کند و حاصل تقسیم 1000 بر آن را بنویسد.
جواب:
در این تکه کد فقط اگر به
حالا اگه بخوایم
تا اینجا با
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش اول
💠 در پست های قبلی - انواع ارور ها، بخش اول، بخش دوم، بخش سوم - با ارور هایی که در پایتون ممکنه باهاشون برخورد کنیم آشنا شدیم.
💠 حالا وقت اینه که از این مطالب استفاده کنیم تا برنامه های خودمون رو بهبود بدیم.
همونطور که مطلع هستید، مفسر زمانی که به ارور برخورد میکنه برنامه رو متوقف میکنه و process اجرایی ما از کار میوفته.
قطعا این یک معضل برای برنامهنویس هاست، اما پایتون هم مثل خیلی از زبان های دیگه برای این مشکل راهحلی ارائه داده.
این زبان با دو کلمه کلیدی
try
و except
ساختاری رو برای ما فراهم کرده که بتونیم ارور ها رو مدیریت یا هندل کنیم.ابتدا در بلوک
try
تکه خط کدی رو که ممکنه به خطا بخوره رو مینویسیم و در بلوک هم except
تکه کدی رو که میخوایم در صورت مواجه شدن به ارور اجرا بشه رو مینویسیم.بریم چند تا مثال بزنیم تا با این ساختار بیشتر آشنا بشیم.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی را دریافت کند و یکی کمتر از آن عدد را چاپ کند و در آخر هم یک bye در پایان برنامه print کند.
روش یک - بدون استفاده از try except:
number = int(input("enter a number: ")
print(number - 1)
print("bye")
این کد تا زمانی صحیح و بدون مشکل کار میکنه که کاربر همیشه به عنوان ورودی یک عدد صحیح وارد کنه.
حالا اگر کاربر از کارکتری استفاده کنه که کلاس int انتظارش رو نداره، برنامه با ارور مواجه میشه و برنامه متوقف میشه. پس ما bye رو در خروجی نمیبینم:
ValueError: invalid literal for int() with base 10
روش دوم - با استفاده از try except:
try:
number = int(input("enter a number: "))
except:
print("the entry isn't an integer")
print("bye")
اما اینجا به محض مواجهه با ارور، برنامه پیام مناسبی به کاربر نشون میده و به کارش ادامه میده، بدون اینکه process رو متوقف کنه.
همچنین میتونید صرفا یک یا چند خطای مورد انتظار و معین رو برای تکه کد خودتون درنظر بگیرید. به این صورت که در بلوک except نوع ارور رو مینویسید و مفسر صرفا نسبت به این ارور(ها) واکنش نشون میده.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی صحیح را دریافت کند و حاصل تقسیم 1000 بر آن را بنویسد.
جواب:
try:
number = int(input("enter a number: "))
print(1e3 / number)
except ValueError:
print("the entry isn't an integer")
در این تکه کد فقط اگر به
ValueError
برخورد کنیم برنامه واکنشنشون میده و درغیر اینصورت برنامه با ارور مواجه، و در نتیجه متوقف میشه.حالا اگه بخوایم
ZeroDivisionError
رو هم هندل کنیم چی؟ کاری نداره، اونم اضافه میکنیم:try:
number = int(input("enter a number: "))
print(1e3 / number)
except ValueError:
print("the entry isn't an integer")
except ZeroDivisionError:
print("entry cannot be zero")
تا اینجا با
try
و except
آشنا شدیم. در پست های بعدی بیشتر در مورد error handling صحبت میکنیم و با این موضوع بیشتر آشنا میشیم.🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython