Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Perbezaan dalam Invocation apabila Melaksanakan Kod Python dengan -m?

Apakah Perbezaan dalam Invocation apabila Melaksanakan Kod Python dengan -m?

DDD
DDDasal
2024-10-22 21:28:30878semak imbas

What are the Differences in Invocation when Executing Python Code with -m?

Memahami Perbezaan Invokasi dalam Pelaksanaan Kod Python dengan -m

Penterjemah Python menyediakan pilihan -m, yang membolehkan anda melaksanakan modul perpustakaan sebagai skrip dalam modul __main__. Pendekatan ini berbeza daripada menjalankan skrip secara terus tanpa pilihan -m, yang membawa kepada perbezaan dan implikasi tertentu.

Perbezaan Praktikal

Apabila menggunakan -m, Python mengurus pakej secara berbeza. Jika anda cuba melaksanakan pakej tanpa -m, jurubahasa akan menganggapnya sebagai skrip biasa. Sebaliknya, dengan -m, pakej boleh diimport dan import relatif akan menganggap pakej dengan betul sebagai titik permulaan.

Sebagai contoh, pertimbangkan kod berikut dalam a.py:

<code class="py">if __name__ == "__main__":
    print(__package__)
    print(__name__)</code>

Menjalankan python a.py menghasilkan:

None
__main__

Manakala, menggunakan python -m a menghasilkan:

""
__main__

Di sini, pembolehubah __package__ kosong dalam kes pertama kerana fail itu dilaksanakan sebagai skrip. Dengan -m, __package__ ditetapkan kepada rentetan kosong kerana modul tidak berada dalam pakej.

Penjelasan pakej dan nama

Untuk __package__:

  • Untuk skrip yang dijalankan tanpa -m, __package__ ditetapkan kepada Tiada kerana ia tidak boleh menjadi pakej.
  • Untuk modul yang dijalankan dengan -m yang berada dalam pakej, __package__ ditetapkan kepada nama pakej.

Untuk __name__:

  • Ia merujuk kepada modul utama yang dibuat semasa menjalankan skrip.
  • Untuk pakej yang dijalankan dengan -m, ia merujuk kepada ruang nama global yang disimpan dalam sys.modules['__main__']. Modul utama dalam pakej dilaksanakan apabila menjalankan pakej dengan -m.

Implikasi untuk Pelaksanaan Pakej

Menjalankan pakej sebagai skrip dengan -m memerlukan modul __main__.py dalam pakej. Modul ini bertindak sebagai titik masuk apabila Python melaksanakan pakej menggunakan suis -m.

Atas ialah kandungan terperinci Apakah Perbezaan dalam Invocation apabila Melaksanakan Kod Python dengan -m?. 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