Hướng dẫn does python need compiler - python có cần trình biên dịch không

Đó là một sự nhầm lẫn lớn đối với những người mới bắt đầu làm việc ở Python và câu trả lời ở đây có một chút khó hiểu nên tôi sẽ làm cho nó dễ dàng hơn.

Nội dung chính

  • Một lời giải thích đơn giản về cách mã Python được thực thi khác với các ngôn ngữ lập trình cũ hơn.
  • Ngôn ngữ được giải thích
  • Tại sao phải giải thích?
  • Nhược điểm của các ngôn ngữ được giải thích
  • Chính xác thì bộ sưu tập rác là gì?
  • __Pycache__ là gì?
  • Python có phải là loại trình biên dịch không?
  • Python có sử dụng một thông dịch viên không?
  • Python có sử dụng cả trình thông dịch và trình biên dịch không?
  • Tại sao Python không được biên soạn?

Khi chúng tôi hướng dẫn Python chạy kịch bản của chúng tôi, có một vài bước mà Python thực hiện trước khi mã của chúng tôi thực sự bắt đầu khủng hoảng:

  • Nó được tổng hợp thành mã byte.
  • Sau đó, nó được chuyển đến máy ảo.

Khi chúng tôi thực thi một số mã nguồn, Python biên dịch nó vào mã byte. Biên dịch là một bước dịch và mã byte là một đại diện độc lập nền tảng thấp của mã nguồn.

Lưu ý rằng mã byte python không phải là mã máy nhị phân (ví dụ: hướng dẫn cho chip intel).

Trên thực tế, Python dịch từng câu lệnh của mã nguồn thành các hướng dẫn mã byte bằng cách phân tách chúng thành các bước riêng lẻ. Bản dịch mã byte được thực hiện để thực hiện tốc độ. Mã byte có thể được chạy nhanh hơn nhiều so với các câu lệnh mã nguồn gốc. Nó có tiện ích mở rộng và nó sẽ được viết nếu nó có thể viết vào máy của chúng tôi.

Vì vậy, lần tới khi chúng tôi chạy cùng một chương trình, Python sẽ tải tệp .pyc và bỏ qua bước biên dịch trừ khi nó được thay đổi. Python tự động kiểm tra dấu thời gian của các tệp mã nguồn và byte để biết khi nào nó phải được biên dịch lại. Nếu chúng ta định lại mã nguồn, mã byte sẽ tự động tạo lại vào lần tiếp theo chương trình được chạy.

Nếu Python không thể viết các tệp mã byte vào máy của chúng tôi, chương trình của chúng tôi vẫn hoạt động. Mã byte được tạo trong bộ nhớ và chỉ cần loại bỏ trên lối ra chương trình. Nhưng bởi vì thời gian khởi động tốc độ .PYC, chúng tôi có thể muốn đảm bảo rằng nó đã được viết cho các chương trình lớn hơn.

Hãy tóm tắt những gì xảy ra đằng sau hậu trường. Khi Python thực hiện một chương trình, Python đọc .Py vào bộ nhớ và phân tích cú pháp nó để có được mã byte, sau đó tiếp tục thực thi. Đối với mỗi mô -đun được chương trình nhập, Python trước tiên kiểm tra xem liệu có phiên bản Bytecode được biên dịch trước, trong .Pyo hoặc .pyc, có dấu thời gian tương ứng với tệp .py của nó. Python sử dụng phiên bản bytecode nếu có. Mặt khác, nó phân tích tệp .py của mô -đun, lưu nó vào tệp .pyc và sử dụng mã byte mà nó vừa tạo. When Python executes a program, Python reads the .py into memory, and parses it in order to get a bytecode, then goes on to execute. For each module that is imported by the program, Python first checks to see whether there is a precompiled bytecode version, in a .pyo or .pyc, that has a timestamp which corresponds to its .py file. Python uses the bytecode version if any. Otherwise, it parses the module's .py file, saves it into a .pyc file, and uses the bytecode it just created. When Python executes a program, Python reads the .py into memory, and parses it in order to get a bytecode, then goes on to execute. For each module that is imported by the program, Python first checks to see whether there is a precompiled bytecode version, in a .pyo or .pyc, that has a timestamp which corresponds to its .py file. Python uses the bytecode version if any. Otherwise, it parses the module's .py file, saves it into a .pyc file, and uses the bytecode it just created.

