我通过以下方式启动shell:
scrapy shell 'some_url'
我想在shell中使用numpy:
import numpy
a = numpy.random.random(2)
a = array([ 0.64836678, 0.72713776])
这些都很好。当我尝试在函数定义中使用numpy时会出现问题:
In [23]: def foo(n): return numpy.random.random(n)
In [24]: foo(2)
In [24]: foo(2)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-24-3ab2f4e33a15> in <module>()
----> 1 foo(2)
<ipython-input-23-8383e2a3c452> in foo(n)
----> 1 def foo(n) : return numpy.random.random(n)
NameError: global name 'numpy' is not defined
我目前的解决方案是:
def foo(n) :import numpy ; return numpy.random.random(n)
有人可以帮助解释这个问题并提出更优雅的解决方案吗?
提前感谢。
答案 0 :(得分:1)
当你numpy.random.random(n)
Python在局部变量中查找numpy
名称时,如果找不到它,它会在全局变量中查找它。
NameError: global name 'numpy' is not defined
如果你这样做
def foo(n) :import numpy ; return numpy.random.random(n)
导入numpy
模块并在本地(内部函数foo
)变量numpy
中保留对它的引用。因此,您的通话numpy.random.random(n)
可以正常使用。
如果将numpy
导入全局命名空间,它也可以工作:
import numpy
def foo(n):
return numpy.random.random(n)
确保您执行了import numpy
,因为此处一切正常:
In [1]: import numpy
In [2]: numpy.random.random(2)
Out[2]: array([ 0.05183811, 0.18187864])
In [3]: def foo(n): return numpy.random.random(n)
In [4]: foo(2)
Out[4]: array([ 0.19754933, 0.88955471])