On 22 Jan., 11:56, Roald de Vries <r...@roalddevries.nl> wrote: > Hi Martin, > > On Jan 21, 2010, at 8:43 AM, Martin Drautzburg wrote: > > > > > > > Hello all, > > > When passing parameters to a function, you sometimes need a paramter > > which can only assume certain values, e.g. > > > def move (direction): > > ... > > If direction can only be "up", "down", "left" or "right", you can > > solve > > this by passing strings, but this is not quite to the point: > > > - you could pass invalid strings easily > > - you need to quote thigs, which is a nuisance > > - the parameter IS REALLY NOT A STRING, but a direction > > > Alternatively you could export such symbols, so when you "import *" > > you > > have them available in the caller's namespace. But that forces you > > to "import *" which pollutes your namespace. > > > What I am really looking for is a way > > > - to be able to call move(up) > > - having the "up" symbol only in the context of the function > > call > > > So it should look something like this > > > ... magic, magic ... > > move(up) > > ... unmagic, unmagic ... > > print up > > > This should complain that "up" is not defined during the "print" call, > > but not when move() is called. And of course there should be as little > > magic as possible. > > > Any way to achieve this? > > You could do something like this: > > class Move(object): > def __call__(self, direction): > print(direction) > return 0 > > def up(self): > return self('up') > > move = Move() > > Now move.up() means move('up'), and you can obviously do similar > things for other directions.- Zitierten Text ausblenden - > > - Zitierten Text anzeigen -
I had thought about that too. It gets a bit tricky when there is more than one parameter and it completely fails whan a parameter can REALLY be a number or an arbitrary string. Think: move(direction, distance) -- http://mail.python.org/mailman/listinfo/python-list