Lesen Sie einfach die Python Docs insbesondere this Seite, in Bezug auf attrgetter und itemgetter.Was ist die Verwendung von einem Def in einer Funktion?
Ich habe Mühe, die Verwendung der Verwendung von def
und return
in den Codebeispielen zu verstehen. Nicht die Verwendung dieser Funktionen.
Es scheint wie ein lamdba
, aber ich weiß nicht, wie man es interpretiert.
EDIT
Ich denke, es angeklickt einfach. Der attrgetter ist wie ein Konstruktor für die Funktion resolve_attr. Das war ein wenig verwirrend, da ich normalerweise erwarten würde, dass der Code für ein def zwischen dem def
und dem return
liegt. Der Code auf der Rückkehr ist wie ein Lambda. Um der Verwirrung hinzuzufügen, ist das Argument ojb
das an das zurückgegebene Objekt übergebene Argument. Arhhhhh .....
Was muss ich dafür wissen, um Sinn zu machen?
Dies ist der Code Beispiel beziehe ich mich auf:
def attrgetter(*items):
if any(not isinstance(item, str) for item in items):
raise TypeError('attribute name must be a string')
if len(items) == 1:
attr = items[0]
def g(obj): #What is this
return resolve_attr(obj, attr)
else:
def g(obj):#And this?
return tuple(resolve_attr(obj, attr) for attr in items)
return g
def resolve_attr(obj, attr):
for name in attr.split("."):
obj = getattr(obj, name)
return obj
Suchen Sie nach "Funktionen höherer Ordnung". Dies sind Funktionen, die entweder Funktionen als Argumente und/oder Return-Funktionen übernehmen. Dies ist ein Beispiel für eine Funktionsfabrik, ein allgemeines Muster. –
Siehe [hier] (https://en.m.wikipedia.org/wiki/Higher-order_function). Die andere Idee, die Sie beachten sollten, ist, dass Python [First Class-Funktionen] (https://en.m.wikipedia.org/wiki/First-class_function) hat. Diese Ideen sind dem [funktionalen Programmierparadigma] (https://en.m.wikipedia.org/wiki/Functional_programming) gemeinsam –
yeah ta, lese gerade –