我是Python的新手。我目前正在使用Py3k(Win)。
我在安装.py
文件时遇到问题。基本上,我想使用this页面底部提供的食谱。所以我想把它们放在.py
和import
里面的我的源代码中。
所以我将所有食谱复制到recipes.py
文件中并将其复制到C:\Python3k\Lib\site-packages
。
现在,import
工作正常,但是当我尝试从中调用任何函数(例如take
)时,我得到了global name 'islice' is not defined
...所以我想,我应将itertools
导入添加到recipes.py
我仍然得到同样的错误?我是否需要将所有实例更改为itertools.<funcname>
?我怎样才能使导入全局化?这是一个新的Py3k变化吗?我有什么遗失的吗?
提前致谢:)
答案 0 :(得分:7)
有两个密切相关的问题。
首先,在 recipes.py中的,您需要访问所有的itertools。
至少,这意味着你需要
import itertools
在顶部。但是在这种情况下,您需要将所有itertools函数限定为itertools.<funcname>
,如您所述。 (您也可以使用import itertools as it
然后使用it.<funcname>
。)
其次,你可以做到
from itertools import islice, count, chain
但您需要将所有必需的功能放在列表中。
最后,推荐最少,但可能最简单的是
from itertools import *
这很危险,因为它会使用来自itertools
的所有来污染您的命名空间,这被视为糟糕且不受控制,但在这种情况下可能并不可怕。
第二个,您在使用 recipes.py
的所有代码中遇到类似问题;你需要限定或明确导入一切。所以,要么
import recipes
recipes.take(...)
或
from recipes import take
take(...)