MyPy1 ialah penyemak jenis statik untuk Python. Tidak seperti bahasa bertaip statik seperti C++ atau Java, Python ditaip secara dinamik. Ini bermakna bahawa dalam Python, anda tidak perlu mengisytiharkan jenis pembolehubah secara eksplisit; ia disimpulkan semasa runtime. Contohnya:
num = 4 # `num` is inferred as an integer newString = "new string" # `newString` is inferred as a string
Sebaliknya, bahasa yang ditaip secara statik memerlukan anda untuk menentukan jenis setiap pembolehubah pada masa penyusunan. Ini membantu menangkap ralat berkaitan jenis semasa pembangunan dan bukannya pada masa jalan.
int num = 4; // `num` is declared as an integer std::string newString = "new string"; // `newString` is declared as a string
Dalam bahasa yang ditaip secara dinamik seperti Python, ralat taip boleh berlaku pada masa jalan, yang mungkin membawa kepada pepijat yang lebih sukar untuk dikesan. MyPy menangani ini dengan membenarkan anda menambah petunjuk jenis pada kod Python anda, yang boleh disemak secara statik sebelum pelaksanaan. Ini menawarkan beberapa kelebihan:
Berikut ialah contoh mudah yang menunjukkan penggunaan pembayang jenis dengan MyPy:
def add(a, b): return a + b print(add(5, 3)) # Output: 8 print(add("hello", "world")) # Output: helloworld
Dalam kod di atas, fungsi tambah boleh menerima kedua-dua integer dan rentetan, yang mungkin bukan tingkah laku yang dimaksudkan.
def add(a: int, b: int) -> int: return a + b print(add(5, 3)) # Output: 8 # mypy will report an error for the following line: # print(add("hello", "world")) # TypeError: Expected int, got str
Dengan menyertakan pembayang jenis (a: int, b: int), anda menentukan bahawa tambah harus berfungsi dengan integer sahaja. MyPy menyemak kod terhadap pembayang jenis ini, menangkap isu berkaitan jenis yang berpotensi lebih awal.
Untuk bermula dengan MyPy:
python3 -m pip install mypy
mypy program.py
Arahan ini akan menyemak kod anda secara statik, sama seperti cara pengkompil menyemak sintaks dalam C++. Ia akan melaporkan sebarang jenis ralat yang ditemuinya tanpa menjalankan kod tersebut.
Menggunakan MyPy dengan berkesan membolehkan anda menyepadukan faedah menaip statik ke dalam Python, sambil masih menikmati fleksibiliti sifat dinamiknya.
def greeting(name): return 'Hello ' + name # These calls will fail when the program runs, but MyPy will not report an error greeting(123) greeting(b"Aniket")
Dengan menambahkan anotasi jenis (juga dikenali sebagai pembayang jenis), MyPy boleh mengesan isu yang berpotensi:
def greeting(name: str) -> str: return 'Hello ' + name greeting(3) # mypy will report: Argument 1 to "greeting" has incompatible type "int"; expected "str" greeting(b'Alice') # mypy will report: Argument 1 to "greeting" has incompatible type "bytes"; expected "str" greeting("World!") # No error
Di sini:
MyPy berguna dalam beberapa situasi:
Tangkap Ralat Awal: Gunakan MyPy untuk mencari ralat berkaitan jenis sebelum menjalankan kod anda. Ini membantu menangkap kesilapan lebih awal dan meningkatkan kebolehpercayaan kod.
Jadikan Kod Lebih Jelas: Menambah pembayang jenis menjadikan kod anda lebih mudah difahami. Ia menunjukkan jenis nilai yang diharapkan, yang membantu orang lain (dan diri masa depan anda) memahami kod anda dengan lebih baik.
Tingkatkan Kod Lama: Apabila mengemas kini kod lama, MyPy membantu mencari isu jenis semasa anda menambah petunjuk taip, menjadikan peralihan lebih lancar.
Tingkatkan Prototaip: Apabila membina ciri atau prototaip baharu, MyPy membantu memastikan kod baharu berfungsi dengan betul dengan kod sedia ada dengan menguatkuasakan peraturan jenis.
Kekalkan Projek Besar: Dalam projek besar dengan ramai penyumbang, MyPy membantu memastikan kod konsisten dan menghalang pepijat berkaitan jenis.
Tingkatkan Ciri IDE: Jika anda menggunakan IDE, MyPy menambah baik ciri seperti pelengkapan kod dan navigasi, menjadikan pembangunan lebih mudah.
Menggunakan MyPy membantu anda menulis kod Python yang lebih baik dan lebih dipercayai sambil masih menikmati fleksibiliti Python.
Lembaran curang pantas rasmi untuk mypy
Dokumentasi Rasmi ↩
Atas ialah kandungan terperinci Pengenalan MyPy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!