Seite 1 von 1

pygen

Verfasst: Freitag 16. Februar 2007, 23:38
von Costi
ich denke der code muesste selbsterkalerend sein
(nur sehr grob getestet!)


gruesse
costi

Code: Alles auswählen

class Pygen:
    def __init__(self, bound = 5 * ' '):
        self.bound = bound
        self.level = 0

    def _begin(self):
        self.level += 1

    #used for if, while, for and else
    def _space2(self):
        self.level += 1
        return (self.level - 1) * self.bound

    def _space1(self):
        return self.level * self.bound


    def Set(self, var1, var2):
        return self._space1() + ', '.join(var1) + " = " + ', '.join(var2)

    def Call(self, function, args):
        return self._space1() + ".".join(function) + " (" + ", ".join(args) + ")"


    def If(self, condition):
        return self._space2() + "if " + condition + ":"

    def End(self):
        self.level -= 1

    def For(self, var, condition):
        return self._space2() + "for " + var + " " + condition + ":"

    def While(self, condition):
        return self._space2() + "while " + condition + ":"

    def Def(self, def_name, args):
        return self._space2() + "def " + def_name + " (" + ", ".join(args) + "):"

    def ClassDef(self, def_name, args):
        return self.iDef(def_name, ("self") + args)

    def Else(self):
        retval = self._space2() + "else:"
        self.level += 1
        return retval 


Re: pygen

Verfasst: Samstag 17. Februar 2007, 09:06
von Leonidas
Costi hat geschrieben:ich denke der code muesste selbsterkalerend sein
Nein, wofür sollte sowas gut sein?

Verfasst: Samstag 17. Februar 2007, 11:00
von nkoehring
das sieht aus als ob du Schleifenfunktionen ueberladen willst... aber warum o,O
Ich denke ganz so selbsterklaerend ist es dann doch nicht :(

Verfasst: Samstag 17. Februar 2007, 12:25
von Costi
Ich denke ganz so selbsterklaerend ist es dann doch nicht
es ist ein python code generator in python ( :

Code: Alles auswählen

>>> from pyGen import Pygen
>>> p = Pygen()
>>> p.Def("mal", ("x", "y"))
'def mal (x, y):'
>>> p.Call(("return",), ("x * y",))
'     return (x * y)'
>>> p.End()
>>> p.Set(("x",), (p.Call(("mal",), ("7", "5")),))
'x = mal (7, 5)'
>>> p.Call(("print",), ("x",))
'print (x)'
wofür sollte sowas gut sein?
@Leonidas: pls naechstes mal konstruktiv und begruendet kritisieren

Verfasst: Samstag 17. Februar 2007, 12:34
von nkoehring
Costi hat geschrieben:
wofür sollte sowas gut sein?
@Leonidas: pls naechstes mal konstruktiv und begruendet kritisieren
ehm... ich hab da nix kritisches entdeckt... nur eine direkte frage ;)
aber egal... ich werd mir einfach mal genauer anschauen, was du da geschrieben hast, denn es ist wirklich nicht ohne weiteres aus dem code erkenntlich, und die zeit sich zwei stunden damit zu beschaeftigen, nur weil der author der meinung waere, es nicht erklaeren zu muessen, hat wohl kaum jemand (ich jedenfalls nicht).

Verfasst: Samstag 17. Februar 2007, 13:04
von Leonidas
Costi hat geschrieben:
wofür sollte sowas gut sein?
@Leonidas: pls naechstes mal konstruktiv und begruendet kritisieren
Der Kommentar war sowohl konstruktiv als auch begründet. Ich führe mal aus:
  1. du hast einfach irgendeinen schwer lesbaren Code in das Forum geschmissen mit der Begründung dass er selbsterklärend ist. Ist er aber nicht.
  2. Wofür braucht man einen Codegenarator in Python? Es gibt Metaklassen, Dekoratoren etc. schon in Python eingebaut also wozu soll das gut sein?
Du siehst, sowohl konstruktive als auch begründete Kritik.

Verfasst: Samstag 17. Februar 2007, 19:58
von Y0Gi
Ich kapiere auch nicht, wozu das sein soll. Und "selbsterklärend" ist, wenn da Kommentare drin stehen. Die sollen nämlich nicht die Beschreibung des Codes doppeln, sondern den Sinn und Zweck davon erklären.

Übrigens kann ich dir wärmstens ans Herz legen, mal die %-Formatierung (vgl. printf() aus C) zu verinnerlichen und anzuwenden.

Verfasst: Samstag 17. Februar 2007, 23:49
von BlackJack
lunar hat geschrieben:Die GUI-Dateien haben den echten Vorteil das sie unabhängig von der Programmiersprache sind.
Mmmh, dem kann ich so nicht zustimmen ...
  • Um Glade GUI Dateien zu verwenden, benötigt man libglade Bindings für die gewählte Sprache.
  • Um QT UI Dateien zu verwenden, benötigt man einen UI Compiler für die gewählte Sprache.
[/quote]

Inwiefern macht das jetzt die Datei mit der GUI-Beschreibung abhängig von der Programmiersprache? Wenn mir der Designer Code für Python ausspuckt, kann ich den nicht für ein C Programm verwenden. Eine Datei mit der GUI-Beschreibung ist dagegen unabhängig von der Programmiersprache. Ich kann einen Prototyp in Sprache X entwerfen und die GUI-Beschreibung dann für die spätere Implementierung in Sprache Y wiederverwenden. Da sind Daten und Code strikter voneinander getrennt. Ist im Grunde das gleiche wie die wünschenswerte Trennung von Darstellung und Logik bei Webframeworks.

Edit (Leonidas): Rest der Diskussion in "Vorteile der Codegeneratoren, aber auch deren Nachteile" abgetrennt.