Question about name scope

Mel Wilson mwilson at the-wire.com
Wed Feb 1 13:47:57 EST 2012


Dave Angel wrote:
> I tried your experiment using Python 2.7 and Linux 11.04
>>> def f(a):
> from math import sin, cos
> return sin(a) + cos(a)
>> print f(45)
>> Does what you needed, and neatly. The only name added to the global
> namspace is f, of type function.
>> I was a bit surprised that using from math import * inside the
> function worked, but it generates a warning:
> olive.py:2: SyntaxWarning: import * only allowed at module level
> def f(a):

I guess they want local symbols in functions to be pre-compiled. Similar to 
the way you can't usefully update the dict returned by locals(). Strangely, 
I notice that
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(x):
... exec x
... exec 'print a'
... 
>>> f('a=4')
4
>>>
works, but I really cannot explain why.
	Mel.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /