Puzzled by "is"
rdm at rcblue.com
Sun Aug 12 19:22:51 CEST 2007
At 09:59 AM 8/12/2007, Steve Holden wrote:
>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:
> def __new__(cls, name, bases, dct):
> if bases 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 is object:
> return type.__init__(cls, name, bases, dct)
>That gets you started ...
Sure does. Thanks very much, Steve.
More information about the Python-list