🔰 گروه برنامه نویسی و امنیت شبکه
🎗 گروه رسمی بنیاد نرم افزار پایتون فارسی:
@PyFarsi | @PSfarsi
🎗 گروه برنامه نویسی و امنیت شبکه:
@Gozarit | @Gozaritch
☄ این گروه و کانال هم به مجموع گروه ما اضافه شد و در حوزه برنامه نویسی و امنیت شبکه فعالیت میکنه. خوشحال میشیم این کانال و گروه هم دنبال کنید 🙂🤟
🎗 گروه رسمی بنیاد نرم افزار پایتون فارسی:
@PyFarsi | @PSfarsi
🎗 گروه برنامه نویسی و امنیت شبکه:
@Gozarit | @Gozaritch
☄ این گروه و کانال هم به مجموع گروه ما اضافه شد و در حوزه برنامه نویسی و امنیت شبکه فعالیت میکنه. خوشحال میشیم این کانال و گروه هم دنبال کنید 🙂🤟
Forwarded from آموزش برنامه نویسی و دوره های امنیتی
💢 آموزش ربات نویسی api با پایتون و کتابخونه پایروگرام
💯 این پست برای کسایی که تازه وارد هستن و میپرسن ویدیو ها کجا آپلود شدن ،برای دیدن هر قسمت روی دکمه ای زیر کلیک کنید 👇
🔸 تمام قسمت ها به صورت کامل 🔸
آدرس گپ :
🔰 www.tgoop.com/gozarit
آدرس کانال :
🔰 www.tgoop.com/gozaritch
💯 این پست برای کسایی که تازه وارد هستن و میپرسن ویدیو ها کجا آپلود شدن ،برای دیدن هر قسمت روی دکمه ای زیر کلیک کنید 👇
🔸 تمام قسمت ها به صورت کامل 🔸
آدرس گپ :
🔰 www.tgoop.com/gozarit
آدرس کانال :
🔰 www.tgoop.com/gozaritch
✔️ تازههای پایتون ۳.۱۲
تا چند روز آینده پایتون ۳.۱۲ که آخرین ورژن پایدار پایتون هست قراره منتشر بشه، بیاید تا با جدیدترین قابلیتها و بهبودهای پایتون آشنا بشیم 😁
🔗 https://virgool.io/@liewpl/python-3-12-whats-new-vpq99njtytc6
〰〰〰〰〰〰〰〰
🔰 Channel: @PSFarsi
🔰 Group: @PyFarsi
تا چند روز آینده پایتون ۳.۱۲ که آخرین ورژن پایدار پایتون هست قراره منتشر بشه، بیاید تا با جدیدترین قابلیتها و بهبودهای پایتون آشنا بشیم 😁
🔗 https://virgool.io/@liewpl/python-3-12-whats-new-vpq99njtytc6
〰〰〰〰〰〰〰〰
🔰 Channel: @PSFarsi
🔰 Group: @PyFarsi
Forwarded from آموزش برنامه نویسی و دوره های امنیتی
⚡️ دسترسی سریع به برخی از مطالب کانال
☄ دوره سوکت نویسی همراه پروژه با پایتون
☄ دوره ربات نویسی api با پایتون
☄ دوره ربات نویسی cli با پایتون
☄ انتقال فایل در شبکه با پایتون Socket
☄ دوره اندروید هکینگ
☄ کرک سرور های لینوکسی با پایتون
☄ ابزار به دست آوردن اطلاعات کاربران اینستاگرام
☄ پنل SmsBomber تحت وب
☄ دریافت ایمیل فیک با پایتون
☄ درگاه پرداخت آنلاین برای ربات تلگرامی
☄ پروژه تحت وب آب و هوا
☄ پنج قانون مهم دنیا
☄ پکیج جامع پایتون
☄ پروژه حسابداری پایتون
☄ پنل sms پایتون
☄ پنل ارسال پیوی واتساپ
☄ پنل دریافت ایمیل موقت و فیک پایتون
☄ چگونه وارد دنیای هک و امنیت شویم؟
☄ موزیک پلیر پایتون
☄ ارسال ایمیل ناشناس
☄ پروژه Quiz Application دسکتاپ
☄ پروژه پنل و سمت کاربر والپیپر پایتون
☄ پنل مدیریتی ربات های تلگرامی دسکتاپ
☄ و ...
➖➖➖➖➖
آدرس گپ :
🔰 www.tgoop.com/gozarit
آدرس کانال :
🔰 www.tgoop.com/gozaritch
☄ دوره سوکت نویسی همراه پروژه با پایتون
☄ دوره ربات نویسی api با پایتون
☄ دوره ربات نویسی cli با پایتون
☄ انتقال فایل در شبکه با پایتون Socket
☄ دوره اندروید هکینگ
☄ کرک سرور های لینوکسی با پایتون
☄ ابزار به دست آوردن اطلاعات کاربران اینستاگرام
☄ پنل SmsBomber تحت وب
☄ دریافت ایمیل فیک با پایتون
☄ درگاه پرداخت آنلاین برای ربات تلگرامی
☄ پروژه تحت وب آب و هوا
☄ پنج قانون مهم دنیا
☄ پکیج جامع پایتون
☄ پروژه حسابداری پایتون
☄ پنل sms پایتون
☄ پنل ارسال پیوی واتساپ
☄ پنل دریافت ایمیل موقت و فیک پایتون
☄ چگونه وارد دنیای هک و امنیت شویم؟
☄ موزیک پلیر پایتون
☄ ارسال ایمیل ناشناس
☄ پروژه Quiz Application دسکتاپ
☄ پروژه پنل و سمت کاربر والپیپر پایتون
☄ پنل مدیریتی ربات های تلگرامی دسکتاپ
☄ و ...
➖➖➖➖➖
آدرس گپ :
🔰 www.tgoop.com/gozarit
آدرس کانال :
🔰 www.tgoop.com/gozaritch
✔️ استیبل بودن یا نبودن یک الگوریتم مرتب سازی
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
lst.sort(key=lambda x: (x[1], x[0]))
کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])
اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
پایتون از Tim Sort استفاده میکنه و stable هست.
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
〰〰〰〰〰〰〰〰
🔰 Channel: @PSFarsi
🔰 Group: @PyFarsi
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
lst.sort(key=lambda x: (x[1], x[0]))
کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])
اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
پایتون از Tim Sort استفاده میکنه و stable هست.
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
〰〰〰〰〰〰〰〰
🔰 Channel: @PSFarsi
🔰 Group: @PyFarsi
✔️ بیاید تا برای عبارت
در این پست با استفاده از نظریهی زبانها و ماشینها گام به گام نوشتن یک tokenizer رو به صورت تئوری بررسی میکنیم و سپس چیزایی که به صورت تئوری نوشتیم رو با پایتون، به صورت عملی اجراشون میکنیم.
پس از tokenizer، یک پارسر مینویسیم تا عبارت رو برای پایتون قابل فهم کنیم و ازش استفاده کنیم
https://virgool.io/@liewpl/tokenizer-parser-in-python-ubzlsvukmdxz
〰〰〰〰〰〰〰〰
🔰 Channel: @PSFarsi
🔰 Group: @PyFarsi
4w5d12h16m11
یک tokenizer و یک parser بنویسیمدر این پست با استفاده از نظریهی زبانها و ماشینها گام به گام نوشتن یک tokenizer رو به صورت تئوری بررسی میکنیم و سپس چیزایی که به صورت تئوری نوشتیم رو با پایتون، به صورت عملی اجراشون میکنیم.
پس از tokenizer، یک پارسر مینویسیم تا عبارت رو برای پایتون قابل فهم کنیم و ازش استفاده کنیم
https://virgool.io/@liewpl/tokenizer-parser-in-python-ubzlsvukmdxz
〰〰〰〰〰〰〰〰
🔰 Channel: @PSFarsi
🔰 Group: @PyFarsi
Forwarded from آموزش برنامه نویسی و دوره های امنیتی
🎉 تبریک میگوییم! 🎉
که تعداد اعضای کانال یوتیوب به 1000 هزار سابسکرایب رسیده است!
از همه شما که برای ما تلاش میکنید و با کانال ما همراهی میکنید، سپاسگزاریم.
ما همیشه با شما هستیم و به دنبال ارائه محتوای بهتر و جذابتر برای شما خواهیم بود. با تشکر از همگی! 🙏
💠 سابسکرایب چنل یوتیوب
🎗 گروه رسمی بنیاد نرم افزار پایتون فارسی:
@PyFarsi | @PSfarsi
🎗 گروه برنامه نویسی و امنیت شبکه:
@Gozarit | @Gozaritch
که تعداد اعضای کانال یوتیوب به 1000 هزار سابسکرایب رسیده است!
از همه شما که برای ما تلاش میکنید و با کانال ما همراهی میکنید، سپاسگزاریم.
ما همیشه با شما هستیم و به دنبال ارائه محتوای بهتر و جذابتر برای شما خواهیم بود. با تشکر از همگی! 🙏
💠 سابسکرایب چنل یوتیوب
🎗 گروه رسمی بنیاد نرم افزار پایتون فارسی:
@PyFarsi | @PSfarsi
🎗 گروه برنامه نویسی و امنیت شبکه:
@Gozarit | @Gozaritch
european_database.sqlite
6.8 MB
Generators
درود. میخواستم درباره ی آبجکت معروف و شناخته شده ی generator حرف بزنیم ولی با نگاه کمی متفاوت تر و به این برسیم که دقیقا چطور کار میکنه و چطور پیداش شد. نیاز هست که کمی حرف های پیش نیاز بزنیم صبور باشید.
قبل از هر چیزی درباره ی خود فانکشن حرف بزنیم ولی نه تو پایتون بلکه تو C:
وقتی یه فانکشنی کال میشه، توی call stack یک frame جدید میاد که برای اون فانکشن هست. این frame شامل تمام متغیر های لوکال و پارامتر های اون فانکشن هست. وقتی فانکشن تموم میشه چه اتفاقی میفته؟
اون frame از stack پاپ میشه(یا دقیق ترش stack pointer کم میشه)
و نکته اینجاس که هرچی که توی اون frame هست دیگه قابل دسترس نیست و اگه استفادشون کنیم undefined behavior هست. چرا؟ چون توی "مموری استک" این frame قرار داده شده بود و اون فضا الان آزاد شده و قابل استفاده هست برای بقیه(توی پرانتز، تو C که مدیریت حافظه نداره، باید آبجکت هایی که توی heap میسازیم رو خودمون مدیریت کنیم نه استک):
int *returnArray() {
int arr[3] = {11, 22, 33};
printf("%p\n", arr);
printf("%d\n", arr[1]);
return &arr;
}
int main(void) {
int *arr;
arr = returnArray();
printf("%p\n", arr);
printf("%d\n", arr[1]); // ???
}
با اینکه آدرسش رو return کردیم ولی باز نمیتونیم به آیتم های لیست دسترسی داشته باشیم.
حالا اینارو گفتم که موضوع مهمی رو بگم اونم اینکه تو پایتون هم همین call stack و اینا هست ولی اون frame object توی heap ساخته میشه. این به این معناس که اگه بخوایم میتونیم ذخیرش داشته باشیمش و همیشه بمونه! مثلا مانع از نابود شدن خودش و آبجکت های درونش بشیم. تو مثال زیر global f رو اگه از کامنت در بیارید obj از بین نمیره چون frame رو ذخیره کردیم:
from gc import collect
from sys import _getframe
class A:
def __del__(self):
print("del called")
def fn():
# global f
f = _getframe(0)
obj = A()
fn()
collect()
input()
خب حالا که اینو گفتیم بریم سراغ خود آبجکت فانکشن تو پایتون. وقتی فانکشن کال میشه یه frame object ساخته میشه. این frame object داخلش آبجکت های زیادی هست(مستقیم یا غیر مستقیم) از جمله رفرنسی داره به متغیر های داخل اون namespace و رفرنسی داره به code object که یک unit عه executable هست. داخل این code object ما bytecode ها رو داریم که همون instruction ها هستن.
درواقع instruction ها هستن که اجرا میشن و این state ذخیره میشه. تو کد زیر lasti یعنی last instruction. (توی cpu هم اتفاق مشابهی میفته. اینجا pvm میخواد بدونه چیو اجرا کرده و حالا نوبت چیه):
from sys import _getframe
def fn():
print(_getframe(0).f_lasti)
a = 10
print(_getframe(0).f_lasti)
fn()
خب حالا بخش جالب ماجرا اینجاس. ما به عنوان طراحان فرضی زبان پایتون، میدونیم که frame ما میتونه خارج از موقع کال شدن هم زنده بمونه + از طرفی به state هم که دسترسی داریم...( اینکه الان متغیر های local چیا هستن، اینکه الان تا instruction چندم اجرا شده و غیره)
فقط یه مشکلی هست، فانکشن های ما وقتی کال میشن از اولین instruction تا آخرینش رو اجرا میکنن و تموم میشن و همه ی آبجکت های داخل اون frame از بین میرن(اگه رفرنس دیگه ای نداشته باشن جای دیگه).
الان همه چیز محیا هست برای اینکه یه ساختار یا keyword جدیدی بیاریم تو زبان که هرجایی از execution فانکشن خواستیم بتونیم pause کنیم و اون رو با هر state ای که داره به حال خودش رها کنیم. بیایم yield رو معرفی کنیم! هروقت yield اومد، کافیه اجرا رو متوقف کنیم و مثل فانکشن ها(که بعد از تموم شدنشون، frame شون از stack frame جدا میشد) این generator ها رو هم frame شون رو جدا کنیم.
بعدا اگه خواسیم generator رو ادامه بدیم و روش next بزنیم(مستقیم خودمون یا غیر مستقیم توسط پایتون) تنها کاری که باید بکنیم اینه که frame ش رو برداریم بچسبونیم به stack frame ممون و از اون state ای که بودیم ادامه بدیم.
def gen():
a = 1
yield
b = 1
yield
g = gen()
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)
این call stack با linkedlist پیاده سازی شده و frame ها نود های اون هستن. با f_back به frame قبلی اشاره میکنن به راحتی وصل میشن و جدا میشن.
جنریتور ها با وجود سرعت خوبی که دارن، برای سرعت بیشتر ساخته نشدن بلکه برای استفاده ی بهینه تر از مموری ساخته شدن. داشتن همچین آبجکتی(به اضافه ی ساختار هایی مثل yield from) میتونه زمینه ی خیلی چیز ها رو فراهم کنه. از جمله فریموورک هایی مثل asyncio :)
درود. میخواستم درباره ی آبجکت معروف و شناخته شده ی generator حرف بزنیم ولی با نگاه کمی متفاوت تر و به این برسیم که دقیقا چطور کار میکنه و چطور پیداش شد. نیاز هست که کمی حرف های پیش نیاز بزنیم صبور باشید.
قبل از هر چیزی درباره ی خود فانکشن حرف بزنیم ولی نه تو پایتون بلکه تو C:
وقتی یه فانکشنی کال میشه، توی call stack یک frame جدید میاد که برای اون فانکشن هست. این frame شامل تمام متغیر های لوکال و پارامتر های اون فانکشن هست. وقتی فانکشن تموم میشه چه اتفاقی میفته؟
اون frame از stack پاپ میشه(یا دقیق ترش stack pointer کم میشه)
و نکته اینجاس که هرچی که توی اون frame هست دیگه قابل دسترس نیست و اگه استفادشون کنیم undefined behavior هست. چرا؟ چون توی "مموری استک" این frame قرار داده شده بود و اون فضا الان آزاد شده و قابل استفاده هست برای بقیه(توی پرانتز، تو C که مدیریت حافظه نداره، باید آبجکت هایی که توی heap میسازیم رو خودمون مدیریت کنیم نه استک):
int *returnArray() {
int arr[3] = {11, 22, 33};
printf("%p\n", arr);
printf("%d\n", arr[1]);
return &arr;
}
int main(void) {
int *arr;
arr = returnArray();
printf("%p\n", arr);
printf("%d\n", arr[1]); // ???
}
با اینکه آدرسش رو return کردیم ولی باز نمیتونیم به آیتم های لیست دسترسی داشته باشیم.
حالا اینارو گفتم که موضوع مهمی رو بگم اونم اینکه تو پایتون هم همین call stack و اینا هست ولی اون frame object توی heap ساخته میشه. این به این معناس که اگه بخوایم میتونیم ذخیرش داشته باشیمش و همیشه بمونه! مثلا مانع از نابود شدن خودش و آبجکت های درونش بشیم. تو مثال زیر global f رو اگه از کامنت در بیارید obj از بین نمیره چون frame رو ذخیره کردیم:
from gc import collect
from sys import _getframe
class A:
def __del__(self):
print("del called")
def fn():
# global f
f = _getframe(0)
obj = A()
fn()
collect()
input()
خب حالا که اینو گفتیم بریم سراغ خود آبجکت فانکشن تو پایتون. وقتی فانکشن کال میشه یه frame object ساخته میشه. این frame object داخلش آبجکت های زیادی هست(مستقیم یا غیر مستقیم) از جمله رفرنسی داره به متغیر های داخل اون namespace و رفرنسی داره به code object که یک unit عه executable هست. داخل این code object ما bytecode ها رو داریم که همون instruction ها هستن.
درواقع instruction ها هستن که اجرا میشن و این state ذخیره میشه. تو کد زیر lasti یعنی last instruction. (توی cpu هم اتفاق مشابهی میفته. اینجا pvm میخواد بدونه چیو اجرا کرده و حالا نوبت چیه):
from sys import _getframe
def fn():
print(_getframe(0).f_lasti)
a = 10
print(_getframe(0).f_lasti)
fn()
خب حالا بخش جالب ماجرا اینجاس. ما به عنوان طراحان فرضی زبان پایتون، میدونیم که frame ما میتونه خارج از موقع کال شدن هم زنده بمونه + از طرفی به state هم که دسترسی داریم...( اینکه الان متغیر های local چیا هستن، اینکه الان تا instruction چندم اجرا شده و غیره)
فقط یه مشکلی هست، فانکشن های ما وقتی کال میشن از اولین instruction تا آخرینش رو اجرا میکنن و تموم میشن و همه ی آبجکت های داخل اون frame از بین میرن(اگه رفرنس دیگه ای نداشته باشن جای دیگه).
الان همه چیز محیا هست برای اینکه یه ساختار یا keyword جدیدی بیاریم تو زبان که هرجایی از execution فانکشن خواستیم بتونیم pause کنیم و اون رو با هر state ای که داره به حال خودش رها کنیم. بیایم yield رو معرفی کنیم! هروقت yield اومد، کافیه اجرا رو متوقف کنیم و مثل فانکشن ها(که بعد از تموم شدنشون، frame شون از stack frame جدا میشد) این generator ها رو هم frame شون رو جدا کنیم.
بعدا اگه خواسیم generator رو ادامه بدیم و روش next بزنیم(مستقیم خودمون یا غیر مستقیم توسط پایتون) تنها کاری که باید بکنیم اینه که frame ش رو برداریم بچسبونیم به stack frame ممون و از اون state ای که بودیم ادامه بدیم.
def gen():
a = 1
yield
b = 1
yield
g = gen()
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)
این call stack با linkedlist پیاده سازی شده و frame ها نود های اون هستن. با f_back به frame قبلی اشاره میکنن به راحتی وصل میشن و جدا میشن.
جنریتور ها با وجود سرعت خوبی که دارن، برای سرعت بیشتر ساخته نشدن بلکه برای استفاده ی بهینه تر از مموری ساخته شدن. داشتن همچین آبجکتی(به اضافه ی ساختار هایی مثل yield from) میتونه زمینه ی خیلی چیز ها رو فراهم کنه. از جمله فریموورک هایی مثل asyncio :)
با سلام امروز در این مقاله قصد داریم کمی درباره ی ویژگی Specialized Adaptive Interpreter که در پایتون نسخه 3.11 اضافه شده صحبت کنیم:
لینک مقاله: https://vrgl.ir/U39hy
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
لینک مقاله: https://vrgl.ir/U39hy
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
✔️ الگوریتم Timsort
بیاید تا یکی از سریعترین الگوریتمهای مرتبسازی که حدود ۲۲ ساله زندهست و از پایتون 2.3 الگوریتم مرتب سازی استاندارد پایتونه و همچنین توی جاوا و Rust و Android و GNU Octave و انجین V8 هم حضور داره رو کاملا مفصل بررسیش کنیم 😁
🔗 https://virgool.io/@liewpl/timsort-algorithm-u41h0wv0jnax
〰〰〰〰〰〰〰〰〰
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
بیاید تا یکی از سریعترین الگوریتمهای مرتبسازی که حدود ۲۲ ساله زندهست و از پایتون 2.3 الگوریتم مرتب سازی استاندارد پایتونه و همچنین توی جاوا و Rust و Android و GNU Octave و انجین V8 هم حضور داره رو کاملا مفصل بررسیش کنیم 😁
🔗 https://virgool.io/@liewpl/timsort-algorithm-u41h0wv0jnax
〰〰〰〰〰〰〰〰〰
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
Every dunder method in Python
Link: https://pym.dev/every-dunder-method/
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
Link: https://pym.dev/every-dunder-method/
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
✔️ پایتون ۳.۱۳ با یک REPL جدید ریلیس میشه 😁😁
https://treyhunner.com/2024/05/my-favorite-python-3-dot-13-feature/
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
https://treyhunner.com/2024/05/my-favorite-python-3-dot-13-feature/
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔰Group: @PyFarsi
🔰Channel: @PSFarsi
Treyhunner
The new REPL in Python 3.13
Python 3.13 just hit feature freeze with the first beta release today. Just before the feature freeze, a shiny new feature was added: a brand new …
بنیاد پایتون کاران فارسی
#سوال مشکل کد زیر از نظر type annotation چیست؟ def f(l: list[object], k: list[int]) -> None: l = k
بسیار خب بیایید به جواب این سوال بپردازیم:
جواب این سوال در واقع به سه موضوع کوواریانس (Covariance)، کونتراواریانس (Contravariance) و اینواریانس (Invariance) بر میگردد. این سه مفهوم، مفاهیم مهمی در نظریهی نوعها (type theory) و typing در زبانهای برنامهنویسی هستند. این مفاهیم به چگونگی رابطهی بین type های مختلف و subtypes های آنها مربوط میشوند.
در ادامه مختصری از هر یک توضیح داده میشود :
1. Covariance
کوواریانس (Covariance) زمانی رخ میدهد که یک type از نوع
برخی زبان ها مانند سی شارپ، جاوا، سی پلاس پلاس از این مفهوم استفاده میکنند.
2. Contravariance
مفهوم Contravariance برعکس Covariance است. در این حالت ما میتوانیم از نوع پایه یا base به جای subtype استفاده کنیم. به عبارت دیگر، در Contravariance، اگر
3. Invariance
بر خلاف کوواریانس و کونتراواریانس، اینواریانس به این معنی است که یک نوع نمیتواند به یک نوع دیگری (حتی subtype یا supertype) تبدیل شود. به عبارت دیگر، اگر یک متغیر یا پارامتر از یک نوع خاص باشد، فقط میتواند همان نوع خاص را بپذیرد و نه نوعی دیگر.
بسیاری از ساختارهای داده در زبانهای برنامهنویسی اینواریانس هستند.
حالا که این مفاهیم را فهمیدیم بیایید به سوال برگردیم:
ما تابعی به شکل زیر داریم:
در این تابع ما دو پارامتر داریم:
- پارامتر l که لیستی از object ها است.
- پارامتر k که لیستی از int ها است.
در بدنه تابع، ما میخواهیم لیست k که از نوع [list[int است را به l که از نوع [list[object است، اختصاص دهیم.
در نگاه اول ممکن است به نظر برسد که این کد باید کار کند زیرا int نوعی object است. اما نکته ای که وجود دارد این است که
لیستها و به طور کلی بیشتر نوعهای Generic در پایتون invariance هستند.
این به این معنی است که شما نمیتوانید [list[int را به [list[object تبدیل کنید، حتی اگر int نوعی object باشد.
* دلیل این خطا این است که اگر اجازه چنین کاری داده شود، ممکن است باعث بروز خطاهای runtime شود!
برای مثال، فرض کنید که بعد از تخصیص k به l، شما میخواهید یک مقدار str رو به لیست l اضافه کنید (str هم یک object هست) :
در اینجا، l در واقع یک [list[int است (لیستی از اعداد صحیح) و اضافه کردن یک مقدار str به آن باعث خطا میشود.
یادگیری type annotation یکی از اون دسته بحثای جالب و گاهی پیچیده در پایتون است که پیشنهاد میشه حتما برید دنبال یادگیریش😁
موفق و پیروز باشید.
جواب این سوال در واقع به سه موضوع کوواریانس (Covariance)، کونتراواریانس (Contravariance) و اینواریانس (Invariance) بر میگردد. این سه مفهوم، مفاهیم مهمی در نظریهی نوعها (type theory) و typing در زبانهای برنامهنویسی هستند. این مفاهیم به چگونگی رابطهی بین type های مختلف و subtypes های آنها مربوط میشوند.
در ادامه مختصری از هر یک توضیح داده میشود :
1. Covariance
کوواریانس (Covariance) زمانی رخ میدهد که یک type از نوع
B
که subtype عه A
است، قابل assign کردن به یک مجموعه (Collection) از نوع B
باشد. به عبارت دیگر، در Covariance، اگر A
یک نوع باشد و B
نوعی باشد که از A
ارث بری میکند، یک شیء از نوع B
میتواند جایگزین یک شیء از نوع A
شود.برخی زبان ها مانند سی شارپ، جاوا، سی پلاس پلاس از این مفهوم استفاده میکنند.
2. Contravariance
مفهوم Contravariance برعکس Covariance است. در این حالت ما میتوانیم از نوع پایه یا base به جای subtype استفاده کنیم. به عبارت دیگر، در Contravariance، اگر
A
یک نوع باشد و B
نوعی باشد که از A
مشتق شده است، یک شیء از نوع A
میتواند جایگزین یک شیء از نوع B
شود.3. Invariance
بر خلاف کوواریانس و کونتراواریانس، اینواریانس به این معنی است که یک نوع نمیتواند به یک نوع دیگری (حتی subtype یا supertype) تبدیل شود. به عبارت دیگر، اگر یک متغیر یا پارامتر از یک نوع خاص باشد، فقط میتواند همان نوع خاص را بپذیرد و نه نوعی دیگر.
بسیاری از ساختارهای داده در زبانهای برنامهنویسی اینواریانس هستند.
حالا که این مفاهیم را فهمیدیم بیایید به سوال برگردیم:
ما تابعی به شکل زیر داریم:
def f(l: list[object], k: list[int]) -> None:
l = k
در این تابع ما دو پارامتر داریم:
- پارامتر l که لیستی از object ها است.
- پارامتر k که لیستی از int ها است.
در بدنه تابع، ما میخواهیم لیست k که از نوع [list[int است را به l که از نوع [list[object است، اختصاص دهیم.
در نگاه اول ممکن است به نظر برسد که این کد باید کار کند زیرا int نوعی object است. اما نکته ای که وجود دارد این است که
لیست ها
در پایتون از مفهوم Invariance بهره میبرند.لیستها و به طور کلی بیشتر نوعهای Generic در پایتون invariance هستند.
این به این معنی است که شما نمیتوانید [list[int را به [list[object تبدیل کنید، حتی اگر int نوعی object باشد.
* دلیل این خطا این است که اگر اجازه چنین کاری داده شود، ممکن است باعث بروز خطاهای runtime شود!
برای مثال، فرض کنید که بعد از تخصیص k به l، شما میخواهید یک مقدار str رو به لیست l اضافه کنید (str هم یک object هست) :
def f(l: list[object], k: list[int]) -> None:
l = k
l.append("a string")
در اینجا، l در واقع یک [list[int است (لیستی از اعداد صحیح) و اضافه کردن یک مقدار str به آن باعث خطا میشود.
یادگیری type annotation یکی از اون دسته بحثای جالب و گاهی پیچیده در پایتون است که پیشنهاد میشه حتما برید دنبال یادگیریش😁
موفق و پیروز باشید.
Forwarded from Learn Security | آموزش امنیت
〰〰〰〰〰
〰〰〰〰〰
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Learn Security | آموزش امنیت
This media is not supported in your browser
VIEW IN TELEGRAM
گوشی، ریستارت، خاموش روشن کردن و...
〰〰〰〰〰
〰〰〰〰〰
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from پرشین گیفت | Persian Gifts
Please open Telegram to view this post
VIEW IN TELEGRAM