Symbols as parameters?
drautzburg at googlemail.com
Fri Jan 22 13:06:38 CET 2010
On 22 Jan., 11:56, Roald de Vries <r... at 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):
> 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)
More information about the Python-list