Các tập tin mã byte cũng là một cách vận chuyển mã Python. Python vẫn sẽ chạy một chương trình nếu tất cả những gì nó có thể tìm thấy là các tệp.pyc, ngay cả khi các tệp nguồn .Py gốc không có ở đó.

Máy ảo Python (PVM)

Khi chương trình của chúng tôi đã được biên dịch thành mã byte, nó sẽ được chuyển đến để thực hiện vào máy ảo Python (PVM). PVM không phải là một chương trình riêng biệt. Nó không cần phải được cài đặt bởi chính nó. Trên thực tế, PVM chỉ là một vòng lặp lớn mà lặp lại thông qua hướng dẫn mã byte của chúng tôi, từng người một, để thực hiện các hoạt động của họ. PVM là động cơ thời gian chạy của Python. Nó luôn luôn có mặt như là một phần của hệ thống Python. Đó là thành phần thực sự chạy các tập lệnh của chúng tôi. Về mặt kỹ thuật, nó chỉ là bước cuối cùng của những gì được gọi là phiên dịch Python.

Một lời giải thích đơn giản về cách mã Python được thực thi khác với các ngôn ngữ lập trình cũ hơn.

Tín dụng hình ảnh-https://encrypted-tbn0.gstatic.com/images?q=tbn:

Là một kỹ sư học máy, tôi đã sử dụng Python trong hơn một năm. Gần đây, tôi cũng đã bắt đầu học C ++, để giải trí. Nó làm cho tôi nhận ra Python dễ dàng và trực quan như thế nào. Tôi đã tò mò hơn về việc Python khác với các ngôn ngữ khác và hoạt động của nó. Trong blog này, tôi cố gắng gãi Python, làm việc bên trong.

Python bắt đầu như một dự án sở thích của Guido Van Rossum và được phát hành lần đầu tiên vào năm 1991. Một ngôn ngữ có mục đích chung, Python đang cung cấp năng lượng lớn cho nhiều công ty như Netflix và Instagram. Trong một cuộc phỏng vấn, Guido so sánh Python với các ngôn ngữ như Java hoặc Swift và nói rằng trong khi hai người sau là một lựa chọn tuyệt vời cho các nhà phát triển phần mềm - những người có công việc hàng ngày là lập trình, nhưng Python được tạo ra cho những người có công việc hàng ngày không liên quan gì đến phần mềm Phát triển nhưng họ mã chủ yếu để xử lý dữ liệu.

Khi bạn đọc về Python, khá thường xuyên, bạn bắt gặp những từ như - được biên dịch so với diễn giải, mã byte và mã máy, gõ động so với gõ tĩnh, bộ thu gom rác, v.v. Wikipedia mô tả Python là

Python là một ngôn ngữ lập trình đa năng được giải thích, cấp cao. Nó được gõ linh hoạt và thu thập rác. is an interpreted, high-level, general-purpose programming language. It is is dynamically typed and garbage-collected. is an interpreted, high-level, general-purpose programming language. It is is dynamically typed and garbage-collected.

Ngôn ngữ được giải thích

Khi bạn viết một chương trình trong C/C ++, bạn phải biên dịch nó. Biên dịch liên quan đến việc dịch mã con người của bạn thành mã có thể hiểu được hoặc mã máy. Mã máy là dạng cấp cơ sở của các hướng dẫn có thể được thực thi trực tiếp bởi CPU. Khi biên dịch thành công, mã của bạn tạo ra một tệp thực thi. Thực hiện tệp này chạy các hoạt động trong mã của bạn từng bước.

