Wenn Sie Funktionen mit unterschiedlicher Anzahl von Argumenten als Argumente derselben Funktion übergeben möchten, können Sie Lambda verwenden.
Angenommen, Sie haben die folgenden Quellen:
#Argumentlose Funktion
def print_type1():
print('print_Verarbeitungstyp1 ...')
return '[print_type1]'
def print_com(func):
print('=== print_Verarbeitungskom ...===')
rtn = func() #Bei der Verwendung gibt es kein Argument in der zu übergebenden Funktion
print('{}Wurde verarbeitet.'.format(rtn))
print()
print_com(print_type1) #Funktioniert gut
Möglicherweise möchten Sie print_com später eine Funktion mit einem Argument zuweisen. Beispiel:
#Funktion mit Argument
def print_type2(day):
print('print_Verarbeitungstyp2 ...')
print('day: {}'.format(str(day)))
return "print_type2"
Die folgende Zuweisungsmethode schlägt fehl.
print_com(print_type2) # →[missing 1 required positional argument: 'day']Ich bekomme den Fehler"
print_com(print_type2(15)) # →['str' object is not callable]Ich bekomme den Fehler
Wenn Sie es also in eine Funktion ohne Argumente mit Lambda ändern und es dann übergeben, funktioniert es.
day = 15
print_com(lambda: print_type2(day))
Alternativ können Sie einen Teil der Funktionswerkzeuge verwenden.
from functools import partial
day = 15
print_com(partial(print_type2, day=day))
Wenn Sie es selbst lösen möchten, können Sie dies tun, indem Sie die Funktion innerhalb der Funktion definieren.
#Interne Funktion
def print_type3(day):
def print_type3_inner():
print('print_Verarbeitungstyp3 ...')
print('day: {}'.format(str(day)))
return "print_type3"
return print_type3_inner
day = 15
print_com(print_type3(day))
lambda01.py
from functools import partial
#Argumentlose Funktion
def print_type1():
print('print_Verarbeitungstyp1 ...')
return '[print_type1]'
def print_com(func):
print('=== print_Verarbeitungskom ...===')
rtn = func() #Bei der Verwendung gibt es kein Argument in der zu übergebenden Funktion
print('{}Wurde verarbeitet.'.format(rtn))
print()
#Funktion mit Argument
def print_type2(day):
print('print_Verarbeitungstyp2 ...')
print('day: {}'.format(str(day)))
return "print_type2"
#Interne Funktion
def print_type3(day):
def print_type3_inner():
print('print_Verarbeitungstyp3 ...')
print('day: {}'.format(str(day)))
return "print_type3"
return print_type3_inner
print_com(print_type1) #Funktioniert gut
#↓ Eine solche Zuweisungsmethode schlägt fehl
# print_com(print_type2) # →[missing 1 required positional argument: 'day']Ich bekomme den Fehler
# print_com(print_type2(15)) # →['str' object is not callable]Ich bekomme den Fehler
#Wenn Sie es in eine Funktion ohne Argumente mit Lambda ändern und es dann übergeben, funktioniert es.
day = 15
print_com(lambda: print_type2(day))
#Oder
day += 1
print_com(partial(print_type2, day=day))
day += 1
print_com(print_type3(day))
Ausführungsergebnis === print_com wird verarbeitet ... === Verarbeitung print_type1 ... Verarbeitet [print_type1].
=== print_com wird verarbeitet ... === Verarbeitung von print_type2 ... day: 15 Verarbeiteter print_type2.
=== print_com wird verarbeitet ... === Verarbeitung von print_type2 ... day: 16 Verarbeiteter print_type2.
=== print_com wird verarbeitet ... === Verarbeitung print_type3 ... day: 17 Verarbeiteter print_type3.
Recommended Posts