3

我是 Python 新手。我目前在 Py3k (Win) 上。

我在安装.py文件时遇到问题。基本上,我想使用本页底部提供的食谱。所以我想把它们放在 a中.pyimport然后放在我的任何源代码中。

所以我将所有食谱复制到一个recipes.py文件中并将它们复制到C:\Python3k\Lib\site-packages.

现在,import工作正常,但是当我尝试从中调用任何函数(例如take)时,我得到了一个global name 'islice' is not defined......所以我想,我应该添加一个itertools导入到recipes.py

我仍然得到同样的错误?我是否需要将所有实例更改为itertools.<funcname>?我怎样才能使进口成为全球性的?这是一个新的 Py3k 变化吗?有什么我想念的吗?

提前致谢, :)

4

1 回答 1

7

有两个密切相关的问题。

首先,recipes.py 中,您需要访问所有的 itertools。

至少,这意味着你需要

import itertools

在顶部。但在这种情况下,您需要将所有 itertools 函数限定为itertools.<funcname>,如您所说。(您也可以使用import itertools as itthen it.<funcname>。)

第二,你可以做

from itertools import islice, count, chain

但是您需要将所有需要的功能放在列表中。

最后,最不推荐但可能最简单的方法是

from itertools import *

这是危险的,因为它会污染您的命名空间,其中的所有内容都来自itertools,这被认为是不好的和不受控制的,但在这种情况下可能并不可怕。

其次,您在所有使用 recipes.py的代码中都有类似的问题;您需要限定或明确导入所有内容。所以,要么

import recipes
recipes.take(...)

或者

from recipes import take
take(...)
于 2010-09-25T09:22:40.383 回答