Я хотел бы использовать природу функций первого класса для повторного использования набора аргументов, а затем использовать имя вызываемой функции для выполнения некоторого условного ветвления внутри общего кода.
Какой наиболее питонический способ добиться этого?
Я пробовал несколько различных задокументированных вариантов получения имени текущей функции изнутри функции, но ни один из них не получит имя вызываемой функции, т. е. 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
Мобильная версия