Anonymus functions revisited : tuple actions
Ron
radam2 at tampabay.rr.com
Thu Mar 24 17:13:25 EST 2005
On Thu, 24 Mar 2005 12:07:44 -0500, "George Sakkis"
<gsakkis at rutgers.edu> wrote:
>"Kay Schluehr" <kay.schluehr at gmx.net> wrote:
>> [snipped]
>>
>> Wouldn't it be fun to use in Python?
>>
>> Only drawback: does not look like executable pseudo-code anymore :(
>>
>>
>> Regards Kay
>
>I don't know if it would be fun, but it certainly doesn't look accessible to mere mortals :-) I'm
>not sure if the mind boggling is more due to the syntax with the '->' and all or the semantics, but
>it goes in the oppposite direction from my initial proposal (having defaults in for loops) with
>respect to readability.
>
>Regards,
>George
>
Hi George, I think I got the default variable functions working now.
if isa('name'): do something
Checks locals, globals, and builtins for the varable name.
variable = ifno('name', object)
Sets a variable name to an object if it does not exist, or sets it to
the 'variable name's object if it does. (The target doesn't have to
match.)
They are slower than try/except, but can be used in expressions. Like:
x,y,z = x,y, ifno('z',0)
#---Here's the code---------------------
import sys
def isa(v):
"""
Check if a varable exists in the current
(parent to this function), global, or
builtin name spaces.
use: bool = isa( str )
returns True or False
"""
plocals = sys._getframe(1).f_locals
if plocals.has_key(v) or globals().has_key(v) or \
__builtins__.locals().has_key(v):
return True
return False
def ifno(v, obj=None):
"""
Check if a varable does not exists, return a
default value, otherwise return the varable obj.
use: obj = ifno( str [,obj=None] )
if str exist, returns str's object
if str does not exist, returns specified object
"""
plocals = sys._getframe(1).f_locals
if plocals.has_key(v):
return plocals[v]
if globals().has_key(v):
return globals()[v]
if __builtins__.locals().has_key(v):
return __builtins__.locals()[v]
return obj
def test():
"""
Test isa() and ifno() functions:
"""
# Totally useless routine. ;)
import random
for n in range(25):
# Delete a random x,y,z coordinate to
# simulate an unrealiabe data source.
d = random.choice([1,2,3])
if d==1:
if isa('x'): del x
elif d==2:
if isa('y'): del y
else:
if isa('z'): del z
# Replace the missing Varible with a random number.
r = int(random.random()*100)
x, y, z = ifno('x',r), ifno('y',r), ifno('z',r)
print x, y, z
if __name__ == '__main__':
test()
#-------------------------------------
More information about the Python-list
mailing list