tempfile.NamedTemporaryFile wont work

Steven D'Aprano steve at REMOVE.THIS.cybersource.com.au
Sun Nov 19 09:02:11 EST 2006


On Sun, 19 Nov 2006 13:18:39 +0100, Bjoern Schliessmann wrote:

> Imbaud Pierre wrote:
> 
>>              tf = tempfile.NamedTemporaryFile()
>>              tfName = tf.name
>> [...]
>>              print >> sys.stderr, '%s: %s' % (tfName, ['no',
>> 'yes'][os.path.exists(tfName)])
>>              subprocess.Popen(['strings', tfName])
> 
> Just out of curiosity: Why did you assign tf.name to tfname?
> 
> Hypothetically, if tf.name changed, tfname wouldn't follow since
> strings are immutable.

Well, yes, but if tf.name changed, that won't change the file name on disk
either:

>>> tf = tempfile.NamedTemporaryFile()
>>> tf.name
'/tmp/tmpYVV1Ij'
>>> os.path.exists(tf.name)
True
>>> oldname = tf.name
>>> tf.name = "/tmp/something"
>>> os.path.exists(tf.name)
False
>>> os.path.exists(oldname)
True


I'm guessing that binding tf.name to tfName is a micro-optimization. In a
very tight loop, name lookups can take considerable time, and one
optimization can be to reduce the number of lookups:

method = something.method
while 1:
    something.method # needs at least two lookups
    method # needs a single lookup


-- 
Steve.




More information about the Python-list mailing list