Keyword-Parameternamen

15/09/2010 - 13:59 von Ole Streicher | Report spam
Hallo,

ich möchte meine Keyword-Parameternamen gerne gruppieren, also z.B

def myfunc(**ndata):
print('x.y ist %s' % ndata['x.y'])

myfunc(x.y = 'ergolgreich')

Leider klappt das nicht; Python beschwert sich darüber:

SyntaxError: keyword can't be an expression

Warum ist das so, kann man das umgehen und wie würde man seine Parameter
hier sonst sinnvoll gruppieren?

Das hier:

def myfunc(**ndata):
print('x_y ist %s' % ndata['x_y'])

myfunc(x_y = 'ergolgreich')

funktioniert, sieht aber nicht besonders elegant aus.

Der Grund ist, dass "myfunc" bei mir ein callable Klasse ist, mit der
ich eigentlich sowas machen will:

myfunc = MyFunc()
myfunc.x.y = 'Defaultwert'
myfunc() # verwendet x.y
myfunc(x.y = 'Anderer Wert') # überschreibt x.y

Es gibt dabei mehrere (Einsatzabhàngig) "x"-Objekte, die jeweils viele
(>5) "y"-Attribute haben. Vielleicht gibt es hier ja einen cleveren
"Python"-Weg.

Viele Grüße

Ole
 

Lesen sie die antworten

#1 deets
15/09/2010 - 14:19 | Warnen spam
Ole Streicher writes:

Hallo,

ich möchte meine Keyword-Parameternamen gerne gruppieren, also z.B

def myfunc(**ndata):
print('x.y ist %s' % ndata['x.y'])

myfunc(x.y = 'ergolgreich')

Leider klappt das nicht; Python beschwert sich darüber:

SyntaxError: keyword can't be an expression

Warum ist das so, kann man das umgehen und wie würde man seine Parameter
hier sonst sinnvoll gruppieren?



Das kann man nicht umgehen, weil fuer Parameter nunmal dieselben Regeln
gelten wie fuer Attributzugriff - es muss ein identifier sein.

Sonst koenntest du ja sowas machen:

def foo(parameter_name_abhaenging_von_relativer_mondfeuchte()):
# und was genau schreibst du jetzt hier um auf deinen berechneten
# namen zuzugreifen? siehste.

Sinnvolle Gruppierungen ergeben sich durch Objekte, wie zB Bunch oder dictionaries.


Das hier:

def myfunc(**ndata):
print('x_y ist %s' % ndata['x_y'])

myfunc(x_y = 'ergolgreich')

funktioniert, sieht aber nicht besonders elegant aus.

Der Grund ist, dass "myfunc" bei mir ein callable Klasse ist, mit der
ich eigentlich sowas machen will:

myfunc = MyFunc()
myfunc.x.y = 'Defaultwert'
myfunc() # verwendet x.y
myfunc(x.y = 'Anderer Wert') # überschreibt x.y



myfunc.x(y="Anderere Wert")

laesst sich sicher machen, wenn man eben x als Objekt begreift.

Diez

Ähnliche fragen