Wiederverwendung von Python-Funktionssignaturen mit VariationenPython

Python-Programme
Anonymous
 Wiederverwendung von Python-Funktionssignaturen mit Variationen

Post by Anonymous »

Ich habe zwei Funktionen mit 100 % identischen (und langen) Signaturen, aber geringfügigen Abweichungen im internen Code.
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()
Ist es besser, ein Argument hinzuzufügen, das den fest codierten Funktionsnamen angibt? Der folgende Code liefert die gewünschte Ausgabe – gibt es einen besseren Weg?

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()
was die gewünschte Ausgabe liefert:

Code: Select all

calling f1:
funcName:f1  a:1  b:2  c:5
calling f2:
funcName:f2  a:None  b:None  c:3

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post