Symbols as parameters?

Alf P. Steinbach alfps at start.no
Thu Jan 21 05:06:39 EST 2010


Huh? I guess you meant to reply to the OP, not me.

Cheers,

- Alf

* Javier Collado:
> Hello,
> 
> I'd say that isn't totally incorrect to use strings instead of
> symbols. Please note that in other programming languages symbols,
> atoms and the like are in fact immutable strings, which is what python
> provides by default.
> 
> Best regards,
>     Javier
> 
> 2010/1/21 Alf P. Steinbach <alfps at start.no>:
>> * Martin Drautzburg:
>>> 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?
>>>>> def move( direction ):
>> ...   print( "move " + str( direction ) )
>> ...
>>>>> move( "up" )
>> move up
>>>>> class using_directions:
>> ...     up = 42
>> ...     move( up )
>> ...
>> move 42
>>>>> up
>> Traceback (most recent call last):
>>  File "<stdin>", line 1, in <module>
>> NameError: name 'up' is not defined
>>>>> _
>>
>> Of course it's an abuse of the language. :-)
>>
>> So I wouldn't recommend it, but it's perhaps worth having seen it.
>>
>>
>> Cheers & hth.,
>>
>> - Alf
>>
>> PS: I hope this was not a homework question.
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>



More information about the Python-list mailing list