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
Lepaskan: 2024-12-27 21:05:10
asal
565 orang telah melayarinya

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__)
Salin selepas log masuk

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__)
    Salin selepas log masuk
  • 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__)
    Salin selepas log masuk
  • 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__)
    Salin selepas log masuk
  • 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
    Salin selepas log masuk
  • 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__)
    Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan