Dalam bidang pengaturcaraan Python, kebergantungan bulat boleh timbul apabila modul cuba mengimport satu sama lain. Memahami gelagat import sedemikian adalah penting untuk mengelakkan kemungkinan perangkap.
Apabila dua modul, katakan foo dan bar, saling mengimport antara satu sama lain menggunakan import foo dan bar import, import akan berjaya dengan lancar kerana kedua-dua modul dimuatkan sepenuhnya dan boleh merujuk antara satu sama lain.
Walau bagaimanapun, isu timbul apabila menggunakan daripada import, seperti daripada foo import abc dan dari bar import xyz. Dalam senario ini, setiap modul memerlukan satu lagi untuk diimport sebelum ia boleh diteruskan. Kebergantungan kitaran ini membawa kepada ralat import.
Untuk menggambarkan, pertimbangkan kod berikut:
# foo.py from bar import xyz def abc(): print(xyz.__name__) # bar.py from foo import abc def xyz(): print(abc.__name__)
Kod ini akan mencetuskan ImportError kerana foo memerlukan bar untuk diimport sebelum ia boleh melaksanakan daripada penyata import, tetapi bar juga memerlukan foo diimport terlebih dahulu.
Untuk mengendalikan import pekeliling dengan berkesan, beberapa penyelesaian wujud:
Atas modul; tiada daripada; Python 2 sahaja:
# foo.py import bar def abc(): print(bar.xyz.__name__) # bar.py import foo def xyz(): print(foo.abc.__name__)
Atas modul; daripada ok; relatif ok; Python 3 sahaja:
# foo.py from . import bar def abc(): print(bar.xyz.__name__) # bar.py from . import foo def xyz(): print(abc.__name__)
Atas modul; tiada daripada; tiada saudara:
# foo.py import lib.bar def abc(): print(lib.bar.xyz.__name__) # bar.py import lib.foo def xyz(): print(lib.foo.abc.__name__)
Bawah modul; import atribut, bukan modul; daripada okay:
# foo.py def abc(): print(xyz.__name__) from .bar import xyz # bar.py def xyz(): print(abc.__name__) from .foo import abc
Atas fungsi; daripada okay:
# foo.py def abc(): from . import bar print(bar.xyz.__name__) # bar.py def xyz(): from . import foo print(foo.abc.__name__)
Import bintang, walau bagaimanapun, tidak dibincangkan dalam contoh yang disediakan dalam artikel asal.
Atas ialah kandungan terperinci Bagaimanakah Import Pekeliling dalam Python Boleh Dielakkan dan Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!