【问题标题】:Calling a function from a function inside an imported file从导入文件中的函数调用函数
【发布时间】:2015-05-04 23:04:58
【问题描述】:

我有一个文件,我们称之为One.py

from Two.py import example2

def example2():
   print "something!"

还有一个名为Two.py的文件:

def example1():
   print "Other thing!"
   example2()

但是,当我尝试拨打example2() 时,它无法识别它。我想避免简单地将One.py 导入Two.py,因为这会创建一个导入循环。

【问题讨论】:

  • 顺便说一句,您的导入错误,以及您重新定义示例 2 的原因。请澄清。
  • 这根本没有任何意义。你不应该从Two.py 导入example1 吗?请注意,您忽略了.py - from Two import example1。你到底想达到什么目的?!

标签: python function import


【解决方案1】:

首先,您只需命名模块即可导入,无需文件结尾:

from Two import example2

这应该会失败,因为在Two.py 中没有example2 的定义

一个简单的例子来做我猜你想要的看起来像这样:

One.py:

def function1():
    print 'I am function 1'

Two.py:

from One import function1
def function2():
    print 'I am function 2'
function1()
function2()

【讨论】:

  • 如果你真的需要在函数2中使用函数1,然后将函数2导入到One模块中,你最好在同一个模块中定义这两个函数。
【解决方案2】:

正如 cmets 所说,您的代码没有多大意义。让我们看看你的Two.py 文件:

#Two.py
def example1():
print "Other thing!"
example2()

该文件包含一个名为example1 的函数的定义,该函数会打印一个字符串。执行时,example2() 将永远不会被调用,因为 example2() 从未在任何地方声明过。如果您在本地声明它,则需要在Two.py 中添加一个定义它的函数。例如,将以下代码行附加到您的 Two.py 文件中:

def example2():
    print "Example 2 was called"

现在,当您尝试调用该函数时,编译器将知道您希望它做什么,因为您在本地声明了它。另一方面,如果您没有在同一个文件中声明该函数,而是在其他地方定义了它,您可以从另一个文件中导入该函数。由于One.py 具有example2() 的定义,因此您可以在Two.py 中导入模块以访问它。您的最后两个文件应如下所示:

#Two.py
from One.py import example2  #instead of importing it from elsewhere, you can also define it in the actual file
def example1():
    print "Other thing!"     #notice the indentation that you left out
example1()
example2()

#One.py
def example2():
    print "something!"

这将毫无错误地执行。

要了解您的实现出了什么问题,请考虑以下代码行:

from Two.py import example2

上面声明有一个名为Two.py 的文件,它包含一个名为example2 的函数的定义。但是,如果您仔细查看您的 Two.py 文件,您会发现没有要导入的 example2。因此,编译器会发出警告,告诉您有问题。

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2018-10-19
    相关资源
    最近更新 更多