Đối với hầu hết các phần, Python là một ngôn ngữ được giải thích và không phải là một ngôn ngữ được biên dịch, mặc dù tổng hợp là một bước. Mã Python, được viết trong tệp .py được biên dịch đầu tiên với cái được gọi là mã byte (được thảo luận chi tiết hơn nữa) được lưu trữ với định dạng .pyc hoặc .pyo..py file is first compiled to what is called bytecode (discussed in detail further) which is stored with a .pyc or .pyo format..py file is first compiled to what is called bytecode (discussed in detail further) which is stored with a .pyc or .pyo format.

Thay vì dịch mã nguồn sang mã máy như C ++, mã python được dịch thành mã byte. Bytecode này là một tập hợp các hướng dẫn cấp thấp có thể được thực thi bởi một trình thông dịch. Trong hầu hết các PC, trình thông dịch Python được cài đặt tại /usr/local/bin/python3.8. Thay vì thực hiện các hướng dẫn trên CPU, các hướng dẫn bytecode được thực thi trên máy ảo.interpreter. In most PCs, Python interpreter is installed at /usr/local/bin/python3.8. Instead of executing the instructions on CPU, bytecode instructions are executed on a Virtual Machine.interpreter. In most PCs, Python interpreter is installed at /usr/local/bin/python3.8. Instead of executing the instructions on CPU, bytecode instructions are executed on a Virtual Machine.

Tại sao phải giải thích?

Một lợi thế phổ biến của các ngôn ngữ được giải thích là chúng độc lập với nền tảng. Miễn là mã python byte và máy ảo có cùng phiên bản, mã byte Python có thể được thực thi trên bất kỳ nền tảng nào (windows, macOS, v.v.).

Gõ động là một lợi thế khác. Trong các ngôn ngữ được xy bằng tĩnh như C ++, bạn phải khai báo loại biến và bất kỳ sự khác biệt nào như thêm chuỗi và số nguyên được kiểm tra trong thời gian biên dịch. Trong các ngôn ngữ được đánh máy mạnh mẽ như Python, công việc của người phiên dịch là kiểm tra tính hợp lệ của các loại và hoạt động biến được thực hiện.

Nhược điểm của các ngôn ngữ được giải thích

Gõ động cung cấp rất nhiều tự do, nhưng đồng thời nó làm cho mã của bạn rủi ro và đôi khi khó gỡ lỗi.

Python thường bị buộc tội là ‘chậm. Bây giờ trong khi thuật ngữ này là tương đối và lập luận rất nhiều, lý do để chậm là vì trình thông dịch phải thực hiện công việc làm thêm để có hướng dẫn mã byte được dịch thành một hình thức có thể được thực thi trên máy. Một bài viết StackOverflow giúp dễ hiểu bằng cách sử dụng một sự tương tự -

Nếu bạn có thể nói bằng ngôn ngữ mẹ đẻ của mình với ai đó, điều đó thường sẽ hoạt động nhanh hơn là có thông dịch viên phải dịch ngôn ngữ của bạn sang một số ngôn ngữ khác để người nghe hiểu.

Chính xác thì bộ sưu tập rác là gì?

Trong các ngôn ngữ lập trình cũ, phân bổ bộ nhớ khá thủ công. Nhiều lần khi bạn sử dụng các biến không còn được sử dụng hoặc tham chiếu ở bất kỳ nơi nào khác trong chương trình, chúng cần được làm sạch từ bộ nhớ. Người thu gom rác làm điều đó cho bạn. Nó tự động giải phóng không gian mà không cần bạn làm gì cả. Quản lý bộ nhớ hoạt động theo hai cách -

Theo một cách đơn giản hóa, nó theo dõi số lượng tham chiếu đến một đối tượng. Khi số đó đi xuống 0, nó sẽ xóa đối tượng đó. Điều này được gọi là đếm tham chiếu. Điều này không thể bị vô hiệu hóa trong Python.reference counting. This cannot be disabled in Python.reference counting. This cannot be disabled in Python.

