مانی چند وقتیه که توی کانالش در مورد SQL به صورت تخصصی حرف میزنه، یک آموزشایی میده بهتون که سطح اعتماد به نفستون رو میاره زیر صفر، که چرا من اینا بلد نبودم، وای چرا من گند زدم تو پروژه ملت با این سوادم و ...
خلاصه که برید تو کانالش یاد بگیرید یکم با دیتابیس مهربون تر باشید و درست تر کوئری بزنید و بابای سرور رو از توی پورت هاش نکشید بیرون
کانالش :
@PyBackEndHub
من تخصص اصلیم nosql هستش و اگر دوست داشته باشید بعضی وقتا در مورد دیتابیس های سری زمانی صحبت کنم و سیستمشون رو یاد بدم بهتون
🔎 @py4ds
خلاصه که برید تو کانالش یاد بگیرید یکم با دیتابیس مهربون تر باشید و درست تر کوئری بزنید و بابای سرور رو از توی پورت هاش نکشید بیرون
کانالش :
@PyBackEndHub
من تخصص اصلیم nosql هستش و اگر دوست داشته باشید بعضی وقتا در مورد دیتابیس های سری زمانی صحبت کنم و سیستمشون رو یاد بدم بهتون
🔎 @py4ds
کار با Enum :
🔺از پایتون نسخه 3.4 Enum معرفی شده بود و در نسخهی 3.6 نیز Flag, IntEnum, auto معرفی شد.
📝 برای IntEnum
📝 برای Flag, auto
همچنین در نسخه 3.11 امکانات بیشتری بهش اضافه شد:
StrEnum, EnumCheck, ReprEnum, FlagBoundary, property, member, nonmember, global_enum, show_flag_values
🔎 @py4ds
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# You can access the enum members using their names.
print(Color.RED) # Output: Color.RED
# You can also access them using their values.
print(Color(1)) # Output: Color.RED
# Enum members are hashable, so they can be used in dictionaries and sets.
my_dict = {Color.RED: 'red', Color.GREEN: 'green', Color.BLUE: 'blue'}
print(my_dict[Color.RED]) # Output: 'red'
🔺از پایتون نسخه 3.4 Enum معرفی شده بود و در نسخهی 3.6 نیز Flag, IntEnum, auto معرفی شد.
📝 برای IntEnum
from enum import IntEnum
class Shape(IntEnum):
CIRCLE = 1
SQUARE = 2
TRIANGLE = 3
print(Shape.CIRCLE == 1) # Output: True
📝 برای Flag, auto
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
print(Permission.READ | Permission.WRITE) # Output: Permission.READ|WRITE
همچنین در نسخه 3.11 امکانات بیشتری بهش اضافه شد:
StrEnum, EnumCheck, ReprEnum, FlagBoundary, property, member, nonmember, global_enum, show_flag_values
class Direction(ReprEnum):
NORTH = "↑ North"
EAST = "→ East"
SOUTH = "↓ South"
WEST = "← West"
print(Direction.NORTH) # Output: ↑ North
class Permissions(FlagBoundary):
READ = 1
WRITE = 2
EXECUTE = 4
user_permissions = Permissions.READ | Permissions.WRITE
print(user_permissions) # Output: Permissions.READ | Permissions.WRITE
def show_flag_values(enum_class, value):
for member in enum_class:
if member & value:
print(f"{member.name}: {member.value}")
permissions = Permissions.READ | Permissions.WRITE
show_flag_values(Permissions, permissions)
# Output:
# READ: 1
# WRITE: 2
🔎 @py4ds
Forwarded from Sadra Codes
نسخه 0.5 پایاکشن هم رلیز شد! 💫
پایاکشن یه ابزاره متنبازه که اجازه میده با استفاده از پایتون، گیتهاب اکشن بسازید!
توی این رلیز کلی اتفاق افتاده. پروژه دیگه یه تمپلیت ساده نیس و تبدیل شده به یه پکیج پایتون. علاوهبر بهترشدن داکیومنت و ساختار، یه فیچر خیلی خفن هم اضافه شده که واقعا استفاده از GitHub Issues رو یه لول میبره بالاتر!
این فیچر این قابلیت رو به شما میده تا از Issue Form گیتهاب بعنوان ساید فرانت اپ های پایتونتون استفاده کنید! این فیچر الان قابل استفاده هست و توتوریالش هم توی داکها قرارداده شده.
یک مثال که میتونید با پایاکشن پیاده کنید: فرض کنید که یک ریپو NLP دارید که برای Text Summaraization استفاده میشه و میخواید مردم این قابلیت رو داشته باشن که تستش کنن. به راحتی میتونید ساختاری رو طراحی کنید که هرشخص بتونه یک ایشو باز کنه و در ایشو، از ابزار شما استفاده کنه. (همهچیز اتوماتیک اتفاق میوفته)
💅 Issue Form feature: pyaction.imsadra.me/tutorial/#issueform
🟣 PyAction repo: github.com/lnxpy/pyaction
پایاکشن یه ابزاره متنبازه که اجازه میده با استفاده از پایتون، گیتهاب اکشن بسازید!
توی این رلیز کلی اتفاق افتاده. پروژه دیگه یه تمپلیت ساده نیس و تبدیل شده به یه پکیج پایتون. علاوهبر بهترشدن داکیومنت و ساختار، یه فیچر خیلی خفن هم اضافه شده که واقعا استفاده از GitHub Issues رو یه لول میبره بالاتر!
این فیچر این قابلیت رو به شما میده تا از Issue Form گیتهاب بعنوان ساید فرانت اپ های پایتونتون استفاده کنید! این فیچر الان قابل استفاده هست و توتوریالش هم توی داکها قرارداده شده.
یک مثال که میتونید با پایاکشن پیاده کنید: فرض کنید که یک ریپو NLP دارید که برای Text Summaraization استفاده میشه و میخواید مردم این قابلیت رو داشته باشن که تستش کنن. به راحتی میتونید ساختاری رو طراحی کنید که هرشخص بتونه یک ایشو باز کنه و در ایشو، از ابزار شما استفاده کنه. (همهچیز اتوماتیک اتفاق میوفته)
💅 Issue Form feature: pyaction.imsadra.me/tutorial/#issueform
🟣 PyAction repo: github.com/lnxpy/pyaction
Forwarded from Go Casts 🚀
به دنبال ساختار باشید و نه چارچوب
چند روز پیش یه مربی کودک یه حرف خیلی مهمی زد با این مفهوم: «ما اینجا برای بچه ها ساختار تعیین می کنیم نه چارچوب، چارچوب یعنی حد و مرز!»
این جمله رو باید قاب کرد و زد رو دیوار، احتمالا در ابعاد خیلی زیادی از زندگی مهم باشه. در مهندسی نرم افزار و توسعه محصول هم خیلی حرف مهمیه.
بیشتر اوقات ما دنبال چارچوب هستیم در مهندسی نرم افزار، به همین دلیل وقتی خودمون رو به یه چارچوب خاص محدود می کنیم با چالش های زیادی روبرو میشیم. در حالیکه بهتره ما برای توسعه محصول ساختار داشته باشیم و طبق اصول ساختاری کار رو پیش ببریم، اینطوری چالش مون کمتر میشه.
اجازه بدید برداشت خودم از چارچوب و ساختار رو کمی بیشتر باز کنم. ساختار میشه مجموعه از قواعد رفتاری که باید سعی کنیم در توسعه محصول بهشون پایبند باشیم، در مقابل، چارچوب میشه تعیین کردن یه سری حد و مرز مشخص به شیوه ای سختگیرانه.
مثلا اگه بخوام برای توسعه یک سرویس ساختار تعیین کنم احتمالا میگم: این سرویس باید توان پاسخگویی بالایی داشته باشه، در مقابل خطا مقاوم باشه، قابلیت مقیاس پذیری داشته باشه، یک قرارداد ساده و شفاف به کلاینت ها ارائه بده و مواردی از این دست.
اما اگه بخوام چارچوب برای سرویس تعیین کنم احتمالا میگم: ما باید از ساختار کد مبتنی بر clean code یا ddd در فلان repository که خودمون یا دیگران اونو نوشتن پیروی کنیم، باید همه ورودی هارو تو پوشه port قرار بدیم، باید همه مدل هامون تو پوشه models باشه، باید از فلان روش ci/cd استفاده کنیم.
در توسعه محصول تعیین کردن حد و مرز و چارچوب میتونه خوب باشه، اما بشرطی که تعیین این حد و مرز تنها زمان پیاده سازی سرویس باشه و متعهد بشیم که کورکورانه و سختگیرانه نخوایم این چارچوب رو به همه سرویس ها و محصولات تحمیل کنیم.
خیلی از practiceهایی که معروف شدند مثل clean code و ddd و tdd و غیره هم از نظر من بیشتر به دنبال این هستند که به شما کمک کنند که برای کارتون ساختار تعیین کنید. در حالیکه اشتباهی که زیاد رخ میده اینه که ما با خوندن این مطالب احتمالا بیشتر به سمت درآوردن چارچوب میریم... همه ش به دنبال این هستیم که مثلا یه boilerplate داشته باشیم که از clean code پیروی کنه و همون رو همه جا استفاده کنیم.
من گاها به دوستان متذکر میشم که خوندن این الگوها و منابع خیلی خوبه، به شرطی که شما سعی کنی جان کلام و دغدغه اصلی رو متوجه بشی، نه اینکه سعی کنی به دنبال یک راه حل فست فودی و چارچوب مشخص و معین باشی که کورکورانه همه جا ازش استفاده کنی.
شما وقتی برای کارت ساختار داشته باشی میتونی انعطاف پذیر باشی و بسته به نیازت چارچوب تعیین کنی، اما اگه بخوای یه چارچوب معین رو همه جا رعایت کنی احتمالا یه جاهایی اصول ساختاری خودت رو مجبور میشی زیر پا بذاری چون هیچ چارچوب واحدی وجود نداره که برای همه نیازها مناسب باشه.
@gocasts
چند روز پیش یه مربی کودک یه حرف خیلی مهمی زد با این مفهوم: «ما اینجا برای بچه ها ساختار تعیین می کنیم نه چارچوب، چارچوب یعنی حد و مرز!»
این جمله رو باید قاب کرد و زد رو دیوار، احتمالا در ابعاد خیلی زیادی از زندگی مهم باشه. در مهندسی نرم افزار و توسعه محصول هم خیلی حرف مهمیه.
بیشتر اوقات ما دنبال چارچوب هستیم در مهندسی نرم افزار، به همین دلیل وقتی خودمون رو به یه چارچوب خاص محدود می کنیم با چالش های زیادی روبرو میشیم. در حالیکه بهتره ما برای توسعه محصول ساختار داشته باشیم و طبق اصول ساختاری کار رو پیش ببریم، اینطوری چالش مون کمتر میشه.
اجازه بدید برداشت خودم از چارچوب و ساختار رو کمی بیشتر باز کنم. ساختار میشه مجموعه از قواعد رفتاری که باید سعی کنیم در توسعه محصول بهشون پایبند باشیم، در مقابل، چارچوب میشه تعیین کردن یه سری حد و مرز مشخص به شیوه ای سختگیرانه.
مثلا اگه بخوام برای توسعه یک سرویس ساختار تعیین کنم احتمالا میگم: این سرویس باید توان پاسخگویی بالایی داشته باشه، در مقابل خطا مقاوم باشه، قابلیت مقیاس پذیری داشته باشه، یک قرارداد ساده و شفاف به کلاینت ها ارائه بده و مواردی از این دست.
اما اگه بخوام چارچوب برای سرویس تعیین کنم احتمالا میگم: ما باید از ساختار کد مبتنی بر clean code یا ddd در فلان repository که خودمون یا دیگران اونو نوشتن پیروی کنیم، باید همه ورودی هارو تو پوشه port قرار بدیم، باید همه مدل هامون تو پوشه models باشه، باید از فلان روش ci/cd استفاده کنیم.
در توسعه محصول تعیین کردن حد و مرز و چارچوب میتونه خوب باشه، اما بشرطی که تعیین این حد و مرز تنها زمان پیاده سازی سرویس باشه و متعهد بشیم که کورکورانه و سختگیرانه نخوایم این چارچوب رو به همه سرویس ها و محصولات تحمیل کنیم.
خیلی از practiceهایی که معروف شدند مثل clean code و ddd و tdd و غیره هم از نظر من بیشتر به دنبال این هستند که به شما کمک کنند که برای کارتون ساختار تعیین کنید. در حالیکه اشتباهی که زیاد رخ میده اینه که ما با خوندن این مطالب احتمالا بیشتر به سمت درآوردن چارچوب میریم... همه ش به دنبال این هستیم که مثلا یه boilerplate داشته باشیم که از clean code پیروی کنه و همون رو همه جا استفاده کنیم.
من گاها به دوستان متذکر میشم که خوندن این الگوها و منابع خیلی خوبه، به شرطی که شما سعی کنی جان کلام و دغدغه اصلی رو متوجه بشی، نه اینکه سعی کنی به دنبال یک راه حل فست فودی و چارچوب مشخص و معین باشی که کورکورانه همه جا ازش استفاده کنی.
شما وقتی برای کارت ساختار داشته باشی میتونی انعطاف پذیر باشی و بسته به نیازت چارچوب تعیین کنی، اما اگه بخوای یه چارچوب معین رو همه جا رعایت کنی احتمالا یه جاهایی اصول ساختاری خودت رو مجبور میشی زیر پا بذاری چون هیچ چارچوب واحدی وجود نداره که برای همه نیازها مناسب باشه.
@gocasts
Forwarded from 🧑💻PythonDev🧑💻
✅ هر وقت صحبت از شیء گرایی و ارث بری میشه پای Mixin هم میاد وسط. اما دقیقا چیه؟ Mixin توی پایتون یک الگو هستش و کدهایی که از این الگو بهره میبرند کلمهی کلیدی خاصی یا چیز اضافهتری ندارند. فرض کنین ما میخواهیم یک متد جدید به یک کلاس اضافه کنیم تا
مثلا کلاسهای زیر رو در نظر بگیرید.
حالا نیاز داریم که متد play music رو هم به این کلاس ها اضافه کنیم، دوتا راه داریم. اولیش اینه که:
اما یک ایرادی وجود داره. اینجا خودمون رو تکرار کردیم. درواقع اومدیم دوبار یک تکه کد رو تکرار کردیم و این از نظر کدینگ وجه خوبی نداره. پس این راه حل ما نیست.
روش دوم اینه بیایم به بیس کلاسمون یعنی Vehicle یک متد تحت عنوان play_music اضافه کنیم.
اما در این صورت کلاس موتورسیکلت هم دارای رفتار پخش موزیک خواهد شد و این اشتباه است. اینجا است که Mixin خودش رو نشون میده. به کد زیر توجه کنید.
درواقع از کلاس PlayMusicMixin قرار نیست هیچ شیٔ ای ساخته شود و صرفا مهم این است که کارایی کلاسهای خاصی را افزایش شود.
پ.ن: اون کلمهی Mixin انتهای اسم کلاس هم قراردادیه، بهتره نوشته بشه ولی اجبار نداره.
کارایی
یا Functionality اون رو زیاد کنیم. اینجا میشه از Mixin استفاده کرد.مثلا کلاسهای زیر رو در نظر بگیرید.
class Vehicle:
pass
class Car(Vehicle):
pass
class Van(Vehicle):
pass
class Motorcycle(Vehicle):
pass
حالا نیاز داریم که متد play music رو هم به این کلاس ها اضافه کنیم، دوتا راه داریم. اولیش اینه که:
class Vehicle:
pass
class Car(Vehicle):
def play_music(self):
print("play_music")
class Van(Vehicle):
def play_music(self):
print("play_music")
class Motorcycle(Vehicle):
pass
اما یک ایرادی وجود داره. اینجا خودمون رو تکرار کردیم. درواقع اومدیم دوبار یک تکه کد رو تکرار کردیم و این از نظر کدینگ وجه خوبی نداره. پس این راه حل ما نیست.
روش دوم اینه بیایم به بیس کلاسمون یعنی Vehicle یک متد تحت عنوان play_music اضافه کنیم.
class Vehicle:
def play_music(self):
print("play_music")
class Car(Vehicle):
pass
class Van(Vehicle):
pass
class Motorcycle(Vehicle):
pass
اما در این صورت کلاس موتورسیکلت هم دارای رفتار پخش موزیک خواهد شد و این اشتباه است. اینجا است که Mixin خودش رو نشون میده. به کد زیر توجه کنید.
class Vehicle:
pass
class PlayMusicMixin:
def play_music(self):
print("play_music")
class Car(Vehicle, PlayMusicMixin):
pass
class Van(Vehicle, PlayMusicMixin):
pass
class Motorcycle(Vehicle):
pass
درواقع از کلاس PlayMusicMixin قرار نیست هیچ شیٔ ای ساخته شود و صرفا مهم این است که کارایی کلاسهای خاصی را افزایش شود.
پ.ن: اون کلمهی Mixin انتهای اسم کلاس هم قراردادیه، بهتره نوشته بشه ولی اجبار نداره.
Forwarded from Python BackendHub (Mani)
Forwarded from Python BackendHub (Mani)
چیزی که من متعجب شدم اکثرا میگن این <خیلی پیچیدست>. ولی حقیقتا اصلا پیچیده نیست. کامیونیتی پایتون خیلی گارد زیادی نسبت به تایپینگ داره که تو دراز مدت قطعا ضربه میخورین چون پایتون الان هر نسخه ریلیز میده ۸۰ درصدش تایپینگ improvement هست و شما اگه الان typing بلد نباشین عملا از خیلی از لایبری های جدید نمیتونید استفاده کنید.
تو این مثال حتی یک خط نشده. و شما اینکار رو برای آیدی ها انجام میدی. تو یک سرویس پرحجم که شما ۲۰۰ تیبل داری نهایتا میشه ۲۰۰ خط NewType. و باعث میشه signature همه کد های شما قابل خوانا باشه.
این tip به درد شما میخوره اگه کد میزنی. لزوما به بک اند هیچ ربطی نداره. الان شما یک تابع بنویسید که یک سریآیدی موزیک و آیدی یوزر بگیره و بعد بگه برای هر موزیک هر یوزر پیش بینی کنه از صفر تا صد چقدر ممکنه دوست داشته باشه
این ۳ مثال رو ببینید, مثال اول تایپینگ خوبی داره. مثال دوم تایپینگ داره ولی به درد بخور نیست خیلی. و مثال سوم تایپینگ نداره.
من میتونم بدونه اینکه کدو ببینم از فانکشن اولی استفاده کنم. فانکشن دومی معلوم نیست چی به چی لینک شده. پس باید حواسم باشه موقع استفاده ازش. و بعدا ریفکتورش هم کردم باید ۱۰۰درصد حواسم باشه signature اش تغییر نکنه. و فانکشن سوم که کلا فاجعست. اصلا maintainable نیست. قضاوت رو میذارم با خودتون.
@PyBackendHub
تو این مثال حتی یک خط نشده. و شما اینکار رو برای آیدی ها انجام میدی. تو یک سرویس پرحجم که شما ۲۰۰ تیبل داری نهایتا میشه ۲۰۰ خط NewType. و باعث میشه signature همه کد های شما قابل خوانا باشه.
این tip به درد شما میخوره اگه کد میزنی. لزوما به بک اند هیچ ربطی نداره. الان شما یک تابع بنویسید که یک سریآیدی موزیک و آیدی یوزر بگیره و بعد بگه برای هر موزیک هر یوزر پیش بینی کنه از صفر تا صد چقدر ممکنه دوست داشته باشه
این ۳ مثال رو ببینید, مثال اول تایپینگ خوبی داره. مثال دوم تایپینگ داره ولی به درد بخور نیست خیلی. و مثال سوم تایپینگ نداره.
# WITH GOOD TYPING
Percentage: TypeAlias = int # from 0 to 100.
def calculate_music_populatiry(person_ids: list[PersonId], music_ids: list[MusicId]) -> dict[PersonId, list[tuple[MusicId, Percentage]]
# WITH BAD TYPING
def calculate_music_populatiry(person_ids: list[UUID], music_ids: list[UUID]) -> dict[UUID, list[tuple[UUID, int]]
# WITHOUT TYPING
def calculate_music_populatiry(person_ids, music_ids)
من میتونم بدونه اینکه کدو ببینم از فانکشن اولی استفاده کنم. فانکشن دومی معلوم نیست چی به چی لینک شده. پس باید حواسم باشه موقع استفاده ازش. و بعدا ریفکتورش هم کردم باید ۱۰۰درصد حواسم باشه signature اش تغییر نکنه. و فانکشن سوم که کلا فاجعست. اصلا maintainable نیست. قضاوت رو میذارم با خودتون.
@PyBackendHub
Forwarded from Python BackendHub (Mani)
بخاطر یک ریلیز جدید setuptools که برکینگ چنج داشته، کل ابزارا مثل uv و poetry و pdm از کار افتادن از امروز
فیکسش اینجاست موقتا
https://github.com/pypa/setuptools/issues/4519#issuecomment-2254983472
@PyBackendHub
فیکسش اینجاست موقتا
https://github.com/pypa/setuptools/issues/4519#issuecomment-2254983472
@PyBackendHub
GitHub
[BUG] Many packages are no longer installable after test command is removed · Issue #4519 · pypa/setuptools
For those landing on this issue, please see: (thank you @delfick for summarizing this) This functionality has been deprecated for 5 years, there is a separate issue for discussing if there would ha...
Forwarded from Python BackendHub (Mani)
Python BackendHub
بخاطر یک ریلیز جدید setuptools که برکینگ چنج داشته، کل ابزارا مثل uv و poetry و pdm از کار افتادن از امروز فیکسش اینجاست موقتا https://github.com/pypa/setuptools/issues/4519#issuecomment-2254983472 @PyBackendHub
داستان چی بود؟
دیشب maintainer لایبری setuptools قبل اینکه بخوابه، یک ریلیز داد که بیلد قدیمی پایتون رو کلا دیگه ساپورت نمیکرد. ۵ ساله که deprecate شده بود و الان باید از PEP 571 استفاده کنید.
خیلی پکیج ها هنوز اینو اعمال نکرده بودن، درنتیجه pip install با نسخه اخر setuptool فیل میشد واسه اون پکیجا.
تو گیتهاب هم به شدت شلوغ شد! منتینر بعد ۱۰ ساعت بلند شد دید یک ایشو ساخته شده ۱۵۰ تام کامنت خورده 😁 در نتیجه ریلیز رو yank کرد.
نکته جالب اینجاست که اون warningای که میداد رو کنسول خیلی وقتا نمایش داده نمیشد، و برای همین خیلیا ندیده بودن اصلا.
خوده maintainer هم فرض کرده بود که مشکل زیادی پیش نمیاد.
خلاصه که درس شد:
۱. قبل از خواب ریلیز ندید 😂 اخرین روز هفته هم همینطور :))
۲. فرضیات همیشه با واقعیت فرق دارن، چیزایی که فکر میکنید قطعا کار میکنن درواقع ممکنه کار نکنند (مثل depreciation message). همیشه فرضیات رو زیرسوال ببرید و دوباره چک کنید وقتی دارین یک کار مهمی انجام میدین
@PyBackendHub
دیشب maintainer لایبری setuptools قبل اینکه بخوابه، یک ریلیز داد که بیلد قدیمی پایتون رو کلا دیگه ساپورت نمیکرد. ۵ ساله که deprecate شده بود و الان باید از PEP 571 استفاده کنید.
خیلی پکیج ها هنوز اینو اعمال نکرده بودن، درنتیجه pip install با نسخه اخر setuptool فیل میشد واسه اون پکیجا.
تو گیتهاب هم به شدت شلوغ شد! منتینر بعد ۱۰ ساعت بلند شد دید یک ایشو ساخته شده ۱۵۰ تام کامنت خورده 😁 در نتیجه ریلیز رو yank کرد.
نکته جالب اینجاست که اون warningای که میداد رو کنسول خیلی وقتا نمایش داده نمیشد، و برای همین خیلیا ندیده بودن اصلا.
خوده maintainer هم فرض کرده بود که مشکل زیادی پیش نمیاد.
خلاصه که درس شد:
۱. قبل از خواب ریلیز ندید 😂 اخرین روز هفته هم همینطور :))
۲. فرضیات همیشه با واقعیت فرق دارن، چیزایی که فکر میکنید قطعا کار میکنن درواقع ممکنه کار نکنند (مثل depreciation message). همیشه فرضیات رو زیرسوال ببرید و دوباره چک کنید وقتی دارین یک کار مهمی انجام میدین
@PyBackendHub
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
GIL Become Optional in Python 3.13
یکی از تغییرات خفن 3.13 نسبت به 3.12 اینه که میتونه GIL رو آپشنال داشته باشی و غیر فعالش کنی
هنوز توی بیلد های موجود تو سایت پایتون فعال نشده ولی توی رلیز نهایی چنین چیزی قابل استفاده هستش
اجرای برنامه قطعا سریعتر میشه اما احتمال ۹۹ درصد برای پروژه های قبلیتون غیر فعال کنید احتمالا ی عالمه باگ بخورید 😁
https://geekpython.in/gil-become-optional-in-python
✅ @SEYED_BAX
یکی از تغییرات خفن 3.13 نسبت به 3.12 اینه که میتونه GIL رو آپشنال داشته باشی و غیر فعالش کنی
هنوز توی بیلد های موجود تو سایت پایتون فعال نشده ولی توی رلیز نهایی چنین چیزی قابل استفاده هستش
اجرای برنامه قطعا سریعتر میشه اما احتمال ۹۹ درصد برای پروژه های قبلیتون غیر فعال کنید احتمالا ی عالمه باگ بخورید 😁
https://geekpython.in/gil-become-optional-in-python
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Python BackendHub (Mani)
آیوکلاک (AioClock) یک فریم ورک برای scheduling و یا تسک منیجمنت هست و هر چیزی که هر فریم ورکی نیاز داره رو داخلش داره, مثل دپندسی اینجکشن و startup/stop ایونت, ساپورت از ماژولار کد نوشتن و ...
امشب وقت گذاشتم و داکیونتشو خیلی بهتر کردم که کاملا متوجه شید فریم ورک چطوری کار میکنه. تو عکس واضح نیست کامل تصیه میکنم سری به داکیومنت بزنید.
داکیومنت
گیتهاب
@PyBackendHub
امشب وقت گذاشتم و داکیونتشو خیلی بهتر کردم که کاملا متوجه شید فریم ورک چطوری کار میکنه. تو عکس واضح نیست کامل تصیه میکنم سری به داکیومنت بزنید.
داکیومنت
گیتهاب
@PyBackendHub
Forwarded from Sadra Codes
🚩 پایتون ۳.۱۳؛ فیچرهای جدید و دپریکیشنها!
🔥 گیل (GIL) آپشنال: امکان بیلد گرفتن از CPython و غیرفعال کردن GIL. (در حالت عادی شما از GIL استفاده میکنید)
🔥 کامپایلر JIT: قراره در این پچ جدید، از یک کامپایلر just in time رونمایی شه که در یک سری از سناریوهای خاص، سرعت اجرای کدتون رو افزایش میده. این رو موقع بیلد گرفتن دستی از CPython میشه تنظیم کرد و بصورت پیشفرض غيرفعال هست.
🔥 تایپ هینت
🔥 ساپورت از سیستمعامل iOS: یک رلیز قابل نصب روی iOS قراره در این پچ قرار داده بشه. هنوز خبری از رلیز اندروید نیست ولی گویا دارن روش کار میکنن. (چیزی که بعنوان پایتون روی دیوایسهای اندرویدتون نصب دارید، رلیز لینوکس پایتون هست.)
🔥 بهبود Interaction: ارورها و تریسبکها دقیقتر و هوشمندتر شدن. همچنین ارورها بصورت رنگی نمایش داده میشن.
🔥 بهبود REPL: کامندهای
و کلی فیچر و امکانات جدید که توی ۵ دقیقه در مقاله زیر توضیح دادم به همراه مثالهای ساده و قابل فهم:
🔗 https://blog.imsadra.me/python-313-new-features-deprecations
For more 👉 @lnxpylnxpy
🔥 گیل (GIL) آپشنال: امکان بیلد گرفتن از CPython و غیرفعال کردن GIL. (در حالت عادی شما از GIL استفاده میکنید)
🔥 کامپایلر JIT: قراره در این پچ جدید، از یک کامپایلر just in time رونمایی شه که در یک سری از سناریوهای خاص، سرعت اجرای کدتون رو افزایش میده. این رو موقع بیلد گرفتن دستی از CPython میشه تنظیم کرد و بصورت پیشفرض غيرفعال هست.
🔥 تایپ هینت
IsType
و ReadOnly
: دوتا تایپ جدید به typing
اضافه شده. در مقاله مثال زدم.🔥 ساپورت از سیستمعامل iOS: یک رلیز قابل نصب روی iOS قراره در این پچ قرار داده بشه. هنوز خبری از رلیز اندروید نیست ولی گویا دارن روش کار میکنن. (چیزی که بعنوان پایتون روی دیوایسهای اندرویدتون نصب دارید، رلیز لینوکس پایتون هست.)
🔥 بهبود Interaction: ارورها و تریسبکها دقیقتر و هوشمندتر شدن. همچنین ارورها بصورت رنگی نمایش داده میشن.
🔥 بهبود REPL: کامندهای
exit
، help
و quit
تغییر کردن.و کلی فیچر و امکانات جدید که توی ۵ دقیقه در مقاله زیر توضیح دادم به همراه مثالهای ساده و قابل فهم:
🔗 https://blog.imsadra.me/python-313-new-features-deprecations
For more 👉 @lnxpylnxpy
👍2