annotate

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Außerdem sind Generatoren lazy. Wie Python-Programmierer. Also quasi ein "perfect match".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@BlackVivi: Wie bitte? Intuitiv logischer? Schneller von der Hand geschrieben? Also ich finde die Generatorlösung sieht komplizierter aus als das hier und hat auch mehr Code:

Code: Alles auswählen

def type_annotate(obj):
    if isinstance(obj, list):
        return map(type_annotate, obj)
    else:
        return (type(obj), obj)
Ausserdem hat so eine rekursiv lazy Variante dann auch Probleme beim Anzeigen, das erfordert dann nämlich auch wieder ein relativ komplizierten Code statt eines einfachen ``print``. Immer dran denken wie die Ausgabe aussehen soll.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

BlackJack hat geschrieben:@BlackVivi: Wie bitte? Intuitiv logischer?
Für _mich_ schon. Über viele Sachen lassen sich streiten, aber der Generator für diese Funktion ist für mich mal leichter... Und für andere bestimmt auch.
BlackJack hat geschrieben:Ausserdem hat so eine rekursiv lazy Variante dann auch Probleme beim Anzeigen, das erfordert dann nämlich auch wieder ein relativ komplizierten Code statt eines einfachen ``print``. Immer dran denken wie die Ausgabe aussehen soll.
Das ist wiederum ein Argument... Wobei man allgemein für einen sinnvollen Einsatz für die Datenstruktur sich etwas ausdenken muss, finde ich.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Mehrere Dinge:

1. So eine typeannotate Funktion ist höchstwahrscheinlich nicht für den Gebrauch innerhalb von Programmen gedacht, sondern höchstens für den Programmierer. Abgesehen davon daß die Aufgabe sowieso eine Hausaufgabe war.

Aus dieser Sicht disqualifiziert sich ein Generator für so ein Problem. Dennoch ist es als Generator ebenfalls leicht zu schreiben und es kam mir intuitiv in den Sinn. Zumal Generatoren zu viel mehr nutzbar sind als "nur" Iterables zu bilden.

2. Der Grund, warum ich es schlussendlich als Generator hingeschrieben habe, war, daß man so die Grundstruktur, die Madpuella ja richtig erkannt hat, mehr oder weniger "rein" dargestellt bekommt, und zugleich der Teil "schreibe das Ganze nun als Funktion mit einem Returnpoint und einer Liste, an die Elemente angehängt werden" und "schreibe eine Funktion typeannote, die deepmap() nutzt" als Übung übrig bleiben, was sich ja jetzt erledigt hat.

Hier ist übringens noch eine Variante:

Code: Alles auswählen

>>> def deepmap(func, ls):
...  return [func(elem) if not isinstance(elem, list) else deepmap(func, elem) for elem in ls]
... 
:P
Antworten