[Python-de] Bei der Instantiierung einer Funktion Code ausführen

Diez B. Roggisch deets at web.de
So Dez 9 16:32:31 CET 2012


Hallo Albert,

> Also ANT kenne ich nicht dazu kann ich nichts Schreiben. Aber du behauptest das es schwer ist eine POC Datei zu schreiben, dann probiere ich das jetzt mal aus:
> 
> Quelle der Nachfolgenden Daten ist die Wikipedia: http://de.wikipedia.org/wiki/Die_Simpsons die Textauszüge sind als Zitate zu verstehen
> 
> ---Dateianfang---
> 
> DOCTYPE = "VERSION : 1.3.0, CHARSET : UTF8, ESC : !/" # Sprachversion und Kodierung;
> 
> [Simpsons]
> [Familie]
> [Eltern]
> vater = ("Homer Jay Simpson " 01.01.1970 Sicherheitsinspektor);
> vater_beschreibung = """
> Homer Jay Simpson ist das Familienoberhaupt der Simpsons,
> Ehemann von Marge und Vater von Bart, Lisa und Maggie. Sein
> Alter schwankt je nach Episode zwischen 36 und 42 Jahren....
> """;
> mutter = ("Marjorie !/„Marge!/“ Simpson", 1.1.1978 "Hausfrau und Mutter);
> mutter_beschreibung = """
> Marjorie „Marge“ Simpson, geborene Bouvier, die 34-jährige
> Ehefrau von Homer und Mutter von Bart, Lisa und Maggie,
> ist die gute Seele im Hause Simpson. Sie lebt in aufopfernder
> Zuwendung für ihre...
> """;
> [/Eltern]
> [Kinder]
> bart = ("Bartholomew !/„Bart!/“ Jo-Jo Simpson" 01.1.2002 Schüler);
> bart_beschreibung = """
> Bartholomew „Bart“ Jo-Jo Simpson, alias „El Barto“,
> alias „Bartman“, ist der zehnjährige Sohn von Homer
> und Marge und zwei Jahre und 38 Tage älter als Lisa.
> """;
> lisa = ("Lisa Marie Simpson" 1.1.2004 Schüler);
> lisa_beschreibung = """
> Lisa Marie Simpson, acht Jahre alt, ist das zweite der
> Simpson-Kinder und mit einem IQ von 159 hochbegabt.
> """;
> maggie = ("Margaret !/„Maggie!/“ Simpson" 01.01.2011);
> maggie_beschreibung = """
> Margaret „Maggie“ Simpson ist mit einem Jahr das
> jüngste Mitglied der Familie
> """;
> [/Kinder]
> [/Familie]
> [Serie]
> staffel1 = ("Die komplette 1. Staffel." " 27. September 2001" "13 Folgen") # Gekürzt;
> staffel2 = ("Die komplette 2. Staffel." " 6. Juni 2002" "22 Folgen") # Gekürzt;
> [/Serie]
> [/Simposons]
> 
> ---Dateiende---
> 
> So das soll erst mal Reichen für das ganze habe ich 20 Minuten gebraucht und das obwohl ich Schwer-behindert bin und die Hände nicht immer machen was sie sollen. Das ist auch der Grund warum in listen, tuple, sets keine Kommas zwischen den Elementen stehen. Als ich wieder anfing zu Programmieren viel es mir noch schwerer als heute.

Ich finde das schon ziemlich "schwer". Natuerlich sind das alles nur Tastendrücke, und nicht den Berg raufgerollte Steinbrocken. Aber warum muss ich zB ueberhaupt Klammern um die Tupel machen, wieso die artifizielle Untterscheidung zwischen Schluesseln als Tags ([Eltern], [Kinder], …) und dann einfach als <schluessel=wert>-Paare - das ist inkonsistent, und wenn ich zB noch Hobbies von den Kindern einfuehren will - dann muss ich lisa zum Tag umschreiben? Das ist dann aber deutlich anstrengender als es gut ist.

Und wenn man das in purem Python machen wuerde, saehe das ungefaehr so aus:

# Bunch Recipe, wird natuerlich importiert. Oder man nimmt namedtuple, das habe ich aber noch nie getan ;)
class Bunch(object):

    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

n = Bunch # n fuer node oder so

simpsons = n(
    familie=n(
        eltern=n(
            vater=n(name="Homer", beschreibung="..."),
            mutter=n(name="Marge", bescreibung="..."),
            ),
        kinder=n(
            bart=...
            )
        ),
    serie=n(
        staffel1=...
        )
    )



Du siehst, ich habe auch einiges weggelassen- aus Zeitgruenden. Aber ohne auch nur eine einzige Zeile Parser-Code schreiben zu muessen. Und mein Emacs rueckt mir alles schick ein. Und natuerlich koennte Bunch auch Methoden haben, und ich koennte abgeleitete Klassen erzeugen. Code *inline* zu erweitern ist etwas schwieriger, das liegt an Python's Art, keine multi-statement Lambdas zuzulassen. 

Ich hab's auch mal als JSON gemacht, mit dem JS2-mode vom Emacs werden dir dann auch oefnnende/schliessende Klammern und Anfuehrungszeichen erzeugt. Zeigen muss ich das aber denke ich nicht, sieht letzlich aus wie Python dictionairies.

Und wenn du wirklich auf die Reduzierung von Tippvorgaengen aufgrund einer Behinderung aus bist - gerade *dann* ist doch alles, was XML-basiert ist, hoch nervend. Denn fuer die 3 1/2 gesparten Kommas in den Tupeln hast du dir die Notwendigkeit eingefangen, jedes Tag mit vorangestelltem / schliessen zu müssen.

Es gibt so viele bessere Formate als XML, gerade *weil* es so verbos ist und einen viel mehr tippen laesst, als notwendig.

Siehe zB hier:

 http://haml.info/
 http://www.yaml.org/


>> 
>> Dann darf ich zwar Python schreiben, aber nicht so richtig, weil du bestimmte Dinge 'doof' findest wie globals oder lokale Importe. Ich kann es nicht im Emacs bearbeiten mit all den Vorteilen von entweder einem XML-Modus oder einem Python-Modus. Oder zB mit Altova XMLSPY. Ich kann nicht unit-testen, ich kann nicht wiederverwenden, ich kann keine komplexeren Strukturen bauen.
> Ist schon seltsam ich lese diese Liste schon lange und immer wenn jemand global gebrauchen will um globale Variablen anzulegen wird im davon abgeraten. Jetzt wo ich konsequenter Weise die Verwendung untersagen will wird das als Beschränkung empfunden ;-)

