Dalam Python, perintah misteri "import *" memberikan akses yang tidak pernah berlaku sebelum ini kepada sumber modul. Ia mengimport bukan sahaja modul yang ditetapkan tetapi juga fail __init__.py yang dihargai yang berada dalam folder yang mengandungi. Akibatnya, modul __init__.py yang diberkati menjadi penting kepada ruang nama semasa.
Dengan kuasa import , keperluan untuk mengisytiharkan "daripada project.model import __init__" menyejat. Satu "from project.model import " cukup untuk merangkumi segala-galanya dalam kedua-dua modul project.model dan fail __init__.py yang suci.
The daya tarikan import * terletak pada keupayaannya untuk mengimport semua objek bernama (kecuali yang bermula dengan garis bawah) daripada modul yang ditetapkan ke dalam ruang nama semasa. Ini membolehkan akses tanpa kerumitan kepada mana-mana objek yang diimport tanpa beban untuk meletakkan awalan namanya dengan pengecam modul.
Sebagai contoh, pertimbangkan coretan berikut:
from math import *
Mantra ajaib ini membolehkan kami untuk menggunakan kuasa pi dengan lancar tanpa sebarang pendahuluan perkenalan:
pi 3.141592653589793
Walau bagaimanapun, kuasa import yang besar * datang pada harga. Ia menimbulkan bahaya perlanggaran ruang nama, yang berpotensi menimpa pembolehubah sedia ada dalam skop semasa. Selain itu, ia mungkin terbukti tidak cekap jika modul sasaran mempunyai banyak objek. Akhir sekali, dan mungkin yang paling penting, ia menyekat sifat pendokumentasian sendiri kod, meninggalkan asal pembolehubah, kaedah dan kelas diselubungi misteri.
Oleh itu, mereka yang bijak. antara kami menyimpan import * untuk ujian ad-hoc dan memilih alternatif yang lebih jelas untuk kod pengeluaran. Satu pilihan berhemat ialah mengimport secara eksplisit objek yang dikehendaki sahaja:
from math import pi
Sebagai alternatif, mengimport keseluruhan modul di bawah ruang nama yang berbeza boleh menjadi kompromi yang wajar:
import math as m
Untuk membongkar misteri import *, adalah penting untuk memahaminya kerja. Secara lalai, ia mengimport semua objek bernama (tidak termasuk yang bermula dengan garis bawah). Walau bagaimanapun, sekiranya modul yang ditetapkan mentakrifkan pembolehubah semua, keutamaan diberikan dan hanya nama yang disenaraikan dalam pembolehubah itu diimport.
Banyak perpustakaan Python standard disusun ke dalam sub-modul, seperti urllib.request, sambungan urllib di mana-mana. modul. Adalah penting untuk ambil perhatian bahawa import * dari urllib tidak akan masuk ke dalam dewan yang suci ini; penyata import yang berasingan diperlukan untuk mengaksesnya:
from math import *
Arahan import yang sederhana * menggunakan kuasa yang besar, menawarkan keupayaan untuk mengimport keseluruhan kandungan modul ke dalam ruang nama semasa. Walau bagaimanapun, ia adalah kuasa yang mesti digunakan dengan berhati-hati, supaya bahaya perlanggaran ruang nama, ketidakcekapan, dan kekurangan dokumentasi diri menjerat kita. Untuk kod pengeluaran, amalan import yang lebih eksplisit dan tersusun ialah laluan kepada ketenangan dan kejelasan.
Atas ialah kandungan terperinci Mengapa Anda Perlu Mengelakkan `import *` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!