Size: a a a

2020 March 10

S

Stan in PiterPy Meetup
Например, семантически это тоже некорректно - потому что kwargs = keyword arguments, и по-хорошему, туда должно попадать только то, что валидно как keyword arguments. Но это обратно-несовместимое изменение, которое сломало бы кучу кода, который сваливает в kwargs всякий шлак, который правильнее было бы класть в extra_data.

-> % python3.7
Python 3.7.5 (default, Nov  7 2019, 10:50:52)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(**kwargs):
...   print(kwargs)
...
>>> f(**{"a-b": 1})
{'a-b': 1}
>>>
источник

S

Stan in PiterPy Meetup
Боброний
def f(): ...
f.__code__ = f.__code__.replace(
   co_argcount=2,
   co_varnames=()
)


Traceback (most recent call last):
 File "/Users/arseny.boikov/Library/Preferences/PyCharm2019.3/scratches/scratch_15.py", line 4, in <module>
   f.__code__ = f.__code__.replace(
ValueError: code: varnames is too small
Значит, проверки недостаточно полные, но проблема в их отсутствии, а не в inspect. Это ведь палка о двух концах, тут нужно или требования к inspect ослабить, или проверки добавить, и я о том, что гораздо правильнее второе, чем первое.
источник

Б

Боброний in PiterPy Meetup
Боброний
А я стою на том, что в таком случае это должно быть зашито в реализации функции при её создании, а не только в inspect
^
источник

YV

Yuliya Volkova in PiterPy Meetup
Боброний
Не очень понял, над чем ты хочешь подумать, но вот, держи:

def f():
   print(sum(locals().values()))


f.__code__ = f.__code__.replace(
   co_nlocals=2,
   co_argcount=2,
   co_varnames=('@', '&',)
)

f(**{'@': 1, '&': 2})  # 3
а какая у тебя версия python? этот код просто ошибку в 3.7 дает ) просто интересно стало, хотела поиграться
источник

Б

Боброний in PiterPy Meetup
Yuliya Volkova
а какая у тебя версия python? этот код просто ошибку в 3.7 дает ) просто интересно стало, хотела поиграться
3.8, там добавили метод replace
источник

YV

Yuliya Volkova in PiterPy Meetup
Боброний
3.8, там добавили метод replace
а теперь понятно, спс
источник

Б

Боброний in PiterPy Meetup
Yuliya Volkova
а теперь понятно, спс
Держи заплатку

CODE_ARGS: Tuple[str, ...] = (
   'co_argcount',  # type: ignore
   *(('co_posonlyargcount',) if PY38 else ()),
   'co_kwonlyargcount',
   'co_nlocals',
   'co_stacksize',
   'co_flags',
   'co_code',
   'co_consts',
   'co_names',
   'co_varnames',
   'co_filename',
   'co_name',
   'co_firstlineno',
   'co_lnotab',
)


def replace_code(code: CodeType, **update: Any) -> CodeType:
   if PY38:
       return code.replace(**update)  # type: ignore
   return CodeType(*[update.get(arg, getattr(code, arg)) for arg in CODE_ARGS])
источник

YV

Yuliya Volkova in PiterPy Meetup
Боброний
Держи заплатку

CODE_ARGS: Tuple[str, ...] = (
   'co_argcount',  # type: ignore
   *(('co_posonlyargcount',) if PY38 else ()),
   'co_kwonlyargcount',
   'co_nlocals',
   'co_stacksize',
   'co_flags',
   'co_code',
   'co_consts',
   'co_names',
   'co_varnames',
   'co_filename',
   'co_name',
   'co_firstlineno',
   'co_lnotab',
)


def replace_code(code: CodeType, **update: Any) -> CodeType:
   if PY38:
       return code.replace(**update)  # type: ignore
   return CodeType(*[update.get(arg, getattr(code, arg)) for arg in CODE_ARGS])
благодарю
источник

Б

Боброний in PiterPy Meetup
Ток там импорты надо добавить)
источник

YV

Yuliya Volkova in PiterPy Meetup
Боброний
Давайте я ещё раз изложу свою позицию:

Я создал код функции с таким параметром, оно не сломалось
Я передал этот параметр в функцию, оно не сломалось
Я вызвал help(), оно не сломалось
И когда я вызываю inspect.signature, оно не должно ломаться
ощущение, что просто забыли такой же isidentifier при реплейсе для переменных )
источник

AZ

Andrey Zakharevich in PiterPy Meetup
ох, вспомнилось, как три с половиной года мы с @delimitry пытались обманывать inspect, даже мини-доклад получился тогда
источник

p

pragus in PiterPy Meetup
источник

DB

Dima Boger in PiterPy Meetup
Завтра завтрак, заводите будильники!
источник

N

Nikolay in PiterPy Meetup
основная проблема trio в том, что она мертвая
источник

N

Nikolay in PiterPy Meetup
а так - отличная либа
источник

Б

Боброний in PiterPy Meetup
Dima Boger
Завтра завтрак, заводите будильники!
источник

Б

Боброний in PiterPy Meetup
Кстати, кто будет в Мск и сможет передать мне футболки с хактоберфеста?
источник

MV

Mikhail Veselov in PiterPy Meetup
ВЛАД
В трудовой так прям и пишут должность: джун???
У меня там стоит «студент» ))
источник

DB

Dima Boger in PiterPy Meetup
Боброний
Кстати, кто будет в Мск и сможет передать мне футболки с хактоберфеста?
Спишись с @ave2me
источник

EM

Egor Molodik in PiterPy Meetup
Боброний
Кстати, кто будет в Мск и сможет передать мне футболки с хактоберфеста?
Я буду в конце марта, если не пересечемся, отдам @teners и вы там уже тогда встретитесь
источник