Das ist doch nicht das Argument. Wenn global komplett und voellig schlecht wäre - dann waere es doch in Python nicht mehr drin… es gibt aber durchaus sinnvolle Anwendungen davon. Die sind rar, und man sollte gerade als Anfaenger davon absehen, weil man die Konsquenzen nicht abschaetzen kann.

Aber es zu verbieten ist eben eine schlechte Idee fuer die handvoll notwendigen Anwendungen, die es hat.

Aehnliches laesst sich uebrigens auch fuer try/except sagen.

> 
> Ach ja uni-testen kannst Du es :-) die ganze Bibliothek wird per unittest getestet und zwar sehr ausführlich.

Ich kann meinen eingebetteten Code unittesten? 

>> 
>> Fuer bestimmte Python-Strukturen gibt es aequivalente Konstrukte - eine unnoetige Doppelung. Es gibt sogar noch eine dritte Syntax mit Semikola als Statement-Trenner, Python-Code ist irgendwie komisch in Strings einzubetten usw.
>> 
>> Du verraetst uns ja nicht, *wozu* du das geschrieben hast.
> In erster Linie habe ich es für mich geschrieben. Nach meiner schweren Krankheit brauchte ich etwas was mich aufrichtet, etwas was mich Fesselt und Fasziniert. Wie ich dazu gekommen bin genau das zu scheiben kann ich heute nicht mehr sagen.

Gut, das beantwortet dann ja auch meine Frage aus der anderen Mail, die zwischendrin noch raus ging. Es ist halt ein reines Spass-Projekt. Ist ja auch ok, ich habe auch genug Code rumliegen, der nur aus der reinen Freude am ausprobieren entstanden ist.

Und in dem Sinne ist konstruktive Kritik daran auch ziemlich schwer, denn ohne Anwendungsfall, ohne Aussicht auf andere Benutzer, deren Wuensche und Probleme in das Design eingehen sollen, ist natuerlich alles erlaubt, was geht. 

Aber wenn du uns um unsere Meinung bittest, ob das sinnvoll jenseits von persoenlicher Beschaeftigung ist - dann fuerchte ich ist die Antwort nein. 

LG Diez
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://mail.python.org/pipermail/python-de/attachments/20121209/bcbd94f5/attachment-0001.html>


Mehr Informationen über die Mailingliste python-de