نکته ۱:
دیکشنری توی پایتون نمونه از associative array هست که با hashtable یا hashmap پیاده سازی شده.
نکته ۲:
این پیاده سازی از hashmap چیزی هست که همین الان تو خیلی از زبان ها برای دیکشنری، set ها توی پایتون و برای دیکشنری ها تا قبل از ورژن ۳.۶ توی پایتون استفاده میشده.
به طور کلی hashmap ها ترتیب رو حفظ نمیکنن، همونطور که دیدید ولی از پایتون ۳.۶ به بعد آقای Raymond Hettinger یه پیاده سازی جدیدی برای دیکشنری ها انجام داد به اسم raymond dict. کلیت همینه ولی یه مقدار فرق داره با چیزی که دیدیم که هم کم حجم تره هم باعث میشه ترتیب رو حفظ کنن. اگه علاقه داشتید میتونم بعدا پیاده سازی دیکشنری های جدید پایتون رو هم بگم.
نکته ۳: توی separate chaining میشه به جای لیست از linked list یا binary search tree هم استفاده کرد که باز هم هر کدوم معایب و مزایای خودشون رو دارن.
نکته ۴:
خیلی از نکات گفته نشد به دلیل اینکه نمیخواستم بیشتر از این طولانی بشه. از جمله:
- پایتون علاوه بر key و value خود هشها رو هم نگه داره میکنه. چرا اینکارو میکنه؟
- این hash table عه ما به یه حدی که برسه نیاز داره تا resize بشه تا پرفورمنسش رو حفظ کنه. اگه از یه حدی بیشتر پر باشه تعداد دفعاتی که collision میگیریم بیشتر میشه و دیکشنری یا ست ما کند تر میشه.
- اگه یه کلیدی و delete کردیم تکلیف hashtable چی میشه؟ چطور باید هندل بشه؟
من همه ی انواع implementation هایی که اسمشون اومد رو به صورت کامل پیاده سازی کردم و نکاتی که وقت نشد رو توش گنجوندم. میتونید به عنوان رفرنس بهش یه نگاه بندازید:
* Open Addressing:
- Linear Probing
- Quadratic Probing
- Double Hashing Probing
* Separate Chaining
- With Dynamic Array
- With Linked List
- With Binary Search Tree
ریپازیتوری گیتهاب:
https://github.com/amirsoroush/Python_Hashmaps
پست ۳ از ۳
👤 SorousH
💎 Channel: @DevelopixPython
دیکشنری توی پایتون نمونه از associative array هست که با hashtable یا hashmap پیاده سازی شده.
نکته ۲:
این پیاده سازی از hashmap چیزی هست که همین الان تو خیلی از زبان ها برای دیکشنری، set ها توی پایتون و برای دیکشنری ها تا قبل از ورژن ۳.۶ توی پایتون استفاده میشده.
به طور کلی hashmap ها ترتیب رو حفظ نمیکنن، همونطور که دیدید ولی از پایتون ۳.۶ به بعد آقای Raymond Hettinger یه پیاده سازی جدیدی برای دیکشنری ها انجام داد به اسم raymond dict. کلیت همینه ولی یه مقدار فرق داره با چیزی که دیدیم که هم کم حجم تره هم باعث میشه ترتیب رو حفظ کنن. اگه علاقه داشتید میتونم بعدا پیاده سازی دیکشنری های جدید پایتون رو هم بگم.
نکته ۳: توی separate chaining میشه به جای لیست از linked list یا binary search tree هم استفاده کرد که باز هم هر کدوم معایب و مزایای خودشون رو دارن.
نکته ۴:
خیلی از نکات گفته نشد به دلیل اینکه نمیخواستم بیشتر از این طولانی بشه. از جمله:
- پایتون علاوه بر key و value خود هشها رو هم نگه داره میکنه. چرا اینکارو میکنه؟
- این hash table عه ما به یه حدی که برسه نیاز داره تا resize بشه تا پرفورمنسش رو حفظ کنه. اگه از یه حدی بیشتر پر باشه تعداد دفعاتی که collision میگیریم بیشتر میشه و دیکشنری یا ست ما کند تر میشه.
- اگه یه کلیدی و delete کردیم تکلیف hashtable چی میشه؟ چطور باید هندل بشه؟
من همه ی انواع implementation هایی که اسمشون اومد رو به صورت کامل پیاده سازی کردم و نکاتی که وقت نشد رو توش گنجوندم. میتونید به عنوان رفرنس بهش یه نگاه بندازید:
* Open Addressing:
- Linear Probing
- Quadratic Probing
- Double Hashing Probing
* Separate Chaining
- With Dynamic Array
- With Linked List
- With Binary Search Tree
ریپازیتوری گیتهاب:
https://github.com/amirsoroush/Python_Hashmaps
پست ۳ از ۳
👤 SorousH
💎 Channel: @DevelopixPython
GitHub
GitHub - amirsoroush/Python_Hashmaps: Python implementation of hash-tables using different techniques(Open addressing & Separate…
Python implementation of hash-tables using different techniques(Open addressing & Separate Chaining) for solving hash collisions. - amirsoroush/Python_Hashmaps
👍9❤3🔥2
درود. یه موضوع ساده ولی جالب:
همونطور که میدونید برای تولید اعداد (شبه) رندوم از ماژول random استفاده میکنیم توی پایتون. یکی از ویژگی های الگوریتم هایی که برای تولید اعداد شبه رندوم استفاده میشن این هست که باید سعی کنن به صورت یکنواخت اعداد رو توزیع کنن.
منظورم این هست که به طور مثال اگه خواستید ۱۰ هزار بار بین ۱ و ۲ و ۳ یه عددی رو انتخاب کنید باید بتونه تقریبا ۳۳۳۳ تا ۱ ، ۳۳۳۳ تا ۲ و ۳۳۳۳ تا ۳ انتخاب کنه. اول یه تست بگیریم ببینیم چقدر نزدیک هست:
خیلی استفاده ها. یکیش که میخواستم دربارش صحبت کنم، حل بعضی مسائل مربوط به احتمالات ریاضی هست.
یه نمونش رو ببینیم:
۱۴۳ نفر در صف برای ورود به هواپیما هستند و هر نفر یک شماره صندلی متفاوت بین ۱ و ۱۴۳ دارد. تعداد صندلی های هواپیما هم دقیقا ۱۴۳ تا است. نفر اول شماره خودش را گم میکند و روی یک صندلی تصادفی میشند. از آن موقع به بعد هر کسی روی صندلی خودش مینشیند مگر این که فرد دیگری آنجا نشسته باشد و در این صورت روی یک صندلی خالی تصادفی مینشیند.
احتمال اینکه نفر ۱۴۳ ام روی صندلی خودش بنشیند چقدر است؟
اگه تونستین این سوال رو از راه ریاضی حل کنید که چه عالی، ولی اگر مثل من با دیدن صورت سوال راه حل ریاضیش به ذهنتون نیومد یا شک داشتید، کافیه بیاید فقط ۱ بار اون داستانی که توی صورت سوال اومده رو به کد تبدیل کنید، هرجا گفت تصادفی یا رندوم شما از random استفاده میکنید. در آخر مثلا ۱۰ هزار بار توی لوپ تکرارش کنید. به همین راحتی جواب و به دست میارید.
کلیت کار: یک لیستی درست کنید از ۱۴۳ نفر که هر کدوم یه شماره صندلی ای بین ۱ تا ۱۴۳ دستشونه، برای نفر اول یه شماره به صورت رندم انتخاب کنید، بعد از نفر دوم تا آخر چک کنید که آیا صندلیش خالی یا None هست یا پره؟
اگه خالی بود بذاریدش اونجا و اگه پر بود یه شماره رندوم براش انتخاب کنید. در انتها، ما بدست آوردیم که "یک بار"ش چی میشه... آیا نفر آخر میشینه سر جاش یا نمیشینه. این جواب مهم نیست چی باشه، همین تابع رو ۱۰ هزار بار کال کنید و توی Counter بذارید.
احتمالش چقدر شد؟
👤 SorousH
💎 Channel: @DevelopixPython
همونطور که میدونید برای تولید اعداد (شبه) رندوم از ماژول random استفاده میکنیم توی پایتون. یکی از ویژگی های الگوریتم هایی که برای تولید اعداد شبه رندوم استفاده میشن این هست که باید سعی کنن به صورت یکنواخت اعداد رو توزیع کنن.
منظورم این هست که به طور مثال اگه خواستید ۱۰ هزار بار بین ۱ و ۲ و ۳ یه عددی رو انتخاب کنید باید بتونه تقریبا ۳۳۳۳ تا ۱ ، ۳۳۳۳ تا ۲ و ۳۳۳۳ تا ۳ انتخاب کنه. اول یه تست بگیریم ببینیم چقدر نزدیک هست:
> from random import randintخیلی خوب و نزدیک بود. ولی حالا از اینکه اینا یکنواخت توزیع میشن چه استفادهای میتونیم بکنیم؟
> from collections import Counter
>
> Counter((randint(1,3) for _ in range(10_000)))
Counter({2: 3379, 3: 3345, 1: 3276})
خیلی استفاده ها. یکیش که میخواستم دربارش صحبت کنم، حل بعضی مسائل مربوط به احتمالات ریاضی هست.
یه نمونش رو ببینیم:
۱۴۳ نفر در صف برای ورود به هواپیما هستند و هر نفر یک شماره صندلی متفاوت بین ۱ و ۱۴۳ دارد. تعداد صندلی های هواپیما هم دقیقا ۱۴۳ تا است. نفر اول شماره خودش را گم میکند و روی یک صندلی تصادفی میشند. از آن موقع به بعد هر کسی روی صندلی خودش مینشیند مگر این که فرد دیگری آنجا نشسته باشد و در این صورت روی یک صندلی خالی تصادفی مینشیند.
احتمال اینکه نفر ۱۴۳ ام روی صندلی خودش بنشیند چقدر است؟
اگه تونستین این سوال رو از راه ریاضی حل کنید که چه عالی، ولی اگر مثل من با دیدن صورت سوال راه حل ریاضیش به ذهنتون نیومد یا شک داشتید، کافیه بیاید فقط ۱ بار اون داستانی که توی صورت سوال اومده رو به کد تبدیل کنید، هرجا گفت تصادفی یا رندوم شما از random استفاده میکنید. در آخر مثلا ۱۰ هزار بار توی لوپ تکرارش کنید. به همین راحتی جواب و به دست میارید.
کلیت کار: یک لیستی درست کنید از ۱۴۳ نفر که هر کدوم یه شماره صندلی ای بین ۱ تا ۱۴۳ دستشونه، برای نفر اول یه شماره به صورت رندم انتخاب کنید، بعد از نفر دوم تا آخر چک کنید که آیا صندلیش خالی یا None هست یا پره؟
اگه خالی بود بذاریدش اونجا و اگه پر بود یه شماره رندوم براش انتخاب کنید. در انتها، ما بدست آوردیم که "یک بار"ش چی میشه... آیا نفر آخر میشینه سر جاش یا نمیشینه. این جواب مهم نیست چی باشه، همین تابع رو ۱۰ هزار بار کال کنید و توی Counter بذارید.
احتمالش چقدر شد؟
👤 SorousH
💎 Channel: @DevelopixPython
👍11🔥4❤3
انواع سرچ ها روی لیست
خیلی خلاصه چند تا از انواع سرچ ها رو روی لیست باهم ببینیم:
فرض کنید یه لیست نا مرتبی از اعداد داریم به این شکل:
lst = [30, 2, 7, 14, 1, 25, 4, 15, 9]
اگه بخواهیم دنبال عدد ۱۵ بگردیم باید چیکار کنیم؟
1- Linear search(not optimized)
میتونیم از ایندکس شماره صفر شروع کنیم و تک تک تا انتها بریم جلو و اعداد رو نگاه کنیم ببینیم ۱۵ داخلشون هست یا نه. این درواقع کاری هست که پایتون انجام میده زمانی که شما از in استفاده میکنید. چون اعداد ترتیبی ندارن کار دیگه ای نمیشه کرد.
________________________________________
اگه اعداد مرتب بودن چی؟
lst = [1, 2, 4, 7, 9, 14, 15, 25, 30]
2- Linear search(optimized)
فرض کنیم میخواهیم دنبال عدد ۵ بگردیم. دوباره میتونیم شروع کنیم تک تک اعداد رو مقایسه کنیم، ولی بعد از اینکه به عدد ۷ رسیدیم، میتونیم دیگه ادامه ندیم. چون اعداد مرتب هستن، حتما توی اعداد بزرگتر از ۷ هم نخواهد بود. بهتر شد اینجا.
3- Jump search
میتونیم به جای اینکه تک تک به جلو بریم و اعداد رو، چند تا چند تا جلو بریم و بپریم اصطلاحا (jump search).
فرض کنید دنبال عدد ۲۵ میگردیم. میتونیم اعداد رو ۲ تا ۲ تا جلو بریم، یعنی اول ایندکس شماره ۰ (یا عدد ۱) و نگاه میکنیم، بعد میریم ایندکس شماره ۲ (یا عدد ۴)، بعد ایندکس شماره ۴ (یا عدد ۹) و تا آخر، هر جا که دیدیم عدد ایندکس مورد نظر بزرگتر از عدد مقصود ماست، یعنی به اون تیکه از لیست که ممکنه عدد هدف داخلش باشه رسیدیم، فقط کافیه داخل اون رو به صورت linear نگاه کنیم. برای پیدا کردن عدد ۲۵ ، فقط ۶ تا مقایسه لازم بود. (تو حالت خطی ۸ تا). حالا این jump ما چقدر باشه خوبه؟ محاسبات نشون میده که رادیکال n بهترین گام هست. ( n تعداد آیتم های داخل لیست هست)
4- Binary search
کافیه توی هر مرحله لیستمون رو به دو قسمت تقسیم کنیم، و آیتم هدف رو با آیتم وسطی مقایسه کنیم، اگه کوچیکتر بود، دیگه فقط توی اون نیمه ی سمت چپ دنبالش میگردیم، اگه بزرگتر بود توی نیمه ی سمت راست.
5- Interpolation search
خیلی شبیه binary search هست با این تفاوت که اونجا نقطه ای که لیست ما رو تقسیم میکرد و دقیقا وسط لیست میگرفتیم، ولی اینجا با استفاده از این فرمول، اون نقطه رو بدست میاریم:
mid = low + ((key - arr[low]) * (high - low) / (arr[high] - arr[low]))
low = کوچکترین ایندکس
high = بزرگترین ایندکس
key = آیتم هدف
این فرمول نقطه ی تقسیم رو مایل به چپ یا راست پیدا میکنه، نزدیک تر به آیتم هدف. ولی برای اینکه interpolation search بتونه خیلی سریع عمل کنه، باید لیست ما به صورت یکنواخت توزیع شده باشه.
6 - Exponential search
توی این روش که برای لیست های خیلی بزرگ کاربرد داره، از ابتدا شروع میکنیم به گشتن، ولی گام های ما به صورت exponential هست (توان های ۲):
0, 1, 4, 9, 16, 25, ...
وقتی که آیتمی پیدا کردیم که از آیتم هدف ما بزرگتر بود، میایم اون تیکه رو دوباره فقط جست و جو میکنیم(مثل jump search) ولی دیگه این جست و جو خطی نیست بلکه روش binary search انجام میدیم.
نکته: این الگوریتم ها بسته به شرایط الگوریتم های خیلی بهتری هستن از کاری که پایتون انجام میده. به پایتون حتی اگه لیست مرتب شده هم بدید باز تک تک سرچ میکنه. ولی خب نکته اینجاست که اون با C پیاده سازی شده و احتمالا توی خیلی از پیاده سازی های pure python از الگوریتم هایی با time complexity بهتر سریعتر باشه.
در آینده سعی میکنم بیشتر درمورد time complexity ی هرکدوم از این انواع سرچ و اینکه کجا کدوم بهتره استفاده بشه صحبت کنیم.
👤 SorousH
💎 Channel: @DevelopixPython
خیلی خلاصه چند تا از انواع سرچ ها رو روی لیست باهم ببینیم:
فرض کنید یه لیست نا مرتبی از اعداد داریم به این شکل:
lst = [30, 2, 7, 14, 1, 25, 4, 15, 9]
اگه بخواهیم دنبال عدد ۱۵ بگردیم باید چیکار کنیم؟
1- Linear search(not optimized)
میتونیم از ایندکس شماره صفر شروع کنیم و تک تک تا انتها بریم جلو و اعداد رو نگاه کنیم ببینیم ۱۵ داخلشون هست یا نه. این درواقع کاری هست که پایتون انجام میده زمانی که شما از in استفاده میکنید. چون اعداد ترتیبی ندارن کار دیگه ای نمیشه کرد.
________________________________________
اگه اعداد مرتب بودن چی؟
lst = [1, 2, 4, 7, 9, 14, 15, 25, 30]
2- Linear search(optimized)
فرض کنیم میخواهیم دنبال عدد ۵ بگردیم. دوباره میتونیم شروع کنیم تک تک اعداد رو مقایسه کنیم، ولی بعد از اینکه به عدد ۷ رسیدیم، میتونیم دیگه ادامه ندیم. چون اعداد مرتب هستن، حتما توی اعداد بزرگتر از ۷ هم نخواهد بود. بهتر شد اینجا.
3- Jump search
میتونیم به جای اینکه تک تک به جلو بریم و اعداد رو، چند تا چند تا جلو بریم و بپریم اصطلاحا (jump search).
فرض کنید دنبال عدد ۲۵ میگردیم. میتونیم اعداد رو ۲ تا ۲ تا جلو بریم، یعنی اول ایندکس شماره ۰ (یا عدد ۱) و نگاه میکنیم، بعد میریم ایندکس شماره ۲ (یا عدد ۴)، بعد ایندکس شماره ۴ (یا عدد ۹) و تا آخر، هر جا که دیدیم عدد ایندکس مورد نظر بزرگتر از عدد مقصود ماست، یعنی به اون تیکه از لیست که ممکنه عدد هدف داخلش باشه رسیدیم، فقط کافیه داخل اون رو به صورت linear نگاه کنیم. برای پیدا کردن عدد ۲۵ ، فقط ۶ تا مقایسه لازم بود. (تو حالت خطی ۸ تا). حالا این jump ما چقدر باشه خوبه؟ محاسبات نشون میده که رادیکال n بهترین گام هست. ( n تعداد آیتم های داخل لیست هست)
4- Binary search
کافیه توی هر مرحله لیستمون رو به دو قسمت تقسیم کنیم، و آیتم هدف رو با آیتم وسطی مقایسه کنیم، اگه کوچیکتر بود، دیگه فقط توی اون نیمه ی سمت چپ دنبالش میگردیم، اگه بزرگتر بود توی نیمه ی سمت راست.
5- Interpolation search
خیلی شبیه binary search هست با این تفاوت که اونجا نقطه ای که لیست ما رو تقسیم میکرد و دقیقا وسط لیست میگرفتیم، ولی اینجا با استفاده از این فرمول، اون نقطه رو بدست میاریم:
mid = low + ((key - arr[low]) * (high - low) / (arr[high] - arr[low]))
low = کوچکترین ایندکس
high = بزرگترین ایندکس
key = آیتم هدف
این فرمول نقطه ی تقسیم رو مایل به چپ یا راست پیدا میکنه، نزدیک تر به آیتم هدف. ولی برای اینکه interpolation search بتونه خیلی سریع عمل کنه، باید لیست ما به صورت یکنواخت توزیع شده باشه.
6 - Exponential search
توی این روش که برای لیست های خیلی بزرگ کاربرد داره، از ابتدا شروع میکنیم به گشتن، ولی گام های ما به صورت exponential هست (توان های ۲):
0, 1, 4, 9, 16, 25, ...
وقتی که آیتمی پیدا کردیم که از آیتم هدف ما بزرگتر بود، میایم اون تیکه رو دوباره فقط جست و جو میکنیم(مثل jump search) ولی دیگه این جست و جو خطی نیست بلکه روش binary search انجام میدیم.
نکته: این الگوریتم ها بسته به شرایط الگوریتم های خیلی بهتری هستن از کاری که پایتون انجام میده. به پایتون حتی اگه لیست مرتب شده هم بدید باز تک تک سرچ میکنه. ولی خب نکته اینجاست که اون با C پیاده سازی شده و احتمالا توی خیلی از پیاده سازی های pure python از الگوریتم هایی با time complexity بهتر سریعتر باشه.
در آینده سعی میکنم بیشتر درمورد time complexity ی هرکدوم از این انواع سرچ و اینکه کجا کدوم بهتره استفاده بشه صحبت کنیم.
👤 SorousH
💎 Channel: @DevelopixPython
🔥12👍6
Forwarded from Developix Support
📌 اگر دنبال تبدیل شدن به یک برنامهنویس مطرح در دنیای فریلنسری و کسب درآمد بیشتر هستی، شرکت در این کارگاه رو از دست نده!
💻 کارگاه تجارت بینالمللی برای برنامهنویسها؛
(فریلنسرینگ حرفهای در مقیاس جهانی)
🗓 زمان: 30 شهریور تا 6 مهر 1402
حضوری و آنلاین (2 جلسه حضوری و 5 جلسۀ آنلاین)
📝 اطلاعات بیشتر و ثبتنام
🔻و یا برای کسب اطلاعات بیشتر کافیه به آیدی ما پیام بدی!
🆔 @MaktabSharif_Admin
🌐 وبسایت |📱کانال تلگرام | 📲 اینستاگرام
💻 کارگاه تجارت بینالمللی برای برنامهنویسها؛
(فریلنسرینگ حرفهای در مقیاس جهانی)
🗓 زمان: 30 شهریور تا 6 مهر 1402
حضوری و آنلاین (2 جلسه حضوری و 5 جلسۀ آنلاین)
📝 اطلاعات بیشتر و ثبتنام
🔻و یا برای کسب اطلاعات بیشتر کافیه به آیدی ما پیام بدی!
🆔 @MaktabSharif_Admin
🌐 وبسایت |📱کانال تلگرام | 📲 اینستاگرام
👎5👍1
.pythonrc
درست مثل
.nanorc
.bashrc
.vimrc
...
و بقیه فایل های مشابه، یه pythonrc هم داریم که به همون منظور ایجاد شده. قرار هست از قبل از startup عه REPL خونده و اجرا بشه.
استفاده های مختلفی میشه کرد: مثلا اگه همیشه وقتی REPL رو باز میکنید یه سری کتابخونه رو import میکنید، میتونید یک بار اینجا import کنید و دیگه هربار اینکار رو نکنید.
یا مثلا اگه یه سری helper فانکشن برای خودتون نوشتید میتونید یکبار اینجا تعریفش کنید و هروقت که REPL رو باز کردید در دسترس شما هست.
یه کار جالب دیگه اینکه میتونیم built-in فانکشن help رو با inspect که توی rich هست عوض کنیم:
.pythonrc
اشاره کنه.
الان وقتی روی آبجکتی بزنید ورژن rich استفاده میشه.
منبع
👤 SorousH
💎 Channel: @DevelopixPython
درست مثل
.nanorc
.bashrc
.vimrc
...
و بقیه فایل های مشابه، یه pythonrc هم داریم که به همون منظور ایجاد شده. قرار هست از قبل از startup عه REPL خونده و اجرا بشه.
استفاده های مختلفی میشه کرد: مثلا اگه همیشه وقتی REPL رو باز میکنید یه سری کتابخونه رو import میکنید، میتونید یک بار اینجا import کنید و دیگه هربار اینکار رو نکنید.
یا مثلا اگه یه سری helper فانکشن برای خودتون نوشتید میتونید یکبار اینجا تعریفش کنید و هروقت که REPL رو باز کردید در دسترس شما هست.
یه کار جالب دیگه اینکه میتونیم built-in فانکشن help رو با inspect که توی rich هست عوض کنیم:
from functools import partialحالا باید environment variable عه PYTHONSTARTUP رو هم ست کنیم که به فایل
from rich import inspect, pretty
help = partial(inspect, help=True)
pretty.install()
.pythonrc
اشاره کنه.
الان وقتی روی آبجکتی بزنید ورژن rich استفاده میشه.
منبع
👤 SorousH
💎 Channel: @DevelopixPython
👍8🔥2
Conditional breakpoint
فرض کنید همچین کدی داریم:
ولی موضوع این هست که دیباگر وقتی ران میشه همون ابتدا کنار for loop متوقف میشه و ما باید دستی جلو ببریم. تو این حالت i مساوی ۰ هست. منطقی نیست که ۹۰ بار روی next بزنیم تا برسیم به اون حالتی که i برابر ۹۰ میشه.
خوشبختانه یه چیزی به اسم conditional breakpoint وجود داره که میتونید بهش یه expression عه boolean بدید و دیباگر فقط زمانی متوقف میشه که اون expression درست باشه.
توی ادیتور دلخواهتون بعد از اینکه break point گذاشتین، راست کلیک کنید روش و edit رو بزنید (یا هر اسم دیگه ای که داره) و توی اون پنجره ای که باز میشه بنویسید:
👤 SorousH
💎 Channel: @DevelopixPython
فرض کنید همچین کدی داریم:
for i in range(100):و دوباره فرض کنید زمانی که i میشه ۹۰ یه مشکلی بوجود میاد. میخواهیم برنامه رو دیباگ کنیم. چه کنیم؟ break point بذاریم سمت چپ for loop.
print(i)
ولی موضوع این هست که دیباگر وقتی ران میشه همون ابتدا کنار for loop متوقف میشه و ما باید دستی جلو ببریم. تو این حالت i مساوی ۰ هست. منطقی نیست که ۹۰ بار روی next بزنیم تا برسیم به اون حالتی که i برابر ۹۰ میشه.
خوشبختانه یه چیزی به اسم conditional breakpoint وجود داره که میتونید بهش یه expression عه boolean بدید و دیباگر فقط زمانی متوقف میشه که اون expression درست باشه.
توی ادیتور دلخواهتون بعد از اینکه break point گذاشتین، راست کلیک کنید روش و edit رو بزنید (یا هر اسم دیگه ای که داره) و توی اون پنجره ای که باز میشه بنویسید:
i == 90حالا با زدن دکمه دیباگ فقط زمانی متوقف میشه که این شرط درست باشه.
👤 SorousH
💎 Channel: @DevelopixPython
👍17🔥4❤2
| کانال توسعهدهندگان پایتون |
#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython
💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18👎1
Forwarded from کار و کسب، عادل طالبی 📌
This media is not supported in your browser
VIEW IN TELEGRAM
📌 دوره آنلاین سئو برای مدیران، آخرین روز ثبتنام با تخفیف ویژه
🔘 استراتژی سئو
🔘 مدیریت فرآیندهای سئو
🔘 گزارشات سئو
🔘 ارزیابی و نظارت بر فرآیندهای سئو
🔘 اشتباهات سئو
🔘 قراردادهای سئو
این دوره پس از سه سال مجدداً برگزار میشود. در این دوره یاد میگیرید چگونه فرآیندهای سئو را مدیریت کنید. این دوره برای مدیران و صاحبان کسب و کارها مفید است که بدانند از تیم سئو چه بخواهند و چگونه از اجرای صحیح فرایندهای سئو اطمینان یابند. همچنین متخصصین سئو یاد میگیرند چگونه با کارفرمایان به شکل درست تعامل و همکاری کرده، به نیازهای آنها پاسخ صحیح بدهند.
پنج جلسه آموزش انلاین فشرده و تخصصی همراه با یک جلسه پرسش و پاسخ.
اطلاعات بیشتر و ثبتنام در ایسمینار:
🌐 eseminar.tv/wb116105
کد تخفیف: talebi
فقط امروز و فردا، به جای 5 میلیون تومان فقط با 2 میلیون تومان در این دوره آنلاین شرکت کنید.
هدایای شرکت در دوره:
🔘 حداقل 2 میلیون تومان رپورتاژ در تریبون
🔘 اکانت 6 ماهه جتسئو به ارزش 1.200.000 تومان
🔘 اکانت یک سالۀ سازمانی میزیتو به ارزش 2.900.000 تومان
🔘 یک جلد کتاب سئو 2022+2023 امضاء شده.
❌❌ فقط امروز ❌❌
☑️ @kar_kasb
🔘 استراتژی سئو
🔘 مدیریت فرآیندهای سئو
🔘 گزارشات سئو
🔘 ارزیابی و نظارت بر فرآیندهای سئو
🔘 اشتباهات سئو
🔘 قراردادهای سئو
این دوره پس از سه سال مجدداً برگزار میشود. در این دوره یاد میگیرید چگونه فرآیندهای سئو را مدیریت کنید. این دوره برای مدیران و صاحبان کسب و کارها مفید است که بدانند از تیم سئو چه بخواهند و چگونه از اجرای صحیح فرایندهای سئو اطمینان یابند. همچنین متخصصین سئو یاد میگیرند چگونه با کارفرمایان به شکل درست تعامل و همکاری کرده، به نیازهای آنها پاسخ صحیح بدهند.
پنج جلسه آموزش انلاین فشرده و تخصصی همراه با یک جلسه پرسش و پاسخ.
اطلاعات بیشتر و ثبتنام در ایسمینار:
🌐 eseminar.tv/wb116105
کد تخفیف: talebi
فقط امروز و فردا، به جای 5 میلیون تومان فقط با 2 میلیون تومان در این دوره آنلاین شرکت کنید.
هدایای شرکت در دوره:
🔘 حداقل 2 میلیون تومان رپورتاژ در تریبون
🔘 اکانت 6 ماهه جتسئو به ارزش 1.200.000 تومان
🔘 اکانت یک سالۀ سازمانی میزیتو به ارزش 2.900.000 تومان
🔘 یک جلد کتاب سئو 2022+2023 امضاء شده.
❌❌ فقط امروز ❌❌
☑️ @kar_kasb
👎6👍2
Forwarded from Developix Support
This media is not supported in your browser
VIEW IN TELEGRAM
دایناسورها در حال خرید در تهران 🤯
⚡️هیچوقت فکرشو میکردی که همچین تصویری رو ببینی؟
⚡️از آینده به تو سلام 😁
💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!
همینالان بهش پبام بده تا عکسش رو برات بفرسته😇
فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot
🌀هوشمصنوعی با پیشرفت فوقالعادش داره همه دنیار رو فرا میگیره 😉🤯
⚡️هیچوقت فکرشو میکردی که همچین تصویری رو ببینی؟
⚡️از آینده به تو سلام 😁
💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!
همینالان بهش پبام بده تا عکسش رو برات بفرسته😇
فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot
🌀هوشمصنوعی با پیشرفت فوقالعادش داره همه دنیار رو فرا میگیره 😉🤯
👎27❤1
💠 معرفی کتاب 💠
💎 Django Design Patterns and Best Practices
📚 دانستن الگوهای مختلف میتواند زمان کد نویسی را تا حد زیادی کاهش دهد و عملکرد کد را افزایش دهد. نویسنده نهتنها الگوها را توضیح میدهد، بلکه با ارائه مثالها و راهحلها، مطمئن میشود که میدانید کجا و چه زمانی از هر الگوی استفاده کنید. این کتاب همچنین بهطور کامل تست و امنیت را پوشش میدهد که دو جنبه مهم توسعه هر برنامه وب هستند.
📖 سرفصلهای کتاب عبارتند از:
1️⃣ جنگو و الگوها
2️⃣ طراحی برنامه
3️⃣ مدلها
4️⃣ ویوها و URLها
5️⃣ قالبها
6️⃣ رابط ادمین
7️⃣ فرمها
8️⃣ کار کردن به صورت ناهمزمان
9⃣ ایجاد APIها
🔟 سر و کار داشتن با کد میراثی
1⃣1⃣ تست کردن و دیباگ کردن
2⃣1⃣ امنیت
3⃣1⃣ آمادگی برای محیط پروداکشن
📥 این کتاب را میتوانید از پیامی که در پایین این پست قرار دارد، دانلود کنید. همچنین این کتاب یک نسخه ترجمه آزاد را نیز داراست که میتوانید از این لینک گیتهاب به آن دسترسی داشته باشید.
#معرفی_کتاب
👤 MHReza
💎 Channel: @DevelopixPython
💎 Django Design Patterns and Best Practices
📚 دانستن الگوهای مختلف میتواند زمان کد نویسی را تا حد زیادی کاهش دهد و عملکرد کد را افزایش دهد. نویسنده نهتنها الگوها را توضیح میدهد، بلکه با ارائه مثالها و راهحلها، مطمئن میشود که میدانید کجا و چه زمانی از هر الگوی استفاده کنید. این کتاب همچنین بهطور کامل تست و امنیت را پوشش میدهد که دو جنبه مهم توسعه هر برنامه وب هستند.
📖 سرفصلهای کتاب عبارتند از:
1️⃣ جنگو و الگوها
2️⃣ طراحی برنامه
3️⃣ مدلها
4️⃣ ویوها و URLها
5️⃣ قالبها
6️⃣ رابط ادمین
7️⃣ فرمها
8️⃣ کار کردن به صورت ناهمزمان
9⃣ ایجاد APIها
🔟 سر و کار داشتن با کد میراثی
1⃣1⃣ تست کردن و دیباگ کردن
2⃣1⃣ امنیت
3⃣1⃣ آمادگی برای محیط پروداکشن
📥 این کتاب را میتوانید از پیامی که در پایین این پست قرار دارد، دانلود کنید. همچنین این کتاب یک نسخه ترجمه آزاد را نیز داراست که میتوانید از این لینک گیتهاب به آن دسترسی داشته باشید.
#معرفی_کتاب
👤 MHReza
💎 Channel: @DevelopixPython
👍10👎1
🔸 تا حالا شده بخواهید مقدار دو متغیر رو با همدیگه جابجا کنید؟
🔹 توی کد بالا با یه روش جالب این کار رو انجام میدهیم که دیگه نیاز نباشه برای این کار متغیر جدیدی ایجاد بکنید.
👤 MHReza
💎 Channel: @DevelopixPython
🔹 توی کد بالا با یه روش جالب این کار رو انجام میدهیم که دیگه نیاز نباشه برای این کار متغیر جدیدی ایجاد بکنید.
👤 MHReza
💎 Channel: @DevelopixPython
👍18👎5
✔️ استیبل بودن یا نبودن یک الگوریتم مرتب سازی
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
خروجی هردو:
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
👤 SorousH
💎 Channel: @DevelopixPython
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
lst.sort(key=lambda x: (x[1], x[0]))کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[پایتون از Tim Sort استفاده میکنه و stable هست.
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
👤 SorousH
💎 Channel: @DevelopixPython
👍24❤4🔥2👎1
💠 شده بخواید آیتمی رو که بیشتر از بقیه تکرار شده رو بگیرید؟ با کد بالا میتونید این کار رو انجام بدید.
#Tips
💎 Channel: @DevelopixPython
#Tips
💎 Channel: @DevelopixPython
👍30❤3🔥3👎2