[英]Call function from parent module in imported module
我有以下問題:我有一個包含一些已定義函數的.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()
您可以將函數作為參數傳遞:
測試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()
更多pythonic解決方案(IMHO)是這樣的:
文件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
跳過import test2
,因為test2
已經是已知模塊。 在文件末尾, __name__
不是__main__
,並且if
條件為false。 這個很重要! 導入不應有任何副作用。 test2
,其余文件被解析。 test1
,其余文件被解析。 這次滿足了文件底部的條件,因此主要部分的執行從one()
開始
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.