Ich möchte die erstklassige Objektnatur von Funktionen nutzen, um den Argumentsatz wiederzuverwenden, und dann den Namen der aufgerufenen Funktion verwenden, um eine bedingte Verzweigung innerhalb des allgemeinen Codes durchzuführen.
Was ist der pythonischste Weg, dies zu erreichen?
Ich habe habe ein paar verschiedene dokumentierte Optionen ausprobiert, um den Namen der aktuellen Funktion innerhalb einer Funktion abzurufen, aber keine davon erhält den Namen der aufgerufenen Funktion, d. h. f1 vs. f2 in diesem Beispiel:
Code: Select all
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()
Code: Select all
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()
Code: Select all
calling f1:
funcName:f1 a:1 b:2 c:5
calling f2:
funcName:f2 a:None b:None c:3
Mobile version