Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Python Frage & Antworten

Erstellt von strike, 12.09.2018, 12:58 Uhr · 11 Antworten · 424 Aufrufe

  1. #1
    Avatar von strike

    Registriert seit
    08.12.2007
    Beiträge
    29.428

    Python Frage & Antworten

    Vielleicht kann mir hier jemand weiterhelfen.

    In Python kann man ja mit Decorators* arbeiten. Das Prinzip habe ich verstanden, die Syntax ist nicht sehr schwierig zu merken.

    Ich wuerde mich freuen, wenn mir irgendwer mal eine konkreten (statt konstruierten) Anwendungsfall aus der Praxis, den resultierenden Mehrwert und die Anwendungshaeufigkeit benennen koennte.

    Danke.


    * beruflich nicht mehr eingebunden, beschaeftigt man sich manchmal mit Dingen, die einfach nur interessieren

  2.  
    Anzeige
  3. #2
    Avatar von x-pat

    Registriert seit
    06.11.2003
    Beiträge
    7.597
    Soso, Python ist also dein Geheimhobby.

    Ich habe die Sprache in den letzten Jahren hauptsächlich dazu verwendet DevOps Aufgaben zu automatisieren und programmiere damit nicht regelmäßig. Sie ist mir aber sehr sympathisch. Wenn man bedenkt dass sie 27 Jahre alt war sie wirklich ihrer Zeit voraus. Was die Decorators angeht... hast du mit funktionalen Programmiersprachen Erfahrung?

    Das Prinzip der Python Decorators ist das gleiche wie durch GoF beschrieben. Es ist ein funktionales Konstrukt, um einer Funktion Verhalten hinzuzufügen. Ein relativ einfaches praktisches Anwendungsbeispiel wäre Logging.

    def simple_logger(func):
    start = time.time()
    result = func()
    print 'The result is %s - it took %d seconds' % (result, start - time.timer())
    return result

    @simple_logger
    def some_time_consuming_function:
    ....

    Damit wird dann z.B. die Ausgabe und die Zeitdauer eines beliebigen Funktionsaufrufs (some_time_consuming_function) geloggt. Das wäre ein sehr simples Beispiel. Ein anderes typisches Beispiel für Decorators wäre Prozessierung/Filterung/Umleitung von Ein-/Ausgabeströmen.

    Cheers, X-pat

  4. #3
    Avatar von x-pat

    Registriert seit
    06.11.2003
    Beiträge
    7.597
    Sorry, die für Python wichtigen Leerzeichen am Anfang der Zeilen werden leider vom Forum verschluckt.

  5. #4
    Avatar von MadMac

    Registriert seit
    06.02.2002
    Beiträge
    23.521
    Sowas macht man also, wenn man in Rente geht

    Ich bin in Crypto...

  6. #5
    Avatar von strike

    Registriert seit
    08.12.2007
    Beiträge
    29.428
    Danke, Thomas.
    Die grundsaetzliche Funktion hatte ich verstanden.
    Und mich vor Tagen an einem aehnlichem Beispiel orientiert:

    Code:
    import datetime
    import time
    from app_config import log
     
    def log_performance(func):
        def wrapper(*args, **kwargs):
            datetime_now = datetime.datetime.now()
            log.debug(f"Function {func.__name__} being called at {datetime_now}")
            start_time = time.time()
     
            result = func(*args, **kwargs)
     
            log.debug(f"Took {time.time() - start_time} seconds")
            return result
        return wrapper
     
     
    @log_performance
    def calculate_squares(n):
        """Calculate the squares of the numbers 0 to n."""
        for i in range(n):
            i_squared = i**2
     
     
    if __name__ == '__main__':
        calculate_squares(10_000_000) # Python 3!
    Quelle

    Mit ging es eher um die Frage, wie oft man so etwas in der tatsaechlichen Praxis anwendet/braucht.
    Oder ob es eher eine "akademische" Beschaeftigung ist ;)

  7. #6
    Avatar von x-pat

    Registriert seit
    06.11.2003
    Beiträge
    7.597
    Nee, der Decorator Pattern wird tatsächlich viel in der OOP Praxis verwendet. Das praktische an dem Pattern ist ja das man bestehende Logik erweitern kann, ohne dass man deren Implementierung verändern muss.

    Spontan würde mir dazu die Java I/O API einfallen. Die bietet Decorators an, die man dann je nach Bedarf zusammenbauen kann um I/O Ströme zu prozessieren.

    So ein Logger ist aber auch schon ein praktisches Beispiel. War in meinem letzten Projekt sehr wichtig, wo es um eine Realtime OLTP Anwendung ging. Wir haben einen ELK Stack damit gefüttert, mit dem man dann wunderbar die Systemlast und Transaktionstypen visualisieren konnte.

    Wenn du das GoF Standardwerk "Design Patterns" gelesen hast, kennst du die 23 "klassischen" Patterns. Davon ist der Decorator wahrscheinlich der wichtigste Strukturpattern und gehört mit Factories, Singleton, Facade, Observer, Iterator, und Command zu den meistverwendetsten.

    Cheers, X-pat

    p.s.: Ich wusste nicht, dass dieser Editor einen
    Code:
    Code
    Tag unterstützt. Man lernt immer dazu.

  8. #7
    Avatar von Ironman

    Registriert seit
    26.10.2011
    Beiträge
    4.431
    Ich selbst hab mit Decorators auch noch nicht viel gemacht.

    Allerdings dürfte ein absolut klassisches Beispiel, wie von x-pat schon angesprochen Streaming, Logging usw. sein.

    Als einfachsten Anwendungsfall könnte ich mir Texteditoren vorstellen, die eben mit dem Text unterschiedlichste Dinge anstellen müssen.

    In unserer Software wäre es eventuell interessant Dienstleistungen als Decorators abzubilden. Ist aber wahrscheinlich damals niemand auf diese Idee gekommen

  9. #8
    Avatar von x-pat

    Registriert seit
    06.11.2003
    Beiträge
    7.597
    Wenn du mit Python fertig bist, schau dir mal Node.js und TypeScript an. Node.js ist Server-side JavaScript basierend auf der Google V8 Engine mit der Besonderheit, dass alle I/O Operationen nicht-blockierend sind und das Node.js Prozesse single-threaded und Event-gesteuert sind. Diese Architektur macht die Sprache supereffizient für die Programmierung von Netzwerkdiensten.

    Weil die Antworten/Signale der nicht-blockierenden Aufrufe in asynchronen Callback Funktionen behandelt werden, wird der Programmfluss nicht-linear. Das ist sehr gewöhnungsbedürftig, weil sich der Fluss dann nicht mehr einfach von oben nach unten nachvollziehen lässt. Allerdings ist es auch sehr effizient, weil so ein einziger Thread hunderte von parallelen Anfragen bedienen kann, ohne das man sich über die typischen Nebenläufigkeitsprobleme Gedanken machen muss.

    TypeScript addiert Typsicherheit zur nicht typsicheren JavaScript Sprache. Es ist optional. Ich habe JavaScript früher gehasst, aber seit Version 6 und mit TypeScript kann man damit wirklich vernüntig programmieren und auch groß angelegte Anwendungen entwickeln.

    Cheers, X-pat

  10. #9
    Avatar von strike

    Registriert seit
    08.12.2007
    Beiträge
    29.428
    Danke fuer all die Informationen. Allerdings ist die Beschaeftigung wirklich nur Hobby.

    Eigentlich komme ich ja aus der Systemecke (UNIX,Linux) und war mit Bash und ab und an Perl gut bedient. Mit Python hatte ich einen ersten und ernsthafteren Kontakt, nachdem meine Abteilung sich intensiv mit Cloudtechnologien beschaeftigte und Loesungen fuer den Konzern entwickelt hat. Dabei setzten wir auf OpenStack, Ceph in Verbindung mit Puppet*.

    Das meiste Drumherum wurde dabei mit Python "gestrickt". Ich selbst habe da nichts mitprogrammiert - als Chef darf man immer nur gucken und hat leider auch gar keine Zeit zum Mitprogrammieren. Allerdings: ich war von der Klarheit der Sprache beeindruckt und einige meiner Jungs (die im Programmieren ohnehin viel fixer und erfahrener waren als ich) auch.

    Ich finde Python (gefuehlt) um Laengen einfacher anzuwenden als Java (das ich genau wie C, C++, Visual C irgendwann mal lernen musste) und wegen der Striktheit durchsichtiger als Perl.

    Da es aber eben nur privates Vergnuegen ist, fehlen praktische Anwendungsbeispiele und deshalb war mir unklar, inwieweit Decorators eine tatsaechliche Bedeutung haben, selbst wenn immer wieder mal zu lesen ist, dass die das Salz in der Suppe sein koennen. Was Du ja jetzt bestaetigst.

    Das von Dir erwaehnte Buch habe ich nicht gelesen, glaube aber auch, dass dies fuer mich vielleicht eine Nummer zu hoch ist.

    Auf jeden Fall Danke fuer die ausfuehrlichen Ausfuehrungen und ich werde wieder fragen, wenn es irgendwo "klemmt" oder etwas zu klaeren gilt ;)

    * hier findet sich noch heute ein Vortrag eines meiner Mitarbeiter zu unserem Projekt, fuer den er auf dem OpenStack-Summit in Atlanta - ich betrachte dies immer noch als eine wirklich grosse Ehre fuer unser Team - einen Praesentations Slot erhielt: W7

  11. #10
    Avatar von x-pat

    Registriert seit
    06.11.2003
    Beiträge
    7.597
    Naja, "Salz in der Suppe" für einen einzelnen Pattern klingt jetzt etwas übertrieben. Design Patterns sind halt mächtige Instrumente um Software auf der mittleren Abstraktionsebene zu gestalten. Man bekommt damit ein Arsenal von Standardlösungen, die sich auf viele praktische Probleme anwenden lassen. Deshalb kann ich das Buch nur empfehlen auch wenn es schon etwas älter ist.

    Python ist in der Tat einfach zu verstehen und zu erlernen. Was mir an der Sprache gefällt, ist das man mit wenig Boilerplate und klarer Syntax relativ schnell ans Ziel kommt. Sehr pragmatisch und trotzdem mächtig. Ich finde das die ideale Sprache für Scripting-Aufgaben. Fast jede Linuxinstallation enthält Python normalerweise schon. Da würde ich mit Bash-Scripting gar keine Zeit verschwenden.

    Perl habe ich auch mal gelernt, das war allerdings in den 90ern. Perl's Motto könnte man als "In der Kürze liegt die Würze" zusammenfassen. Das wirkt sich leider nicht immer gut auf die Lesbarkeit des Codes aus. Die kryptischsten Programme der Welt sind in Perl geschrieben. Trotzdem besser als Bash-Scripting.

    Ich mache im Moment leider kein DevOps mehr, was ganz einfach daran liegt, dass der DevOps Trend bei meinen jetzigen Kunden noch nicht ganz angekommen ist. Vielleicht kann ich sie ja überzeugen.

    Cheers, X-pat

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Visum-Frage fuer D bei TH/D Ehe in Thailand
    Von Dr. Locker im Forum Ehe & Familie
    Antworten: 7
    Letzter Beitrag: 01.04.15, 03:42
  2. PC-Frage
    Von DisainaM im Forum Sonstiges
    Antworten: 4
    Letzter Beitrag: 25.10.01, 21:09
  3. Frage zur Heirat
    Von KlausPith im Forum Ehe & Familie
    Antworten: 5
    Letzter Beitrag: 23.08.01, 16:42
  4. Frage an DisainaM
    Von siddhartha im Forum Sonstiges
    Antworten: 4
    Letzter Beitrag: 24.12.00, 17:52