Programming ∀
الذهاب إلى القناة على Telegram
Ushbu kanalda dasturlashga aloqador turli expriementlarim, g'oyalarim, hulosalarimni ulashaman.
إظهار المزيد1 354
المشتركون
لا توجد بيانات24 ساعات
لا توجد بيانات7 أيام
لا توجد بيانات30 أيام
أرشيف المشاركات
1 354
piton syntaxni bilmimanku, lekin enumlarni shunaqa holatga keltirishsa ham ajoyib bo'lardi.
class Option[T](Enum):
Some(t:T)
None1 354
Repost from Находки в опенсорсе
Enum и сложность
Enum – один из самых сложных модулей в питоне, я не шучу. Количество нюансов – просто огромное. Так как я последние несколько дней занимаюсь улучшением поддержки
Enum в mypy, то я решил рассказать про интересные штуки из модуля enum, которые вы скорее всего могли пропустить.
Доки: https://docs.python.org/3/library/enum.html Их все равно никто не читает.
global_enum
Чудовищная фича. Просто ужас. Засовывает все значения Enum в sys.modules[module].__dict__:
>>> from enum import Enum, global_enum
>>> @global_enum
... class Pets(Enum):
... CAT = 1
... DOG = 2
>>> print(CAT)
CAT
Да, создает новые глобальные константы. Нет, mypy такое пока не поддерживает.
Для чего нужно? Синтаксический сахар для обратной совместимости. Когда были раньше CAT и DOG как константы в модуле, а потом появляется Enum. Но все равно не советую.
_simple_enum
>>> from enum import IntEnum, _simple_enum
>>>
>>> @_simple_enum(IntEnum)
... class Pets:
... CAT = 1
... DOG = 2
...
>>> print(Pets.CAT)
1
Специальный внутренний хелпер для более быстрого создания Enum классов. Используется в основном внутри CPython для ускорения импорта библиотек. Не поддерживается mypy.
@unique
Декоратор, который позволит найди дубликаты по значениям в ваших Enum типах и вызвать ошибку. Обязателен для использования. Иначе, где-то можно сделать опечатку:
@unique # <- will find the problem
class Pets(Enum):
CAT = 1
DOG = 1 # should be 2
и искать её всю жизнь.
Flag и FlagBoundary
Зачем нужны Flag?
from enum import IntFlag, FlagBoundary
class Permission(IntFlag, boundary=FlagBoundary.STRICT):
READ = 0
WRITE = 1
Для сочетания друг с другом: Permission.WRITE | Permission.READ. Есть 4 разных поведения для таких случаев: https://docs.python.org/3/library/enum.html#enum.FlagBoundary
Советую всегда использовать FlagBoundary.STRICT, если сомневаетесь.
Черная дыра для багов и изменений от версии к версии.
member и nonmember
В Enum есть довольно сложная логика, какие объекты считать за member (часть enum), какие за nonmember (просто какие-то объекты).
Кратко:
- Имя не приватное, имя не __dunder__ и имя не _sunder_
- Имя не в _ignore_
- Не вложенный класс и не метод
- Не инстанс nonmember
Пример:
from enum import Enum, member, nonmember
class Example(Enum):
_ignore_ = ['a'] # nonmember
a = 1 # nonmember
b = 2 # member
__c__ = 3 # nonmember
_d_ = 4 # nonmember
e = nonmember(5) # nonmember
__f = 6 # nonmember
def g(self): ... # nonmember
@member
def h(self): ... # member
Думаю, что всем спалось спокойнее без такого знания. Старайтесь делать такие енамы, чтобы не приходилось использовать темную магию. И старайтесь не пользоваться member и nonmember.
Enum в .pyi файлах
Недавно Typing Spec для енамов был изменен. https://typing.readthedocs.io/en/latest/spec/enums.html
Раньше в .pyi файлах мы аннотировали енамы так:
# mymodule.pyi
class Pets(Enum):
CAT: int
DOG: int
Однако, теперь такой способ будет создавать два nonmember'а. Правильный способ:
# mymodule.pyi
class Pets(Enum):
CAT = 1
DOG = 2
Почему? Потому что значения полей – крайне важно для типа Enum.
Для старого кода mypy выкидывает ошибку.
Обсуждение: а вам нравились Enum в Python? А сейчас?
| Поддержать | YouTube | GitHub | Чат |1 354
Cabalchalik paket manager yo'qda, nima bo'layotganini qisqa va lo'nda aytib turadi.
1 354
Breaking down the income streams and totals from my third year as a full-time independent open source maintainer.
https://www.joshuakgoldberg.com/blog/2024-finances-in-review/
1 354
Effect-TS scaladagi ZIO dan copy qilingan.
Huddi nestjs java springdan olgani kabi.
Ammo nestchilardan farqli effectchilar ancha g’ayratli. Ekotizim juda ham ko’p narsalar bilan boyitilyabti. Lekin effect-ts yoki nestjs ham o’z kumirlarining natijalariga yaqinlashib ham ololmasliklariga katta sabab bu manashu platform issuelar.
Effect-ts ni orada kuzatib turaman juda progressive rivojlanyabti. Ular ham uje virtual threadlardan tortib OTeLgacha implement qilib tashlashgan. Shu bilan ancha stabillashyabti ham, lekin ular ham barcha muammolarni ham etib berisholmaydi agar fundament zaif bo’lsa. TC39 ham yebqo’yganlarini tuzata olmaydi.
Agar javaga qaradak so’ngi versiyalari anchagina jiddiy va foydali o’zgarishlar bor.
Agar jsni qarasak tayinli poposallar yo’q deyarli. Gopherlardan =? olamiz deydimi, #private qilamiz deydimi hullas shu axvol.
Jsni hamma ishlatadi va hamma joyga tiqmoqchi bo’lishadi, lekin jsni o’zini bir joyiga tiqishyabti🥹
Bularni nega esladim ?
Bitta changesni ko’rib qoldim. Birgina promisega o’ralgan narsa deb hamma joyni async/await qilib chiqishgan🥲
1 354
TC39 kommitetini ko'tiga tepish kerak.
https://github.com/promises-aplus/promises-spec/issues/94
Bundan habari yo'qlarga qisqacha tarix darsi:
1. Brian McKenna Promiselar uchun error pathni alohida qilish kerak deydi. Bunga asos category theory va Haskelldagi tajriba deydi.
2. Uni eshitishmaydi, asossiz gapirayapsan deydi kommitet o'zi asossiz gapirib turib (McKenna ni 2 ta compelling asosi bor edi).
3. Yillar o'tadi va baribir, aylanib ham o'rgilib ham McKenna ni gapi to'g'ri bo'lib chiqadi va vanihoyat
.catch qo'shishadi.
Lekin o'z xatosidan o'rganmagan kommitet oxiri borib async/await qo'shadi (function coloring problem ni yaratib). O'zi 1 marta bulg'ashdi tilni, qaytib to'g'irlashdi. Keyin yana bulg'ashdi. Hozir esa shuni Effect-TS bilan yamab ishlatishayapti odamlar.1 354
Brian McKenna kabi programmerlar qadriga yetmagan jschilar !
https://github.com/tlrobinson/v8-typed-array
1 354
Deepseek haqida fikrlarizzi kutvommiz bossDeepseek ishlatib bo'lsa ham Haskell va Alloy6 o'rganing!
1 354
Eng qizg’i buni UMLga ham o’girsa bo’lar ekan. Diagram ham bor ammo UML asosan modelni describe qiladi holos. Alloy siz qilgan model logikasi aslida tog’rimi degan savolga ham javob beradi.
Juda sodda misol
Bizda A user mavjud va uning balansida N summa bor. Endi B userga M summa yuborganida userning balansi negative number bo’lmasligi kerak. Humo/Uzcard kabi processing tizimlari tranzaksiyalarga komissiya yechadi. Endi shu tranzaksiya+komissiya qilib xisoblasa manashu nuans chiqmasligiga bitta masala lekin katta tizimlarda bunaqangi nuanslar qalashib ketgan va hammasini ham bilmasligimiz tabiy holat. Huddi shunaqa nuanslarni alloy6 kabi toollar bilan topsak bo’ladi.
1 354
Hullas alloy6 bilan expirementchalarni boshladim. Bu temani yaxshilab o'rganib turli domainlardagi logikalarga spec yozib ko'rmoqchiman. Spec asosida logika qanchalik tog'ri ekanini tekshirish mumkin va shu orqali biz source of truth ga yaqinlashamiz. Shu orqali turli caselarni miyyamizda o'ylab topavermasdan abstractroq uslubda hamma narsaga mos keladigan narsani qurishga va uni tog'ri formalizatsiya qilishga o'rgansak bo'ladi.
Birinchi sezgan narsam Alloy6 juda ham oson. Ammo biror narsani shunda yozish ancha qiyin. Buni yagona yechimi esa juda ko'plab practice qilish code yozaverish kerak.
https://gist.github.com/lambdajon/aed6c7112fb227e72d3cc9784de2533f
1 354
Logic vprede. Bitta zo’r narsa qilgandim kechga share qilaman.
Bu narsani anchadan buyon sinashni reja qilardim vaqt bo’lmayotudi ohiri yetib keldim.
@orzklvb boshlagan SARK uchun juda zor narsa
1 354
Ko'plab seniorlar roleni yaxshi o'ynaydilar.
Managerlar esa oscar olmagan artistlar.
