Tonight I discovered something odd in the __doc__ for tempfile
 as shipped with Python 2.4.4 and 2.5: it says:

        This module also provides some data items to the user:

          TMP_MAX  - maximum number of names that will be tried before
                     giving up.
          template - the default prefix for all temporary names.
                     You may change this to control the default prefix.

 ... which would lead one to think that the following code would work:

        >>> import tempfile
        >>> tempfile.template = 'mytest'
        >>> tf = tempfile.NamedTemporaryFile()
        >>> tf.name
        '/tmp/mytest-XXXXXX'

 It doesn't.

 In fact I realized, after reading through tempfile.py in /usr/lib/...
 that the following also doesn't "work" like I'd expect:

        # foo.py
        tst = "foo"
        def getTst(arg):
                return "foo-%s" % arg


        # bar.py
        import foo
        foo.tst = "bar"
        print foo.getTst("testing")
        
        foo-testing     <<<----- NOT "bar-testing"

 Now I would feel like a real idiot if I'd come across that in the
 foo/bar case here ... because I clearly don't understand quite *why*
 I can't "monkey patch" this value.  I would ... but I don't.

 First, I wouldn't have written code like this foo/bar stuff; except
 to test my hypothesis about why changes to tempfile.template don't
 actually affect the values seen by functions in the tempfile namespace.

 Secondly, the author(s) of the tempfile module apparently didn't
 understand this either.  And no one else even noticed that the __doc__
 is wrong (or at least misleading -- since the only way I can see to
 change tempfile.template is to edit the .py file!

 So, I don't feel like an idiot.  But I am curious ...

 ... why can't I change that value in that other namespace?  Is it
 a closure?  (Or like a closure?)  Where is this particular aspect
 of the import/namespace semantics documented?


-- 
Jim Dennis,
Starshine: Signed, Sealed, Delivered

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to