Trong trường hợp đối tượng tham chiếu bản thân hoặc hai đối tượng đề cập đến nhau, một quy trình gọi là bộ sưu tập rác thế hệ sẽ giúp. Đây là một cái gì đó đếm tham chiếu truyền thống không thể chăm sóc.

__Pycache__ là gì?

Nhiều lần trong dự án cá nhân của bạn hoặc trên GitHub, bạn có thể đã thấy một thư mục có tên __pycache__ được tạo tự động.

/folder   - __pycache__       - preprocess.cpython-36.pyc   - preprocess.py

Như bạn có thể thấy, tên tệp giống như tên bên ngoài thư mục __pycache__. Phần mở rộng .pyc cho chúng tôi biết rằng tệp chứa mã byte cho tiền xử lý.py. Tên Cpython biểu thị loại phiên dịch. Cpython có nghĩa là thông dịch viên đã được triển khai bằng ngôn ngữ C. Tương tự, JPython là một thông dịch viên Python được triển khai trong Java.cpython denotes the type of interpreter. CPython means that the interpreter was implemented in C language. Similarly, JPython is a Python interpreter implemented in Java.cpython denotes the type of interpreter. CPython means that the interpreter was implemented in C language. Similarly, JPython is a Python interpreter implemented in Java.

Nhưng tại sao thư mục được tạo ở nơi đầu tiên? Vâng, nó làm tăng một chút tốc độ của chương trình Python. Trừ khi bạn thay đổi mã python của mình, việc sắp xếp lại thành mã byte được tránh, do đó tiết kiệm thời gian.

Tôi đã bắt đầu blog cá nhân của mình và tôi không có ý định viết nhiều bài viết tuyệt vời hơn trên Medium. Hỗ trợ blog của tôi bằng cách đăng ký vào ThenLP.Space

Python có phải là loại trình biên dịch không?

Python là một ngôn ngữ lập trình được giải thích và có nhiều môi trường thực thi khác nhau. Nó có một loạt các trình biên dịch để thực hiện các chương trình Python. Ví dụ, Pycharm, Pydev, Spyder, Atom, Visual Studio Code, Jupyter Notebook, ETC.It has a variety of compilers to execute the Python programs. For example, PyCharm, PyDev, Spyder, Atom, Visual Studio Code, Jupyter Notebook, etc.It has a variety of compilers to execute the Python programs. For example, PyCharm, PyDev, Spyder, Atom, Visual Studio Code, Jupyter Notebook, etc.

Python có sử dụng một thông dịch viên không?

Trong các cuốn sách khác nhau về lập trình Python, người ta đã đề cập rằng ngôn ngữ Python được giải thích.Nhưng đó là một nửa chính xác Chương trình Python được biên soạn đầu tiên và sau đó được giải thích.

Python có sử dụng cả trình thông dịch và trình biên dịch không?

Python đều được biên dịch cũng như được giải thích trong khi chạy mã, Python tạo mã byte bên trong, mã byte này sau đó được chuyển đổi bằng máy ảo Python (p.v.m) để tạo đầu ra. While running the code, Python generates a byte code internally, this byte code is then converted using a python virtual machine (p.v.m) to generate the output. While running the code, Python generates a byte code internally, this byte code is then converted using a python virtual machine (p.v.m) to generate the output.

Tại sao Python không được biên soạn?

Được biên dịch mã byte, được chạy qua một thông dịch viên vì Python là một ngôn ngữ được giải thích.Python là một ngôn ngữ được biên dịch.Nó không được tổng hợp với một ngôn ngữ mà việc triển khai phần cứng tồn tại;Nó được thực hiện bởi một máy ảo.It just isn't compiled to a language for which a hardware implementation exists; it is executed by a virtual machine.It just isn't compiled to a language for which a hardware implementation exists; it is executed by a virtual machine.