Programming
354 subscribers
501 photos
66 videos
50 files
186 links
سایت نداره این کانال اصلا
Download Telegram
😁1
Programming
کد زیر رو تو هر نسخه‌ای از پایتون ۳ که دوست دارید اجرا کنید (ترجیحا تو مفسر زنده) >>> class Test: ... def __del__(self): ... print("Deleted!") ... >>> t = Test() >>> z = t >>> z <__main__.Test object at 0x0000...> >>> del t >>> del z >>> "Test"…
جواب درست رو صاحاب کانال گفت ولی تیکه تیکه گفت من اینجا براتون خلاصه توضیح میدم:
وقتی z رو مقداردهی می‌کنیم، درواقع تبدیل میشه به رفرنسی از متغیر t
تو پایتون یه آبجکت پاک نمیشه تا وقتی که رفرنس هاش هم پاک بشن (این قضیه مربوط میشه به garbage collector)
وقتی همینجوری z رو داخل یه مفسر زنده وارد می‌کنیم، مقدار اون چیزی که وارد کردیم رو به متغیر "_" مقداردهی میکنه
همین باعث میشه که یه رفرنس دیگه ایجاد شه که با وارد کردن "Test" یا هر مقدار دیگه‌ای تو مفسر، اون رفرنس پاک میشه و در نهایت متد __del__ اجرا میشه
یه چالش دیگه؟ یا بگیریم بخوابیم؟
👎2
یه قرعه کشی بزاریم برا کانال؟
پرمیوم یا استارز
🔥4
404 not found
#چالش
سطح: آسون

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 257; b = 257
>>> a is b
True


پ.ن: اینو احتمالا بیشترتون میدونید دلیلشو و حتی هوش مصنوعی هم میتونه بگه ولی هرکی خلاصه تر بگه فورواردش می‌کنم کانال
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
این پکیج ۲۴ سال پیش به پایتون اضافه شده. خیلی مبهمه. معلوم نیست شوخیه یا سوتیه.

عکس سمت راست کدیه که واسه پرینت شدن متن توی عکس سمت چپ نوشته شده
اسم پکیج: this
😁2👨‍💻1
👍8👎1
/g/‘s Tech Memes
Video
دنیا قبل هوش مصنوعی یه همچین شکلی بود
Programming
#چالش سطح: آسون >>> a = 256 >>> b = 256 >>> a is b True >>> a = 257 >>> b = 257 >>> a is b False >>> a = 257; b = 257 >>> a is b True پ.ن: اینو احتمالا بیشترتون میدونید دلیلشو و حتی هوش مصنوعی هم میتونه بگه ولی هرکی خلاصه تر بگه فورواردش می‌کنم کانال
وقتی مفسر پایتون اجرا میشه از اعداد -5 تا 256 توی حافظه دستگاه (RAM) ذخیره میشن

این یه جور راه حل پایتون برای افزایش سرعته. هروقت بخواید یه متغیر با مقدار عددی تو این بازه درست کنید، مفسر پایتون واقعا از صفر اون متغیر رو تو حافظه درست نمیکنه چون از قبل تو حافظه یدونه ساخته و فقط متغیر شما رو رفرنسی برای متغیر اصلی خودش میکنه
به همین خاطره که:
>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False


البته پیاده سازی این سیستم بهینه سازی بسته به ورژن پایتون، نوع سیستم عامل و چیزای دیگه ممکنه متفاوت بشه و به همین خاطر کدهای زیر ممکنه نتیجه متفاوتی روی پایتون سیستم شما بده:
>>> a, b = 257, 257
>>> a is b # python 3.7
False
>>> a is b # پیاده سازی متفاوت
True
>>> a = 257; b = 257;
>>> a is b
True
🔥1👨‍💻1
Programming
>>> a = "test" >>> b = "test" >>> a is b True >>> a = "test!" >>> b = "test!" >>> a is b False این هم همینطور
برای رشته ها هم یه همچین سیستم بهینه سازی وجود داره منتها یکم فرق داره
همونطور که شاید بدونید رشته ها مثل لیستا تو رم ذخیره میشن
هر کاراکتر جدا ذخیره میشه و آخر سر یه رشته ساخته میشه که رفرنس همه این کاراکترا رو یه جا تو رم ذخیره کنه

حالا پایتون یه سیستم به اسم داوطلب سازی (Interning) داره که میاد کاراکترای "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz" رو از قبل تو حافظه ذخیره میکنه و هر رشته ای که بعدا تو برنامتون بسازید و فقط از این کاراکترا استفاده کنه، دونه دونه کاراکترای از قبل رزرو شده توی رشته شما داوطلب یا جایگزین میشن

شاید من اشتباه برداشت کردم یا توضیح دادم ولی اگه خواستید بیشتر بدونید کد پیاده سازیش تو این لینک هست:
https://github.com/python/cpython/blob/3.6/Objects/codeobject.c#L19
اگه دقت کنید "test!" یه کاراکتر علامت تعجب داره که توی اون بازه نیست
واسه همینه که رفرنس نمیشه و تو یه جای مجزا تو رم ذخیره میشه
👍2