Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Import Pekeliling dalam Python Boleh Dielakkan dan Diselesaikan?

Bagaimanakah Import Pekeliling dalam Python Boleh Dielakkan dan Diselesaikan?

Barbara Streisand
Barbara Streisandasal
2024-12-27 21:05:10576semak imbas

How Can Circular Imports in Python Be Avoided and Resolved?

Import Pekeliling dalam Python: Perangkap dan Penyelesaian

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn