Ich möchte die erstklassige Objektnatur von Funktionen nutzen, um die Signatur wiederzuverwenden, und dann den Namen der aufgerufenen Funktion verwenden, um eine bedingte Verzweigung innerhalb des gemeinsamen Codes durchzuführen.
Was ist der pythonischste Weg, dies zu erreichen?
Ich habe einige ausprobiert Verschiedene dokumentierte Optionen, um den Namen der aktuellen Funktion innerhalb einer Funktion abzurufen, aber keine davon erhält den aufgerufenen Funktionsnamen, 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