Как ввести функцию с Callible, не теряя аргумента ключевого слова?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как ввести функцию с Callible, не теряя аргумента ключевого слова?

Сообщение Anonymous »

У меня много функций, и я хочу добавить опцию stringify в каждую функцию: если stringify = true , функции возвращает str (result) вместо результата .
вместо добавления необязательного аргумента и рефакторирования каждой функции (которая заставит меня дублировать логику Stringify во всех моих функциях) Я использовал декоратор: < /p>

Код: Выделить всё

from typing import Callable, Union

def WithStringifyOption(func: Callable[[int], int]) -> Callable[[int, bool], Union[int, str]]:
def wrapper(value: int, stringify: bool = False) -> Union[int, str]:
result = func(value)
return str(result) if stringify else result
return wrapper

# my old function
def func0(value: int) -> int:
return value * 2

# How it looks now
@WithStringifyOption
def func1(value: int) -> int:
return value * 2

func0(value=2)
func1(value=3, stringify=True)
Код работает, но, делая это, я получаю ошибку печати (и я теряю автозаполнение для аргументов ключевых слов): неожиданный аргумент ключевого слова «значение» для «func1» mypy (ошибка) и неожиданный аргумент ключевого слова «stringify» для «func1» mypy (error)
Согласно документации Typing о typing.callable : br />
Нет никакого синтаксиса, чтобы указать необязательные или ключевые аргументы; Такие типы функций редко используются в качестве типов обратного вызова.

Так как я могу исправить эту ошибку печати? Примечание: это упрощенный пример моего реального проекта; Я хочу добавить гораздо более сложную логику на каждую из моих функций, поэтому рефакторирование всех моих функций, добавив и дублировать эту сложную логику не является вариантом. Я также не хочу добавлять тип: игнорировать везде в проекте, и я не хочу заменять все аргументы ключевых слов по позиционным аргументам везде в проекте

Подробнее здесь: https://stackoverflow.com/questions/734 ... d-argument
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»