У меня есть две функции со 100% идентичными (и длинными) сигнатурами, но с небольшими различиями во внутреннем коде.
Я хотел бы использовать природу функций первого класса для повторного использования сигнатуры, а затем использовать имя вызываемой функции для выполнения некоторого условного ветвления внутри общего кода.
Какой наиболее питонический способ добиться этого?
Я пробовал несколько разных документированные варианты получения имени текущей функции изнутри функции, но ни один из них не получит имя вызываемой функции, т. е. f1 против f2 в этом примере:
import inspect
def commonFuncCore(a=None,b=None,c=3):
# print(f'funcName:{commonFuncCore.__name__} a:{a} b:{b} c:{c}')
# print(f'funcName:{commonFuncCore.__qualname__} a:{a} b:{b} c:{c}')
print(f'funcName:{inspect.currentframe().f_code.co_name} a:{a} b:{b} c:{c}')
f1=commonFuncCore
f2=commonFuncCore
print('calling f1:')
f1()
print('calling f2:')
f2()
Лучше ли добавить аргумент, указывающий жестко закодированное имя функции? Следующий код дает желаемый результат. Есть ли лучший способ?
def commonFuncCore(a=None,b=None,c=3,funcName='COMMON'):
# print(f'funcName:{commonFuncCore.__name__} a:{a} b:{b} c:{c}')
# print(f'funcName:{commonFuncCore.__qualname__} a:{a} b:{b} c:{c}')
# print(f'funcName:{inspect.currentframe().f_code.co_name} a:{a} b:{b} c:{c}')
print(f'funcName:{funcName} a:{a} b:{b} c:{c}')
# f1=commonFuncCore
# f2=commonFuncCore
def f1(*args,**kwargs):
commonFuncCore(*args,**kwargs,funcName='f1')
def f2(*args,**kwargs):
commonFuncCore(*args,**kwargs,funcName='f2')
print('calling f1:')
f1(a=1,b=2,c=5)
print('calling f2:')
f2()
что дает желаемый результат:
calling f1:
funcName:f1 a:1 b:2 c:5
calling f2:
funcName:f2 a:None b:None c:3
Подробнее здесь: https://stackoverflow.com/questions/798 ... variations
Повторное использование подписи функции Python с вариациями ⇐ Python
Программы на Python
-
Anonymous
1768446876
Anonymous
У меня есть две функции со 100% идентичными (и длинными) сигнатурами, но с небольшими различиями во внутреннем коде.
Я хотел бы использовать природу функций первого класса для повторного использования сигнатуры, а затем использовать имя вызываемой функции для выполнения некоторого условного ветвления внутри общего кода.
Какой наиболее питонический способ добиться этого?
Я пробовал несколько разных документированные варианты получения имени текущей функции изнутри функции, но ни один из них не получит имя вызываемой функции, т. е. f1 против f2 в этом примере:
import inspect
def commonFuncCore(a=None,b=None,c=3):
# print(f'funcName:{commonFuncCore.__name__} a:{a} b:{b} c:{c}')
# print(f'funcName:{commonFuncCore.__qualname__} a:{a} b:{b} c:{c}')
print(f'funcName:{inspect.currentframe().f_code.co_name} a:{a} b:{b} c:{c}')
f1=commonFuncCore
f2=commonFuncCore
print('calling f1:')
f1()
print('calling f2:')
f2()
Лучше ли добавить аргумент, указывающий жестко закодированное имя функции? Следующий код дает желаемый результат. Есть ли лучший способ?
def commonFuncCore(a=None,b=None,c=3,funcName='COMMON'):
# print(f'funcName:{commonFuncCore.__name__} a:{a} b:{b} c:{c}')
# print(f'funcName:{commonFuncCore.__qualname__} a:{a} b:{b} c:{c}')
# print(f'funcName:{inspect.currentframe().f_code.co_name} a:{a} b:{b} c:{c}')
print(f'funcName:{funcName} a:{a} b:{b} c:{c}')
# f1=commonFuncCore
# f2=commonFuncCore
def f1(*args,**kwargs):
commonFuncCore(*args,**kwargs,funcName='f1')
def f2(*args,**kwargs):
commonFuncCore(*args,**kwargs,funcName='f2')
print('calling f1:')
f1(a=1,b=2,c=5)
print('calling f2:')
f2()
что дает желаемый результат:
calling f1:
funcName:f1 a:1 b:2 c:5
calling f2:
funcName:f2 a:None b:None c:3
Подробнее здесь: [url]https://stackoverflow.com/questions/79868186/python-function-signature-reuse-with-variations[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия