Syntaktischer Zucker?

22/07/2010 - 17:10 von Ole Streicher | Report spam
Hallo Gruppe,

ich möchte gerne an eine Funktion ein etwas komplexeres Parameterset
übergeben. Konkret sieht das so derzeit aus:

mypars = [ ('Wavelength', 'nm', 'a80_lambda', # Name, unit, column
[ ((4650, 9300), '#bbbbbb'), # range: min, max, color
((4650, 6000), 'green'),
((6000, 8000), 'orange'),
((8000, 9300), 'r') ] ),
('X position', 'px', 'xdet',
[ ((1, 4096), '#bbbbbb'),
((1, 1100), 'b'),
((1900, 2200), 'r'),
((2900, 4096), 'b') ] ) ]

infiles = os.listdir('.')
outfile = 'output.ps'

create_plot(infiles, subplots, outfile)

Das sieht hier zwar sehr kompakt aus, kommt aber nicht wirklich ohne die
erlàuternden Kurzkommentare aus -- schlecht. Schlimmer wird es dann in
create_plot:

def create_plot(infiles, mypars, outfile):
# [...]
page = my_page()
for s in mypars:
for r in s[3]:
page.add_subplot(infiles, s[2], r[0], r[1], s[1])
page.writeto(outfile)

und das sieht un völlig unverstàndlich aus. Ich "hàtte gerne" sowas wie

# [...]
for s in mypars:
for r in s.range:
page.add_subplot(infiles, s.column, r.range, r.color, s.unit)

aber ohne den Code unnötig aufzublàhen -- die "mypars"-Struktur wird
lediglich an der hier gezeigten Stelle verwendet. Dafür vorher eine
komplexe Klassendefinition zu erstellen erscheint mir auch nicht besser
lesbar.

Gibt es so etwas wie "Ad-Hoc-Klassen"? Oder irgendwelchen anderen
syntaktischen Zucker (daher das Betreff), der hier elegant aufràumt?

Oder stehe ich nur gerade auf dem Schlauch?

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Rainer Mansfeld
22/07/2010 - 17:32 | Warnen spam
Am 22.07.2010 17:10, schrieb Ole Streicher:
Hallo Gruppe,

ich möchte gerne an eine Funktion ein etwas komplexeres Parameterset
àŒbergeben. Konkret sieht das so derzeit aus:



...
Gibt es so etwas wie "Ad-Hoc-Klassen"? Oder irgendwelchen anderen
syntaktischen Zucker (daher das Betreff), der hier elegant aufrà€umt?




Hallo Ole,

seit Python 2.6 gibt's 'namedtuple'
(http://docs.python.org/library/coll...namedtuple).

Für àltere Python-Versionen siehe
http://code.activestate.com/recipes/500261/ .

Viele Grüße

Rainer

Ähnliche fragen