Existance of of variable
George Sakkis
gsakkis at rutgers.edu
Mon Jul 4 16:12:56 EDT 2005
Hi Josiah,
> Hello. I am very new to Python, and have been unable to figure out how
> to check if a variable exists or not. In the following code I have made
> a kludge that works, but I think that it would be clearer to check if
> closest exists and not have to initialize it in the first place. How is
> that check done?
>
> The following code finds the closest place to a position and rejects
> places that are too far away.
>
> dist = 1e9
> closest = -1
>
> for n,p in galaxy.places.iteritems():
> dif = p.pos - pos
> len = dif.len()
> if len < dist and len < 10.0/self.zoom:
> dist = len
> closest = p
>
> if closest != -1:
> self.sel = [closest.name]
I would write it like this:
def setClosest(self, pos, galaxy):
minDist, closestPlace = min([((place.pos-pos).len(), place)
for place in galaxy.places.itervalues()])
if minDist < 10.0/self.zoom:
self.sel = [closestPlace.name]
else:
raise RuntimeError("No place close enough")
> I also have a few other questions to tack on if you don't mind. I am
> setting dist to 1e9, because that is a larger value than any of the
> places in the galaxy will be far away. Is there a better way to
> initialize dist so that it is impossible for this to fail? For example,
> would setting dist to infinity work, and how is that done?
Here's a safer way; it doesn't rely on what the maximum and minimum
number is in a specific platform:
Smallest = type("Smallest", (object,), {'__cmp__' :
lambda self,other: self is not other and -1 or 0})()
Largest = type("Largest", (object,), {'__cmp__' :
lambda self,other: self is not other and 1 or 0})()
assert Smallest == Smallest < -1e300 < 0 < 1e300 < Largest == Largest
assert Largest == Largest > 1e300 > 0 > -1e300 > Smallest == Smallest
Strictly speaking, Smallest and Largest should be singletons, to
protect you from stupid mistakes such as making copies of them.
> Extending my existance checking question, how does one check what type
> a variable has?
>>> type(3)
<type 'int'>
>>> type(3.0)
<type 'float'>
Almost in all cases though you should prefer "isinstance(variable,
sometype)" instead of "type(variable) == sometype", so that it doesn't
break for subclasses of sometype.
> Thanks for your help!
>
> -- Josiah
Regards,
George
More information about the Python-list
mailing list