Để bắt đầu, tôi nghĩ rằng tôi có thể đã tìm ra cách để mã này hoạt động (dựa trên Changing module variables after import), nhưng câu hỏi của tôi thực sự là tại sao hành vi sau xảy ra không làm gì trong tương lai.Nhập mô-đun: __main__ vs nhập khẩu làm mô-đun
Tôi có ba tệp. Đầu tiên là mod1.py:
# mod1.py
import mod2
var1A = None
def func1A():
global var1
var1 = 'A'
mod2.func2()
def func1B():
global var1
print var1
if __name__ == '__main__':
func1A()
Tiếp theo, tôi có mod2.py:
# mod2.py
import mod1
def func2():
mod1.func1B()
Cuối cùng tôi có driver.py:
# driver.py
import mod1
if __name__ == '__main__':
mod1.func1A()
Nếu tôi thực hiện lệnh python mod1.py
thì đầu ra là None
. Dựa trên liên kết tôi đã tham chiếu ở trên, có vẻ như có một số khác biệt giữa mod1.py
đang được nhập là __main__
và mod1.py
đang được nhập từ mod2.py
. Do đó, tôi đã tạo driver.py
. Nếu tôi thực hiện lệnh python driver.py
thì tôi nhận được kết quả mong đợi: A
. Tôi thấy sự khác biệt, nhưng tôi không thực sự thấy cơ chế hoặc lý do cho nó. Làm thế nào và tại sao điều này xảy ra? Có vẻ phản trực giác rằng cùng một mô-đun sẽ tồn tại hai lần. Nếu tôi thực thi python mod1.py
, bạn có thể truy cập các biến trong phiên bản __main__
của mod1.py
thay vì các biến trong phiên bản được nhập bởi mod2.py
không?
Bạn sẽ tự làm việc nếu bạn cấu trúc lại để loại bỏ việc nhập vòng tròn. – eryksun