Assigning to None (was Re: Question about Python)
Steven D'Aprano
steve at REMOVETHIScyber.com.au
Sun Jul 3 19:11:19 EDT 2005
On Sun, 03 Jul 2005 19:19:05 +0000, Bengt Richter wrote:
> On Sun, 03 Jul 2005 11:47:07 +1000, Steven D'Aprano <steve at REMOVETHIScyber.com.au> wrote:
>
>>On Fri, 01 Jul 2005 12:59:20 -0400, François Pinard wrote:
>>
>>> [Peter Hansen]
>>>> Mike Meyer wrote:
>>>> > Yes. I once grabbed an old program that did assignments to None. But
>>>> > that's always been a bad idea.
>>>
>>>> What was the use case!?
>>>
>>> People used to assign None to itself as a keyword argument in function
>>> headers. The goal was to make a local copy of the reference, which was
>>> then accessed faster than the global thing.
>>
>>Can you say "premature optimization is the root of all evil"?
>>
>>I'd like to see the profiling that demonstrated that this made a
>>significant -- or even measurable -- speed-up in anything but the most
>>unusual cases.
>>
> The difference between local and global access is definitely measurable, though
> there's no reason to use None as the local name if you want to do that kind
> of optimization (not possible in 2.4+)
[snip]
> about 25% longer to get a global (AND bind it locally, which the two timings share)
> than to do the same for a local, it seems.
Sure. And if you are actually looping over one million bindings to your
local variable, and doing NOTHING else, you may approach a 25% time
saving. That is, one of the unusual cases I mentioned.
But in real world usage, the 25% saving in fetching the variable once or
twice is almost certainly lost in the noise of the rest of your code.
Saving 25% of 0.0000001 second running time in a function that takes
0.0001 second in total to run is pointless.
That's why I asked about the profiling. I'd like to see what sort of real
world function got enough real benefit from setting None=None to make up
for the misuse of the language.
--
Steven.
More information about the Python-list
mailing list