ThomasDartsch Ich habe in Dortmund Informatik studiert und arbeite als Software-Entwickler bei der Firma Dicad System GmbH (CAD für das Bauwesen). Python entdeckte ich 1995 bei der Suche nach einer Alternative zu Perl als Sprache zur Entwicklung interner Tools. Nach zwei Tagen Ausprobierens war ich überzeugt und habe seitdem keine Zeile Perl mehr geschrieben ...

Beruflich programmiere ich zwar überwiegend in C++ und C# - aber wir setzen in zunehmenden Maße Python nicht nur für administrative Aufgaben sondern auch in unseren Produkten ein. Anwendungsfelder sind dabei zum Beispiel Dateiformatkonverter aber auch kundenspezifische geometrische Berechnungen - hierfür habe ich einen C++-Geometriekern mittels boost python für Python verfügbar gemacht - und sogar Optimierungsalgorithmen (Packalgorithmen, hier war der in Python geschriebene Prototyp einfach schnell genung ...).

Dekoratoren

Beim pyCologne-Treffen am 11. April 2007 habe ich einen Vortrag zum Thema Dekoratoren gehalten. Die reStructuredText-Vorlage für meine Folien ist decorators-utf8.txt, die per rst2s5.py generierte S5-Slideshow befindet sich in decorators.tgz.

Einige "Literaturhinweise":

Hier noch ein etwas brauchbarerer trace-Dekorator (im Vergleich zu dem rudimentären aus meinem Vortrag):

   1 from functools import wraps
   2 
   3 def trace(func):
   4     """Trace decorator with call nesting indication (for Py 2.5).
   5 
   6     >>> @trace
   7     ... def fac(n):
   8     ...     if n == 1:
   9     ...         return 1
  10     ...     else:
  11     ...         return n * fac(n - 1)
  12     ...
  13     >>> fac(4)
  14     ,- fac(4)
  15     |,- fac(3)
  16     ||,- fac(2)
  17     |||,- fac(1)
  18     |||`- 1
  19     ||`- 2
  20     |`- 6
  21     `- 24
  22     24
  23     """
  24     @wraps(func)
  25     def wrapper(*args, **kw):
  26         bars = "|" * trace.nesting
  27         args_repr = [repr(arg) for arg in args]
  28         args_repr.extend("%s=%r" % arg for arg in kw.iteritems())
  29         print "%s,- %s(%s)" % (
  30             bars, func.__name__, ", ".join(args_repr))
  31         trace.nesting += 1
  32         try:
  33             result = func(*args, **kw)
  34         finally:
  35             trace.nesting -= 1
  36         print bars + "`-", repr(result)
  37         return result
  38     return wrapper
  39 trace.nesting = 0

ThomasDartsch (zuletzt geändert am 2009-06-17 16:14:14 durch anonym)