On Thu, Apr 24, 2014 at 01:14:33AM -0700, Albert-Jan Roskam wrote: > ----- Original Message ----- > > From: Steven D'Aprano <st...@pearwood.info> > > To: tutor@python.org > > Cc: > > Sent: Thursday, April 24, 2014 3:00 AM > > Subject: Re: [Tutor] global list > > > > <snip> > > > You only need to define variables as global if you assign to them: > > > > def function(x): > > global a > > a = [1, 2, 3, x] # assignment to variable "a" > > ah, thanks, I always wondered about that. But doesn't it make the > function (slightly) faster if you use 'global' when you only refer to > that global variable?
Theoretically, but not in practice. In Python 2.7, for example, you get exactly the same byte-code whether you declare it global or not: py> from dis import dis py> def test(): ... global a ... return a + b ... py> dis(test) 3 0 LOAD_GLOBAL 0 (a) 3 LOAD_GLOBAL 1 (b) 6 BINARY_ADD 7 RETURN_VALUE CPython, at least (I'm not sure about Jython and IronPython) doesn't bother checking locals for variables it already knows must be global, so there's no slowdown there. In principle an optimizing Python might be able to recognise when you're referring to a built-in, and avoid needlessly checking for a global of the same name, but that's actually quite a hard thing to get right. > You tell the interpreter that it is not needed > to search for that variable locally, so no time wasted on that. It's actually the other way around: you tell Python that a variable is local by assigning to it, in which case it is *only* looked for in the locals. Otherwise locals are always skipped. (The handling of locals() in Python 2 is a bit tricky, and there are differences between CPython, Jython and IronPython when you use exec or import * inside a function. Python 3 simplifies the odd corner cases by disallowing those troublesome cases.) > The > code below indicates that it makes NO difference (well, a whopping > 2ns), but maybe for larger functions it does? I wouldn't expect that 2ns is meaningful. I would treat it as mere noise in the measurement. -- Steven _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor