我让自己很困惑。我有一组python函数,所有这些函数都集成在一个名为(让我们说)useful.py
的文件中。然后我可以用
import useful as uf
然后我可以使用
访问各个函数 uf.meaning_of_life()
等等。标准的东西。
但是 - 此文件中的某些函数会调用其他函数。我可以随时使用uf.
调用单个函数,但是相互调用的函数呢?如果名为eat
的函数引用了另一个名为chew
的函数,那么eat
如何知道在哪里找chew
?我可以同时将其称为uf.eat
和uf.chew
。
我可以通过简单地执行execfile('useful.py')
来完全忽略所有这一点,但是我希望能够更好地处理模块系统。
目前,当我使用import
时,我尝试使用我的函数会产生错误;当我使用execfile
时,一切正常。
我很欣赏这可能被解释为一个初学者问题,但我是从Matlab背景来看Python,我的自然倾向是使用execfile
。信息指针非常受欢迎。
答案 0 :(得分:2)
首先要了解的是,每个模块都是自己的本地命名空间。
如果您有这样的模块:
def chew():
print('chewing')
def eat():
print('eating')
chew()
eat
可以毫无问题地调用chew
这是不是很明显?它们在全局(模块)范围内定义在同一级别,因此很明显它们可以相互看到。
现在我们在另一个模块中执行以下操作:
import useful as uf
uf.eat()
要访问chew
,我们需要写uf.chew
,就像我们输入uf.eat
一样。
我们需要这样做,因为我们在另一个模块。为了让我们做任何我们必须import useful
的事情,以便我们的模块知道它。我们对useful
模块的了解是,其内容已添加到uf
名称。
这是我们的观点。但是useful
模块知道自己的一切。没有任何改变,它不需要导入自己来访问其内容,它不知道任何关于其他模块它没有{{1}编辑本身。
为了回答, import
知道如何查找eat
,因为它们位于同一模块中,因此位于同一范围中。
答案 1 :(得分:-1)
首先建议使用somefile导入定义作为一些东西,让我使用你的函数定义来给你一个清晰的图片。我会写简单的功能来吃和咀嚼。咀嚼会引用吃的东西。
useful.py
def eat():
print 'Eaten'
def chew():
eat()
主File.py代码
from useful import chew as uf
uf()
通过调用uf别名来获取引用eat函数的chew函数。欢迎来到python。