У меня есть две функции со 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 ... ernal-code
Повторное использование набора аргументов функции Python с вариациями во внутреннем коде ⇐ Python
Программы на Python
1768597689
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-argument-set-reuse-with-variations-in-internal-code[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия