Puzzled by "is"

Steve Holden steve at holdenweb.com
Sun Aug 12 12:59:59 EDT 2007


Dick Moores wrote:
> At 08:23 AM 8/12/2007, Steve Holden wrote:
>> Dick Moores wrote:
>>> So would a programmer EVER use "is" in a script?
>> Sure. For example, the canonical test for None uses
>>
>>      x is None
>>
>> because there is only ever one instance of type Nonetype, so it's the
>> fastest test. Generally speaking you use "is" to test for identity (do
>> these two expressions reference the same object) rather than equality
>> (do these two expressions evaluate to equivalent objects).
> 
> Off the top of your head, could you or others give me as many 
> examples as you can think of?
> 
Occasionally it's necessary to test for a specific type (though in 
Python this is usually bad practice). Since types are also singletons 
the best way to do this is (e.g.):

     type(x) is type([]) # test specifically for a list

If you want to know whether you have been told to write to standard 
output, one possible test is

     if f is not sys.stdout

Similarly, of course, you can test for the other standard IO channels.

The imputil module contains the test

     if importer is not self

to determine whether a reload() should be performed in the context of 
the current package.

When you need to establish a specific sentinel value that can never be 
provided by an outside caller it's normal to create an instance of 
object (the simplest possible thing you can create in a Python program) 
and test for that instance, as in

     sentinel = object()
         ...
     if value is sentinel:

You can test whether a class is new-style as opposed to old-style, which 
can help to unify old-style and new-style objects:

class MetaProperty(type):
     def __new__(cls, name, bases, dct):
         if bases[0] is object: # allow us to create class Property
             return type.__new__(cls, name, bases, dct)
         return property(dct.get('get'), dct.get('set'),
                 dct.get('delete'), dct.get('__doc__'))

     def __init__(cls, name, bases, dct):
         if bases[0] is object:
             return type.__init__(cls, name, bases, dct)


That gets you started ...

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC/Ltd           http://www.holdenweb.com
Skype: holdenweb      http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------




More information about the Python-list mailing list