Ala*_*air 6 python python-import execfile
我让自己很困惑。我有一组 python 函数,所有这些函数都放在一个名为 (假设) 的文件中useful.py。然后我可以将模块读入我的 ipython
import useful as uf
Run Code Online (Sandbox Code Playgroud)
然后我可以访问各个功能
uf.meaning_of_life()
Run Code Online (Sandbox Code Playgroud)
等等。标准的东西。
但是 - 此文件中的某些函数会调用其他函数。我可以随时使用 调用单个函数uf.,但是相互调用的函数呢?如果一个被调用的函数eat引用了另一个被调用的函数chew,如何eat知道在哪里找到chew?我可以调用 asuf.eat和uf.chew。
我可以通过简单地执行execfile('useful.py')非常有效的操作来忽略所有这些,但我想更多地了解模块系统。
目前,当import我尝试使用我的函数时会产生错误;当我使用时execfile一切正常。
我很欣赏这可能会被解释为初学者的问题,但我是从 Matlab 背景开始接触 Python 的,我自然倾向于使用execfile. 非常欢迎指向信息的指针。
为了了解正在发生的事情,您首先需要了解的是每个模块都是它自己的本地命名空间。
如果您有这样的模块:
def chew():
print('chewing')
def eat():
print('eating')
chew()
Run Code Online (Sandbox Code Playgroud)
eat可以chew毫无问题地调用不是很明显吗?它们定义在同一级别,在全局(模块)范围内,因此它们可以清楚地看到彼此。
现在我们在另一个模块中执行以下操作:
import useful as uf
uf.eat()
Run Code Online (Sandbox Code Playgroud)
为了访问chew,我们需要uf.chew像打字一样写字uf.eat。我们需要这样做,因为我们在另一个模块中。为了让我们做我们必须做的任何事情import useful,以便我们的模块知道它。我们对useful模块的了解是它的内容被添加到uf名称中。
这是我们的观点。但是useful模块知道关于它自己的一切。一切都没有改变,因此,它并不需要进口本身来访问它的内容,它不知道任何有关其他模块,它没有import编本身。
所以要回答,eat知道如何查找,chew因为它们在同一个模块中,因此在同一个范围内。
首先,建议使用 from somefile 导入定义,因为让我使用您的函数定义来给您一个清晰的了解。我会写一些简单的函数来吃和咀嚼。参考文献会在哪里咀嚼。
有用的.py
def eat():
print 'Eaten'
def chew():
eat()
Run Code Online (Sandbox Code Playgroud)
主要File.py代码
from useful import chew as uf
uf()
Run Code Online (Sandbox Code Playgroud)
通过调用chew函数的uf别名来引用eat函数。欢迎来到Python。