Symbols as parameters?
Roald de Vries
rdv at roalddevries.nl
Fri Jan 22 11:56:02 CET 2010
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
> 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 *"
> 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
> So it should look something like this
> ... magic, magic ...
> ... 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:
def __call__(self, direction):
move = Move()
Now move.up() means move('up'), and you can obviously do similar
things for other directions.
More information about the Python-list