我有以下问题:我有一个带有一些已定义函数的.py文件,我导入了一个模块。从这个导入的模块我想从父模块调用一个函数。我该怎么做呢?我搜索了很多,但没有找到答案。这里有一些测试代码向您展示我的问题。
文件1:
from test2 import *
def one():
print("one")
pass
def two():
print("two")
print("now call function three from test one")
three()
one()
two()
文件2:导入为模块
def three():
print("three")
print("now call function one from test 1")
one()
答案 0 :(得分:1)
您可以将函数作为参数传递:
测试1:
from test2 import *
def one():
print("one")
pass
def two():
print("two")
print("now call function three from test one")
three(one) # function one()
one()
two()
测试2:
def three(function):
print("three")
print("now call function one from test 1")
function()
答案 1 :(得分:1)
更多pythonic解决方案(恕我直言)是这样的:
档案test1.py
:
import test2
def one():
print("one")
pass
def two():
print("two")
print("now call function three from test one")
test2.three()
if __name__ == '__main__':
one()
two()
和test2.py
:
import test1
def three():
print("three")
print("now call function one from test 1")
test1.one()
然后python3 test1.py
产生:
one two now call function three from test one three now call function one from test 1 one
是的,有一个循环导入。让我们一步一步看看它是如何工作的:
test1
以__main__
启动,因为这是Python用于启动程序的特殊保留名称。test1
在第一行导入test2
,因此解析将继续进行。test2
依次导入test1
,这就是为什么第一个文件从头开始再次解析,但现在以其真实名称解析。此时跳过import test2
,因为test2
已经是已知模块。在文件末尾,__name__
不是__main__
,if
条件为false。这个很重要!进口不应有任何副作用。test2
,文件的其余部分被解析。test1
,解析文件的其余部分。这次满足文件底部的条件,因此主要部分的执行以one()