Ngôn ngữ lập trình Python dành cho người mới bắt đầu đọc. Một cách dễ dàng để học ngôn ngữ lập trình Python: nó có tồn tại không?

Lập trình Python

Phần 1. Khả năng ngôn ngữ và cú pháp cơ bản

Chuỗi nội dung:

Có đáng học Python không?

Python là một trong những ngôn ngữ lập trình hiện đại phổ biến nhất. Nó phù hợp để giải quyết nhiều vấn đề khác nhau và cung cấp các khả năng tương tự như các ngôn ngữ lập trình khác: tính năng động, hỗ trợ OOP và đa nền tảng. Sự phát triển của Python được Guido Van Rossum bắt đầu vào giữa những năm 1990, vì vậy đến nay người ta đã có thể thoát khỏi những căn bệnh tiêu chuẩn của tuổi thơ, phát triển đáng kể những khía cạnh tốt nhất của ngôn ngữ và thu hút nhiều lập trình viên sử dụng Python để triển khai Python. dự án.

Nhiều lập trình viên tin rằng chỉ cần học các ngôn ngữ lập trình “cổ điển” như Java hoặc C++, vì dù sao thì các ngôn ngữ khác cũng sẽ không thể cung cấp các khả năng tương tự. Tuy nhiên, gần đây đã nảy sinh niềm tin rằng một lập trình viên nên biết nhiều hơn một ngôn ngữ, vì điều này giúp anh ta mở rộng tầm nhìn, cho phép anh ta giải quyết vấn đề một cách sáng tạo hơn và tăng khả năng cạnh tranh trên thị trường lao động.

Học hoàn hảo hai ngôn ngữ như Java và C++ khá khó và mất nhiều thời gian; Ngoài ra, nhiều khía cạnh của các ngôn ngữ này còn mâu thuẫn với nhau. Đồng thời, Python lý tưởng cho vai trò của ngôn ngữ thứ hai, vì nó được tiếp thu ngay lập tức nhờ kiến ​​thức đã có về OOP và thực tế là các khả năng của nó không xung đột mà bổ sung cho kinh nghiệm thu được khi làm việc với chương trình khác. ngôn ngữ.

Nếu một lập trình viên mới bắt đầu bước chân vào lĩnh vực phát triển phần mềm thì Python sẽ là ngôn ngữ lập trình “nhập môn” lý tưởng. Nhờ sự ngắn gọn của nó, nó sẽ cho phép bạn nhanh chóng nắm vững cú pháp của ngôn ngữ và việc không có “di sản” dưới dạng các tiên đề được hình thành qua nhiều năm sẽ giúp bạn nhanh chóng thành thạo OOP. Do những yếu tố này, thời gian học Python sẽ khá ngắn và lập trình viên sẽ có thể chuyển từ các ví dụ mang tính giáo dục sang các dự án thương mại.

Do đó, bất kể người đọc bài viết này là ai - một lập trình viên giàu kinh nghiệm hay một người mới bắt đầu trong lĩnh vực phát triển phần mềm, câu trả lời cho câu hỏi, tiêu đề của phần này, phải là một tiếng “có”.

Chuỗi bài viết này được thiết kế để giúp bạn vượt qua chặng đường học tập một cách thành công bằng cách cung cấp thông tin từ các nguyên tắc cơ bản nhất của ngôn ngữ đến các khả năng tích hợp nâng cao của ngôn ngữ với các công nghệ khác. Bài viết đầu tiên sẽ đề cập đến các tính năng và cú pháp cơ bản của Python. Sau đây, chúng ta sẽ xem xét các khía cạnh nâng cao hơn khi làm việc với ngôn ngữ phổ biến này, đặc biệt là lập trình hướng đối tượng trong Python.

Kiến trúc Python

Bất kỳ ngôn ngữ nào, dù là lập trình hay giao tiếp, đều bao gồm ít nhất hai phần - từ vựng và cú pháp. Ngôn ngữ Python được tổ chức theo cách giống hệt nhau, cung cấp cú pháp để hình thành các biểu thức tạo thành chương trình thực thi và từ vựng - một tập hợp chức năng dưới dạng thư viện tiêu chuẩn và các trình cắm thêm.

Như đã đề cập, cú pháp của Python khá ngắn gọn, đặc biệt khi so sánh với Java hoặc C++. Một mặt, điều này là tốt, vì cú pháp càng đơn giản thì càng dễ học và bạn càng mắc ít lỗi hơn khi sử dụng nó. Tuy nhiên, những ngôn ngữ như vậy có một nhược điểm - chúng có thể được sử dụng để truyền tải những thông tin đơn giản nhất và không thể diễn đạt các cấu trúc phức tạp.

Điều này không áp dụng cho Python vì đây là ngôn ngữ đơn giản nhưng được đơn giản hóa. Thực tế là Python là ngôn ngữ có mức độ trừu tượng cao hơn, chẳng hạn như cao hơn Java và C++, đồng thời cho phép bạn truyền tải cùng một lượng thông tin trong một lượng mã nguồn nhỏ hơn.

Python cũng là ngôn ngữ có mục đích chung, vì vậy nó có thể được sử dụng trong hầu hết mọi lĩnh vực phát triển phần mềm (độc lập, máy khách-máy chủ, ứng dụng Web) và trong bất kỳ lĩnh vực chủ đề nào. Ngoài ra, Python tích hợp dễ dàng với các thành phần hiện có, cho phép bạn nhúng Python vào các ứng dụng đã được viết sẵn.

Một thành phần khác tạo nên thành công của Python là các mô-đun mở rộng, cả tiêu chuẩn và cụ thể. Các mô-đun mở rộng Python tiêu chuẩn là chức năng được thiết kế tốt và đã được thử nghiệm theo thời gian để giải quyết các vấn đề phát sinh trong mọi dự án phát triển phần mềm, xử lý chuỗi và văn bản, tương tác với hệ điều hành và hỗ trợ các ứng dụng Web. Các mô-đun này cũng được viết bằng Python, vì vậy chúng có thuộc tính quan trọng nhất - đa nền tảng, cho phép bạn chuyển các dự án từ hệ điều hành này sang hệ điều hành khác một cách dễ dàng và nhanh chóng.

Nếu chức năng được yêu cầu không có trong thư viện Python tiêu chuẩn, bạn có thể tạo mô-đun mở rộng của riêng mình để sử dụng nhiều lần sau này. Điều đáng chú ý ở đây là các mô-đun mở rộng cho Python có thể được tạo không chỉ bằng chính ngôn ngữ Python mà còn có thể sử dụng các ngôn ngữ lập trình khác. Trong trường hợp này, có thể triển khai hiệu quả hơn các tác vụ tiêu tốn nhiều tài nguyên, chẳng hạn như các phép tính khoa học phức tạp, nhưng lợi thế của đa nền tảng sẽ bị mất nếu bản thân ngôn ngữ mô-đun mở rộng không phải là đa nền tảng, như Python.

Thời gian chạy Python

Như bạn đã biết, tất cả các ngôn ngữ lập trình đa nền tảng đều được xây dựng trên cùng một mô hình: đó thực sự là mã nguồn di động và môi trường thời gian chạy, không di động và dành riêng cho từng nền tảng cụ thể. Môi trường thực thi này thường bao gồm một trình thông dịch thực thi mã nguồn và các tiện ích khác nhau cần thiết để duy trì ứng dụng - trình gỡ lỗi, trình biên dịch ngược, v.v.

Môi trường thời gian chạy Java cũng bao gồm một trình biên dịch vì mã nguồn phải được biên dịch thành mã byte cho máy ảo Java. Thời gian chạy Python chỉ bao gồm một trình thông dịch, cũng là một trình biên dịch nhưng biên dịch mã nguồn Python trực tiếp thành mã máy trên nền tảng đích.

Hiện tại có ba triển khai thời gian chạy được biết đến cho Python: CPython, Jython và Python.NET. Như tên cho thấy, khung đầu tiên được triển khai bằng C, khung thứ hai trong Java và khung cuối cùng trong nền tảng .NET.

Thời gian chạy CPython thường được gọi đơn giản là Python và khi mọi người nói về Python, họ thường ám chỉ việc triển khai này. Việc triển khai này bao gồm một trình thông dịch và các mô-đun mở rộng được viết bằng C và có thể được sử dụng trên bất kỳ nền tảng nào có sẵn trình biên dịch C tiêu chuẩn. Ngoài ra, các phiên bản thời gian chạy được biên dịch trước tồn tại cho các hệ điều hành khác nhau, bao gồm các phiên bản khác nhau của Windows Hệ điều hành và các bản phân phối Linux khác nhau. Trong bài viết này và các bài viết tiếp theo, CPython sẽ được xem xét, trừ khi có quy định riêng.

Thời gian chạy Jython là một triển khai Python để chạy Máy ảo Java (JVM). Mọi phiên bản JVM đều được hỗ trợ, bắt đầu từ phiên bản 1.2.2 (phiên bản Java hiện tại là 1.6). Làm việc với Jython yêu cầu phải có máy Java đã cài đặt (môi trường thời gian chạy Java) và một số kiến ​​thức về ngôn ngữ lập trình Java. Không cần thiết phải biết cách viết mã nguồn bằng Java, nhưng bạn sẽ phải xử lý các tệp JAR và ứng dụng Java, cũng như tài liệu ở định dạng JavaDOC.

Việc lựa chọn phiên bản môi trường nào chỉ phụ thuộc vào sở thích của lập trình viên, nói chung, nên giữ cả CPython và Jython trên máy tính, vì chúng không xung đột với nhau mà bổ sung cho nhau. Môi trường CPython nhanh hơn vì không có lớp trung gian dưới dạng JVM; Ngoài ra, các phiên bản cập nhật của Python lần đầu tiên được phát hành dưới dạng môi trường CPython. Tuy nhiên, Jython có thể sử dụng bất kỳ lớp Java nào làm mô-đun mở rộng và chạy trên bất kỳ nền tảng nào có triển khai JVM.

Cả hai môi trường thời gian chạy đều được phát hành theo giấy phép tương thích với giấy phép GPL nổi tiếng, vì vậy chúng có thể được sử dụng để phát triển cả phần mềm thương mại và phần mềm miễn phí. Hầu hết các tiện ích mở rộng Python cũng được cấp phép GPL và có thể được sử dụng tự do trong bất kỳ dự án nào, nhưng cũng có những tiện ích mở rộng thương mại hoặc tiện ích mở rộng có giấy phép nghiêm ngặt hơn. Do đó, khi sử dụng Python trong một dự án thương mại, bạn cần biết những hạn chế nào tồn tại trong giấy phép plug-in tiện ích mở rộng.

Bắt đầu với Python

Trước khi bắt đầu sử dụng Python, bạn cần cài đặt môi trường thực thi của nó - trong bài viết này đây là CPython và theo đó là trình thông dịch python. Có nhiều phương pháp cài đặt khác nhau: người dùng có kinh nghiệm có thể tự biên dịch Python từ mã nguồn có sẵn công khai của nó, họ cũng có thể tải xuống các tệp thực thi được tạo sẵn cho một hệ điều hành cụ thể từ trang Web www.python.org, và cuối cùng, nhiều bản phân phối Linux cũng xuất hiện. với trình thông dịch Python được cài đặt sẵn. Bài viết này sử dụng phiên bản Windows của Python 2.x, nhưng các ví dụ được trình bày có thể chạy trên bất kỳ phiên bản Python nào.

Sau khi trình cài đặt đã triển khai các tệp thực thi Python vào thư mục được chỉ định, bạn cần kiểm tra giá trị của các biến hệ thống sau:

  • CON ĐƯỜNG. Biến này phải chứa đường dẫn đến thư mục cài đặt Python để hệ điều hành có thể tìm thấy nó.
  • PYTHONHOME. Biến này chỉ được chứa đường dẫn đến thư mục cài đặt Python. Thư mục này cũng phải chứa thư mục con lib sẽ được tìm kiếm các mô-đun Python tiêu chuẩn.
  • PYTHONPATH. Một biến có danh sách các thư mục chứa các mô-đun mở rộng sẽ được kết nối với Python (các thành phần trong danh sách phải được phân tách bằng dấu phân cách hệ thống).
  • PYTHONKHỞI ĐỘNG. Một biến tùy chọn chỉ định đường dẫn đến tập lệnh Python sẽ được thực thi mỗi khi bắt đầu phiên thông dịch Python tương tác.

Dòng lệnh để làm việc với trình thông dịch có cấu trúc như sau.

PYTHONHOME\python (tùy chọn) [ lệnh -c | tập lệnh | - ] (tranh luận)

Chế độ tương tác Python

Nếu bạn khởi động trình thông dịch mà không chỉ định tệp lệnh hoặc tập lệnh, nó sẽ khởi động ở chế độ tương tác. Trong chế độ này, một shell Python đặc biệt được khởi chạy để có thể nhập các lệnh hoặc biểu thức riêng lẻ và giá trị của chúng sẽ được tính ngay lập tức. Điều này rất thuận tiện khi học Python, vì bạn có thể kiểm tra ngay tính chính xác của một cấu trúc cụ thể.

Giá trị của biểu thức được đánh giá được lưu trữ trong một biến đặc biệt gọi là Dấu gạch dưới đơn (_) để có thể sử dụng nó trong các biểu thức tiếp theo. Bạn có thể kết thúc phiên tương tác bằng phím tắt Ctrl–Z trên Windows hoặc Ctrl–D trên Linux.

Tùy chọn là các giá trị chuỗi tùy chọn có thể thay đổi hành vi của trình thông dịch trong một phiên; tầm quan trọng của chúng sẽ được thảo luận trong bài viết này và các bài viết tiếp theo. Các tùy chọn chỉ định một lệnh cụ thể sẽ được trình thông dịch thực thi hoặc đường dẫn đến tệp chứa tập lệnh sẽ được thực thi. Điều đáng lưu ý là một lệnh có thể bao gồm một số biểu thức, được phân tách bằng dấu chấm phẩy và phải được đặt trong dấu ngoặc kép để hệ điều hành có thể chuyển nó tới trình thông dịch một cách chính xác. Đối số là những tham số được chuyển để xử lý tiếp theo thành tập lệnh thực thi; chúng được truyền vào chương trình dưới dạng chuỗi và được phân tách bằng dấu cách.

Để xác minh rằng Python đã được cài đặt chính xác và hoạt động bình thường, bạn có thể chạy các lệnh sau:

c:\>python-v
c:\> python –c “thời gian nhập; in time.asctime()”

Tùy chọn -v in phiên bản triển khai Python đang được sử dụng và thoát, trong khi lệnh thứ hai in giá trị thời gian hệ thống ra màn hình.

Bạn có thể viết tập lệnh Python trong bất kỳ trình soạn thảo văn bản nào vì chúng là các tệp văn bản thông thường, nhưng cũng có những môi trường phát triển đặc biệt được thiết kế để hoạt động với Python.

Cơ bản về cú pháp Python

Các tập lệnh mã nguồn Python bao gồm cái gọi là chuỗi logic, mỗi cái lần lượt bao gồm dòng vật lý. Ký hiệu # được sử dụng để biểu thị các bình luận. Trình thông dịch bỏ qua các nhận xét và dòng trống.

Sau đây là một khía cạnh rất quan trọng có vẻ lạ đối với các lập trình viên học Python như ngôn ngữ lập trình thứ hai. Thực tế là trong Python không có ký hiệu nào chịu trách nhiệm phân tách các biểu thức với nhau trong mã nguồn, chẳng hạn như dấu chấm phẩy (;) trong C++ hoặc Java. Dấu chấm phẩy cho phép bạn phân tách nhiều lệnh nếu chúng nằm trên cùng một dòng vật lý. Cũng không có cấu trúc nào như dấu ngoặc nhọn (), cho phép bạn kết hợp một nhóm lệnh thành một khối duy nhất.

Các dòng vật lý được phân tách bằng chính ký tự cuối dòng, nhưng nếu biểu thức quá dài cho một dòng thì hai dòng vật lý có thể được kết hợp thành một dòng logic. Để thực hiện việc này, bạn cần nhập ký tự dấu gạch chéo ngược (\) ở cuối dòng đầu tiên, sau đó trình thông dịch sẽ hiểu dòng tiếp theo là phần tiếp theo của dòng đầu tiên, tuy nhiên, không thể có các ký tự khác trên đó. dòng đầu tiên sau ký tự \, ví dụ: nhận xét có #. Chỉ thụt lề được sử dụng để làm nổi bật các khối mã. Các dòng logic có cùng kích thước thụt đầu dòng tạo thành một khối và khối kết thúc khi một dòng logic có kích thước thụt đầu dòng nhỏ hơn xuất hiện. Đây là lý do tại sao dòng đầu tiên của tập lệnh Python không được thụt lề. Nắm vững những quy tắc đơn giản này sẽ giúp bạn tránh được hầu hết những sai lầm liên quan đến việc học một ngôn ngữ mới.

Không có sự khác biệt cơ bản nào khác về cú pháp Python so với các ngôn ngữ lập trình khác. Có một bộ toán tử và từ khóa tiêu chuẩn, hầu hết trong số đó đã quen thuộc với các lập trình viên, trong khi những bộ dành riêng cho Python sẽ được đề cập trong bài viết này và các bài viết tiếp theo. Các quy tắc tiêu chuẩn cũng được sử dụng để chỉ định mã định danh của biến, phương thức và lớp - tên phải bắt đầu bằng dấu gạch dưới hoặc ký tự Latinh trong mọi trường hợp và không được chứa các ký tự @, $, %. Ngoài ra, chỉ một ký tự gạch dưới không thể được sử dụng làm mã định danh (xem chú thích cuối trang nói về chế độ hoạt động tương tác).

Các kiểu dữ liệu được sử dụng trong Python

Các kiểu dữ liệu được sử dụng trong Python cũng giống như các ngôn ngữ khác - kiểu dữ liệu số nguyên và số thực; Ngoài ra, kiểu dữ liệu phức tạp được hỗ trợ - với phần thực và phần ảo (ví dụ về số đó là 1,5J hoặc 2j, trong đó J là căn bậc hai của -1). Python hỗ trợ các chuỗi có thể được đặt trong dấu ngoặc đơn, dấu ngoặc kép hoặc dấu ngoặc kép và các chuỗi, như Java, là các đối tượng bất biến, tức là. không thể thay đổi giá trị của chúng sau khi tạo.

Python cũng có kiểu dữ liệu logic bool với hai tùy chọn giá trị – Đúng và Sai. Tuy nhiên, trong các phiên bản cũ hơn của Python không có kiểu dữ liệu như vậy và hơn nữa, bất kỳ kiểu dữ liệu nào cũng có thể được chuyển thành giá trị boolean Đúng hoặc Sai. Tất cả các số khác 0 và chuỗi hoặc tập hợp dữ liệu không trống đều được coi là Đúng, còn các giá trị trống và 0 được coi là Sai. Tính năng này đã được giữ nguyên trong các phiên bản Python mới, tuy nhiên, để tăng khả năng đọc mã, nên sử dụng kiểu bool cho các biến boolean. Đồng thời, nếu bạn cần duy trì khả năng tương thích ngược với các triển khai Python cũ hơn, thì bạn nên sử dụng 1 (Đúng) hoặc 0 (Sai) làm biến boolean.

Chức năng làm việc với tập dữ liệu

Python định nghĩa ba loại bộ sưu tập để lưu trữ tập dữ liệu:

  • tuple (tuple);
  • danh sách(danh sách);
  • từ điển.

Tuple là một chuỗi dữ liệu có thứ tự bất biến. Nó có thể chứa các phần tử thuộc nhiều loại khác nhau, chẳng hạn như các bộ dữ liệu khác. Một bộ dữ liệu được xác định trong dấu ngoặc đơn và các phần tử của nó được phân tách bằng dấu phẩy. Một hàm dựng sẵn đặc biệt, tuple(), cho phép bạn tạo các bộ dữ liệu từ một chuỗi dữ liệu nhất định.

Danh sách là một chuỗi các phần tử có thứ tự, có thể thay đổi. Các thành phần trong danh sách cũng được phân tách bằng dấu phẩy nhưng được chỉ định trong dấu ngoặc vuông. Để tạo danh sách, hàm list() được đề xuất.

Từ điển là một bảng băm lưu trữ một phần tử cùng với khóa định danh của nó. Việc truy cập tiếp theo vào các phần tử cũng được thực hiện bằng khóa, do đó đơn vị lưu trữ trong từ điển là một cặp khóa-đối tượng và một đối tượng giá trị liên quan. Từ điển là một bộ sưu tập có thể thay đổi nhưng không có thứ tự, do đó thứ tự của các thành phần trong từ điển có thể thay đổi theo thời gian. Từ điển được chỉ định trong dấu ngoặc nhọn, khóa được phân tách khỏi giá trị bằng dấu hai chấm và bản thân các cặp khóa/giá trị được phân tách bằng dấu phẩy. Hàm dict() có sẵn để tạo từ điển.

Liệt kê 1 cho thấy các ví dụ về các bộ sưu tập khác nhau có sẵn trong Python.

Liệt kê 1. Các loại bộ sưu tập có sẵn trong Python
('w','o','r','l','d') # bộ năm phần tử (2.62,) # bộ gồm một phần tử [“test”,"me"] # danh sách hai phần tử # danh sách trống ( 5:'a', 6:'b', 7:'c' ) # từ điển gồm ba phần tử với khóa kiểu int

Xác định hàm trong Python

Mặc dù Python hỗ trợ OOP nhưng nhiều tính năng của nó được triển khai dưới dạng các hàm riêng biệt; Ngoài ra, các mô-đun mở rộng thường được tạo dưới dạng thư viện các hàm. Các hàm cũng được sử dụng trong các lớp, nơi chúng thường được gọi là các phương thức.

Cú pháp xác định hàm trong Python cực kỳ đơn giản; có tính đến các yêu cầu trên:

def FUNCTION_NAME(tham số): biểu thức số 1 biểu thức số 2 ...

Như bạn có thể thấy, cần phải sử dụng hàm từ def, dấu hai chấm và thụt lề. Việc gọi hàm cũng rất đơn giản:

FUNCTION_NAME(tham số)

Chỉ có một số điều cụ thể về Python cần xem xét. Giống như trong Java, các giá trị nguyên thủy được truyền theo giá trị (một bản sao của tham số được truyền cho hàm và nó không thể thay đổi giá trị được đặt trước khi hàm được gọi) và các kiểu đối tượng phức tạp được truyền bằng tham chiếu (một tham chiếu được truyền được truyền vào hàm và nó có thể thay đổi đối tượng).

Các tham số có thể được truyền đơn giản bằng cách liệt kê thứ tự hoặc theo tên; trong trường hợp này, bạn không cần chỉ định khi gọi các tham số có giá trị mặc định mà chỉ truyền các tham số được yêu cầu hoặc thay đổi thứ tự của các tham số khi gọi hàm :

#function thực hiện phép chia số nguyên - sử dụng toán tử // def foo(delimoe, delitel): return delimoe // delitel print chia(50,5) # kết quả của công việc: 10 print chia(delitel=5, delimoe=50) # kết quả hoạt động: 10

Hàm trong Python phải trả về một giá trị - điều này được thực hiện rõ ràng bằng câu lệnh trả về theo sau là giá trị trả về hoặc, trong trường hợp không có câu lệnh trả về, hằng số Không được trả về khi đến cuối hàm. Như bạn có thể thấy từ các khai báo hàm ví dụ, trong Python không cần chỉ định liệu một cái gì đó có được trả về từ một hàm hay không, nhưng nếu một hàm có một câu lệnh return trả về một giá trị thì các câu lệnh return khác trong hàm đó phải trả về các giá trị và nếu giá trị đó không có thì bạn phải chỉ định rõ ràng return None.

Nếu hàm rất đơn giản và bao gồm một dòng thì nó có thể được xác định ngay khi sử dụng; trong Python, cấu trúc như vậy được gọi là hàm lambda. Hàm lambda là một hàm ẩn danh (không có tên riêng), phần thân của hàm là câu lệnh trả về trả về giá trị của một số biểu thức. Cách tiếp cận này có thể thuận tiện trong một số trường hợp, nhưng cần lưu ý rằng việc sử dụng lại các chức năng đó là không thể (“nó được sinh ra ở đâu, nó có ích”).

Cũng cần mô tả thái độ của Python đối với việc sử dụng đệ quy. Theo mặc định, độ sâu đệ quy được giới hạn ở 1000 cấp độ và khi vượt qua mức này, một ngoại lệ sẽ xuất hiện và chương trình sẽ ngừng chạy. Tuy nhiên, nếu cần thiết, giá trị của giới hạn này có thể được thay đổi.

Các hàm trong Python có các tính năng thú vị khác, chẳng hạn như tài liệu và khả năng xác định các hàm lồng nhau, nhưng những tính năng này sẽ được khám phá trong các bài viết sau của loạt bài với các ví dụ phức tạp hơn.

Xin chào tất cả mọi người!

Cú pháp dễ đọc, dễ học, ngôn ngữ cấp cao, ngôn ngữ lập trình hướng đối tượng (OOP), chế độ tương tác mạnh mẽ, nhiều thư viện. Nhiều lợi ích khác... Và tất cả điều này chỉ bằng một ngôn ngữ.
Đầu tiên, chúng ta hãy đi sâu vào các khả năng và tìm hiểu xem Python có thể làm được những gì?

Tại sao tôi cần Python của bạn?

Nhiều lập trình viên mới hỏi những câu hỏi tương tự. Giống như mua một chiếc điện thoại, hãy cho tôi biết tại sao tôi nên mua chiếc điện thoại này mà không phải chiếc điện thoại này?
Chất lượng phần mềm
Đối với nhiều người, bao gồm cả tôi, ưu điểm chính là cú pháp dễ đọc. Không có nhiều ngôn ngữ có thể tự hào về nó. Mã Python dễ đọc hơn, điều đó có nghĩa là việc sử dụng lại và duy trì nó dễ dàng hơn nhiều so với việc sử dụng mã bằng các ngôn ngữ kịch bản lệnh khác. Python chứa các cơ chế hiện đại nhất để sử dụng lại mã chương trình, đó là OOP.
Thư viện hỗ trợ
Python đi kèm với một số lượng lớn chức năng được biên dịch và di động được gọi là thư viện chuẩn. Thư viện này cung cấp cho bạn rất nhiều tính năng được yêu cầu trong các chương trình ứng dụng, từ tìm kiếm văn bản theo mẫu đến các chức năng mạng. Python có thể được mở rộng bởi cả thư viện của riêng bạn và thư viện do các nhà phát triển khác tạo ra.
Tính di động của chương trình
Hầu hết các chương trình Python chạy không thay đổi trên tất cả các nền tảng chính. Việc chuyển mã chương trình từ Linux sang Windows chỉ đơn giản là sao chép các tệp chương trình từ máy này sang máy khác. Python cũng mang đến cho bạn rất nhiều cơ hội để tạo giao diện đồ họa di động.
Tốc độ phát triển
So với các ngôn ngữ được biên dịch hoặc gõ mạnh như C, C++ hoặc Java, Python tăng năng suất của nhà phát triển lên nhiều lần. Mã Python thường có kích thước bằng 1/3 hoặc thậm chí 1/5 kích thước của mã C++ hoặc Java tương đương, nghĩa là gõ ít hơn, ít thời gian gỡ lỗi hơn và ít nỗ lực bảo trì hơn. Ngoài ra, các chương trình Python chạy ngay lập tức mà không cần thực hiện các bước biên dịch và liên kết tốn thời gian như một số ngôn ngữ lập trình khác, giúp tăng thêm năng suất của lập trình viên.

Python được sử dụng ở đâu?

  • Google sử dụng Python trong công cụ tìm kiếm của mình và trả tiền cho người tạo ra Python, Guido van Rossum.
  • Các công ty như Intel, Cisco, Hewlett-Packard, Seagate, Qualcomm và IBM sử dụng Python để kiểm tra phần cứng
  • Dịch vụ chia sẻ video của YouTube phần lớn được triển khai bằng Python
  • NSA sử dụng Python để mã hóa và phân tích thông tin tình báo
  • JPMorgan Chase, UBS, Getco và Citadel sử dụng Python để dự báo thị trường tài chính
  • Chương trình BitTorrent phổ biến để trao đổi tệp trên mạng ngang hàng được viết bằng Python
  • Khung web App Engine phổ biến của Google sử dụng Python làm ngôn ngữ lập trình ứng dụng
  • NASA, Los Alamos, JPL và Fermilab sử dụng Python cho tính toán khoa học.
và các công ty khác cũng sử dụng ngôn ngữ này.

Văn học

Vì vậy, chúng tôi đã hiểu rõ hơn về ngôn ngữ lập trình Python. Có thể nói riêng rằng ưu điểm của Python là nó có nhiều tài liệu chất lượng cao. Không phải mọi ngôn ngữ đều có thể tự hào về điều này. Ví dụ, ngôn ngữ lập trình JavaScript không thể làm hài lòng người dùng với nhiều tài liệu, mặc dù ngôn ngữ này thực sự tốt.

Dưới đây là những nguồn sẽ giúp bạn hiểu rõ hơn về Python và có thể trở thành Guido van Rossum trong tương lai.
* Một số nguồn có thể bằng tiếng Anh. Điều này không có gì đáng ngạc nhiên, hiện nay có rất nhiều tác phẩm văn học xuất sắc được viết bằng tiếng Anh. Và để tự lập trình bạn cần biết ít nhất kiến ​​thức cơ bản về tiếng Anh.

Tôi thực sự khuyên bạn nên đọc cuốn sách này trước - Mark Lutz. Học Python, tái bản lần thứ 4. Sách đã được dịch sang tiếng Nga nên đừng lo nếu bạn đột nhiên không biết tiếng Anh. Nhưng đây là phiên bản thứ tư.

Đối với những người biết tiếng Anh, bạn có thể đọc tài liệu trên trang web chính thức của Python. Mọi thứ đều được mô tả ở đó khá rõ ràng.

Và nếu bạn thích thông tin từ video thì tôi có thể giới thiệu các bài học từ Google, do Nick Parlante, một sinh viên đến từ Stanford, giảng dạy. Sáu video bài giảng trên YouTube. Nhưng có một giọt thuốc mỡ trong thùng thuốc mỡ... Anh ấy thực hiện nó bằng tiếng Anh với phụ đề tiếng Anh. Nhưng tôi hy vọng rằng điều này sẽ dừng lại một số.

Đọc sách nhưng không biết vận dụng kiến ​​thức thì phải làm sao?

Không hoảng loạn!
Tôi khuyên bạn nên đọc cuốn sách của Mark Lutz. Lập trình Python (Ấn bản thứ 4). Trước đây là “học”, nhưng ở đây là “Lập trình”. Trong phần “Học” - bạn có được kiến ​​thức về Python, trong phần “Lập trình” - Mark dạy bạn cách áp dụng nó vào các chương trình tương lai của bạn. Cuốn sách rất hữu ích. Và tôi nghĩ một cái là đủ cho bạn.

Tôi muốn luyện tập!

Một cách dễ dàng.
Ở trên tôi đã viết về các video bài giảng của Nick Parlante trên YouTube, nhưng họ cũng có một số video

Ngày xửa ngày xưa, trên một diễn đàn kín, tôi đã thử dạy Python. Nói chung, mọi thứ đã bị đình trệ ở đó. Tôi cảm thấy tiếc vì những bài học đã được viết ra và tôi quyết định đăng chúng ra công chúng. Cho đến nay là lần đầu tiên, đơn giản nhất. Những gì xảy ra tiếp theo sẽ thú vị hơn, nhưng có lẽ sẽ không thú vị. Nói chung bài này sẽ là bong bóng thử nghiệm, nếu bạn thích thì mình sẽ đăng tiếp.

Python cho người mới bắt đầu. Chương đầu tiên. "Chúng ta đang nói về điều gì vậy"

Đề phòng, một chút “truyền giáo” nhàm chán. Nếu bạn chán anh ấy, bạn có thể bỏ qua một vài đoạn văn.
Python (phát âm là "Python" chứ không phải "python") là một ngôn ngữ kịch bản được phát triển bởi Guido van Rossum như một ngôn ngữ đơn giản, dễ học cho người mới bắt đầu.
Ngày nay, Python là ngôn ngữ được sử dụng rộng rãi trong nhiều lĩnh vực:
- Phát triển phần mềm ứng dụng (ví dụ: tiện ích Linux yum, pirut, system-config-*, Gajim IM client và nhiều tiện ích khác)
- Phát triển các ứng dụng web (máy chủ ứng dụng mạnh nhất Zope và CMS Plone được phát triển trên cơ sở đó, chẳng hạn như trang web CIA vận hành và rất nhiều khuôn khổ để phát triển ứng dụng nhanh chóng Plones, Django, TurboGears và nhiều ứng dụng khác)
- Sử dụng làm ngôn ngữ kịch bản nhúng trong nhiều trò chơi và không chỉ (trong bộ văn phòng OpenOffice.org, trình soạn thảo Blender 3d, Postgre DBMS)
- Sử dụng trong tính toán khoa học (với gói SciPy và numPy để tính toán và PyPlot để vẽ đồ thị, Python gần như có thể so sánh được với các gói như MatLab)

Và tất nhiên, đây không phải là danh sách đầy đủ các dự án sử dụng ngôn ngữ tuyệt vời này.

1. Bản thân trình thông dịch, bạn có thể lấy nó ở đây (http://python.org/download/).
2. Môi trường phát triển. Không cần thiết phải bắt đầu và IDLE có trong bản phân phối phù hợp cho người mới bắt đầu, nhưng đối với các dự án nghiêm túc, bạn cần thứ gì đó nghiêm túc hơn.
Đối với Windows, tôi sử dụng PyScripter nhẹ tuyệt vời (http://tinyurl.com/5jc63t), dành cho Linux - Komodo IDE.

Mặc dù đối với bài học đầu tiên, chỉ cần lớp vỏ tương tác của Python là đủ.

Chỉ cần chạy python.exe. Dấu nhắc nhập liệu sẽ không mất nhiều thời gian để xuất hiện, nó trông như thế này:

Bạn cũng có thể viết chương trình vào các tệp có phần mở rộng py trong trình soạn thảo văn bản yêu thích của mình, phần mở rộng này không thêm các ký tự đánh dấu riêng vào văn bản (không có Word sẽ không hoạt động). Điều mong muốn là trình soạn thảo này có thể tạo các “tab thông minh” và không thay thế khoảng trắng bằng các tab.
Để khởi chạy các tệp để thực thi, bạn có thể nhấp đúp vào chúng. Nếu cửa sổ console đóng quá nhanh, hãy chèn dòng sau vào cuối chương trình:

Sau đó trình thông dịch sẽ đợi bạn nhấn enter khi kết thúc chương trình.

Hoặc liên kết các tệp py trong Far với Python và mở bằng cách nhấn enter.

Cuối cùng, bạn có thể sử dụng một trong nhiều IDE tiện lợi dành cho Python, cung cấp khả năng sửa lỗi, tô sáng cú pháp và nhiều “tiện ích” khác.

Một chút lý thuyết.

Để bắt đầu, Python là một ngôn ngữ được gõ động mạnh mẽ. Điều đó có nghĩa là gì?

Có những ngôn ngữ có kiểu gõ mạnh (pascal, java, c, v.v.), trong đó loại của biến được xác định trước và không thể thay đổi, và có những ngôn ngữ có kiểu gõ động (python, Ruby, vb ), trong đó loại biến được diễn giải tùy thuộc vào giá trị được gán.
Ngôn ngữ gõ động có thể chia thành 2 loại nữa. Loại nghiêm ngặt không cho phép chuyển đổi loại ẩn (Python) và loại lỏng lẻo thực hiện chuyển đổi loại ngầm (ví dụ: VB, trong đó bạn có thể dễ dàng thêm chuỗi "123" và số 456).
Sau khi xử lý xong việc phân loại của Python, chúng ta hãy thử “chơi” một chút với trình thông dịch.

>>> a = b = 1 >>> a, b (1, 1) >>> b = 2 >>> a, b (1, 2) >>> a, b = b, a >>> a , b (2, 1)

Vì vậy, chúng ta thấy phép gán được thực hiện bằng dấu =. Bạn có thể gán giá trị cho nhiều biến cùng một lúc. Khi bạn chỉ định tên biến cho trình thông dịch một cách tương tác, nó sẽ in giá trị của nó.

Điều tiếp theo bạn cần biết là cách xây dựng các đơn vị thuật toán cơ bản - các nhánh và vòng lặp. Để bắt đầu, cần có một chút trợ giúp. Python không có dấu phân cách đặc biệt cho các khối mã; thụt lề đóng vai trò của chúng. Nghĩa là, những gì được viết với cùng một vết lõm là một khối lệnh. Lúc đầu, điều này có vẻ lạ, nhưng sau một thời gian làm quen, bạn nhận ra rằng biện pháp “bắt buộc” này cho phép bạn có được mã rất dễ đọc.
Vậy điều kiện.

Điều kiện được chỉ định bằng câu lệnh if kết thúc bằng “:”. Các điều kiện thay thế sẽ được đáp ứng nếu lần kiểm tra đầu tiên không thành công được chỉ định bởi toán tử elif. Cuối cùng, else chỉ định một nhánh sẽ được thực thi nếu không có điều kiện nào được đáp ứng.
Lưu ý rằng sau khi gõ if, trình thông dịch sử dụng dấu nhắc "..." để cho biết rằng nó đang chờ nhập thêm. Để nói với anh ấy rằng chúng ta đã hoàn thành, chúng ta phải nhập một dòng trống.

(Ví dụ với các nhánh vì lý do nào đó đã phá vỡ đánh dấu trên trung tâm, mặc dù có sự thay đổi với thẻ trước và thẻ mã. Xin lỗi vì sự bất tiện này, tôi đã ném nó vào đây http://pastebin.com/f66af97ba, nếu ai đó cho tôi biết có chuyện gì, tôi sẽ rất biết ơn)

Chu kỳ.

Trường hợp đơn giản nhất của vòng lặp là vòng lặp while. Nó lấy một điều kiện làm tham số và được thực thi miễn là nó đúng.
Đây là một ví dụ nhỏ.

>>> x = 0 >>> trong khi x<=10: ... print x ... x += 1 ... 0 1 2 ........... 10

Xin lưu ý rằng vì cả print x và x+=1 đều được viết với cùng một mức thụt lề, nên chúng được coi là phần thân của vòng lặp (bạn có nhớ những gì tôi đã nói về các khối không? ;-)).

Loại vòng lặp thứ hai trong Python là vòng lặp for. Nó tương tự như vòng lặp foreach trong các ngôn ngữ khác. Cú pháp của nó đại khái như sau.

Đối với biến trong danh sách:
đội

Tất cả các giá trị từ danh sách sẽ lần lượt được gán cho biến (trên thực tế, không chỉ có một danh sách mà còn có bất kỳ trình vòng lặp nào khác, nhưng bây giờ chúng ta đừng lo lắng về điều đó).

Đây là một ví dụ đơn giản. Danh sách sẽ là một chuỗi, không gì khác hơn là một danh sách các ký tự.

>>> x = "Xin chào, Python!" >>> for char in x: ... print char ... H e l ........... !

Bằng cách này chúng ta có thể phân tách chuỗi thành các ký tự.
Phải làm gì nếu chúng ta cần một vòng lặp lặp lại một số lần nhất định? Rất đơn giản, chức năng phạm vi sẽ ra tay giải cứu.

Ở đầu vào nó lấy từ một đến ba tham số, ở đầu ra nó trả về một danh sách các số mà chúng ta có thể “đi qua” bằng toán tử for.

Dưới đây là một số ví dụ về việc sử dụng hàm phạm vi để giải thích vai trò của các tham số của nó.

>>> phạm vi (10) >>> phạm vi (2, 12) >>> phạm vi (2, 12, 3) >>> phạm vi (12, 2, -2)

Và một ví dụ nhỏ với một chu trình.

>>> cho x trong khoảng(10): ... print x ... 0 1 2..... 9

Đầu ra đầu vào

Điều cuối cùng bạn nên biết trước khi bắt đầu sử dụng Python một cách đầy đủ là cách thực hiện đầu vào-đầu ra trong đó.

Đối với đầu ra, lệnh print được sử dụng để in tất cả các đối số của nó ở dạng người có thể đọc được.

Đối với đầu vào bảng điều khiển, hàm raw_input(prompt) được sử dụng, hàm này hiển thị lời nhắc và chờ người dùng nhập, trả về giá trị mà người dùng đã nhập.

X = int(raw_input("Nhập một số:")) print "Bình phương của số này là ", x * x

Chú ý! Bất chấp sự tồn tại của hàm input() với hành động tương tự, bạn không nên sử dụng nó trong các chương trình vì trình thông dịch cố gắng thực thi các biểu thức cú pháp được nhập bằng cách sử dụng nó, đây là một lỗ hổng nghiêm trọng trong tính bảo mật của chương trình.

Buổi học đầu tiên thế là xong.

Bài tập về nhà.

1. Viết chương trình tính cạnh huyền của một tam giác vuông. Chiều dài của chân được yêu cầu từ người dùng.
2. Viết chương trình tìm nghiệm của phương trình bậc hai ở dạng tổng quát. Các hệ số được yêu cầu từ người dùng.
3. Viết chương trình hiển thị bảng nhân với số M. Bảng được biên dịch từ M * a, thành M * b, trong đó M, a, b được người dùng yêu cầu. Đầu ra phải được thực hiện trong một cột, một ví dụ trên mỗi dòng theo dạng sau (ví dụ):
5 x 4 = 20
5 x 5 = 25
Và như thế.

Cập nhật lần cuối: 24/01/2018

Python là ngôn ngữ lập trình cấp cao phổ biến được thiết kế để tạo nhiều loại ứng dụng khác nhau. Chúng bao gồm các ứng dụng web, trò chơi, chương trình máy tính để bàn và làm việc với cơ sở dữ liệu. Python đã trở nên khá phổ biến trong lĩnh vực học máy và nghiên cứu trí tuệ nhân tạo.

Ngôn ngữ Python được công bố lần đầu tiên vào năm 1991 bởi nhà phát triển người Hà Lan Guido Van Rossum. Kể từ đó, ngôn ngữ này đã trải qua một chặng đường phát triển dài. Năm 2000, phiên bản 2.0 được xuất bản và năm 2008, phiên bản 3.0. Bất chấp khoảng cách dường như lớn giữa các phiên bản, các phiên bản lật đổ vẫn liên tục được tung ra. Vì vậy, phiên bản hiện tại tại thời điểm viết tài liệu này là 3.7. Thông tin chi tiết hơn về tất cả các bản phát hành, phiên bản và thay đổi ngôn ngữ, cũng như bản thân trình thông dịch và các tiện ích cần thiết cho công việc cũng như các thông tin hữu ích khác có thể được tìm thấy trên trang web chính thức https://www.python.org/.

Các tính năng chính của ngôn ngữ lập trình Python:

Python là một ngôn ngữ lập trình rất đơn giản, nó có cú pháp ngắn gọn, đồng thời khá đơn giản và dễ hiểu. Theo đó, nó rất dễ học và trên thực tế đây là một trong những lý do tại sao nó là một trong những ngôn ngữ lập trình phổ biến nhất dành riêng cho việc học. Đặc biệt, năm 2014 nó được công nhận là ngôn ngữ lập trình phổ biến nhất để học tập tại Hoa Kỳ.

Python cũng phổ biến không chỉ trong lĩnh vực giáo dục mà còn trong việc viết các chương trình cụ thể, bao gồm cả các chương trình thương mại. Đây phần lớn là lý do tại sao nhiều thư viện đã được viết cho ngôn ngữ này mà chúng ta có thể sử dụng.

Ngoài ra, ngôn ngữ lập trình này có một cộng đồng rất lớn, trên Internet bạn có thể tìm thấy rất nhiều tài liệu và ví dụ hữu ích về ngôn ngữ này và nhận được sự trợ giúp có trình độ từ các chuyên gia.

Để tạo chương trình bằng Python, chúng ta cần một trình thông dịch. Để cài đặt nó, hãy truy cập trang web https://www.python.org/ và trên trang chính trong phần Tải xuống, chúng ta sẽ tìm thấy liên kết để tải xuống phiên bản mới nhất của ngôn ngữ (hiện tại là 3.7.2):

Hãy theo liên kết đến trang mô tả phiên bản mới nhất của ngôn ngữ. Ở gần phía dưới hơn, bạn có thể tìm thấy danh sách các bản phân phối cho các hệ điều hành khác nhau. Hãy chọn gói chúng tôi cần và tải xuống. Ví dụ trường hợp của mình là Windows 64-bit nên mình chọn link gói Trình cài đặt thực thi Windows x86-64. Sau khi tải xuống bản phân phối, hãy cài đặt nó.

Theo đó, đối với MacOS bạn có thể lựa chọn trình cài đặt macOS 64-bit.

Trên hệ điều hành Windows, khi bạn khởi động trình cài đặt, cửa sổ trình hướng dẫn cài đặt sẽ mở ra:

Ở đây chúng ta có thể đặt đường dẫn nơi trình thông dịch sẽ được cài đặt. Hãy để nó như mặc định, nghĩa là C:\Users\[tên người dùng]\AppData\Local\Programs\Python\Python36\.

Ngoài ra, ở dưới cùng, hãy chọn hộp kiểm “Thêm Python 3.6 vào PATH” để thêm đường dẫn đến trình thông dịch vào các biến môi trường.

Sau khi cài đặt, chúng ta có thể tìm thấy các biểu tượng để truy cập các tiện ích Python khác nhau trong menu Bắt đầu trên HĐH Windows:

Ở đây tiện ích Python 3.7 (64-bit) cung cấp một trình thông dịch để chúng ta có thể chạy tập lệnh. Trong hệ thống tệp, tệp trình thông dịch có thể được tìm thấy dọc theo đường dẫn nơi quá trình cài đặt được thực hiện. Trên Windows đây là đường dẫn mặc định C:\Users\[tên người dùng]\AppData\Local\Programs\Python\Python37 và chính trình thông dịch đại diện cho tệp python.exe. Trên hệ điều hành Linux, quá trình cài đặt được thực hiện dọc theo đường dẫn /usr/local/bin/python3.7.

Hãy chuyển sang phần lý thuyết và thực hành và bắt đầu với định nghĩa phiên dịch viên là gì.

Thông dịch viên

Thông dịch viên là một chương trình thực thi các chương trình khác. Khi bạn viết một chương trình bằng Python, trình thông dịch sẽ đọc chương trình của bạn và thực hiện các hướng dẫn trong đó. Trong thực tế, trình thông dịch là một lớp logic chương trình giữa mã chương trình và phần cứng máy tính của bạn.

Tùy thuộc vào phiên bản Python bạn đang sử dụng, bản thân trình thông dịch có thể được triển khai dưới dạng chương trình C, dưới dạng một tập hợp các lớp Java hoặc dưới một số dạng khác, nhưng sẽ nói thêm về điều đó sau.

Chạy tập lệnh trong bảng điều khiển

Hãy chạy trình thông dịch trong bảng điều khiển:

Bây giờ nó đang chờ nhập lệnh, hãy nhập hướng dẫn sau vào đó:

In "xin chào thế giới!"

yay, chương trình đầu tiên của chúng tôi! :D

Chạy tập lệnh từ một tập tin

Tạo một tệp "test.py", với nội dung:

# print "hello world" print "hello world" # in 2 lũy thừa 10 in 2 ** 10

và thực thi tập tin này:

# python /path/to/test.py

Biên dịch động và mã byte

Sau khi bạn chạy tập lệnh, trước tiên nó sẽ biên dịch nguồn tập lệnh thành mã byte cho máy ảo. biên soạn chỉ đơn giản là một bước dịch và mã byte là sự thể hiện cấp độ thấp, độc lập với nền tảng của văn bản nguồn của chương trình. Python dịch từng lệnh trong mã nguồn tập lệnh thành các nhóm hướng dẫn mã byte để cải thiện tốc độ thực thi chương trình vì mã byte thực thi nhanh hơn nhiều. Sau khi biên dịch thành mã byte, một tệp có phần mở rộng ".pyc" bên cạnh văn bản script gốc.

Lần tiếp theo bạn chạy chương trình, trình thông dịch sẽ bỏ qua giai đoạn biên dịch và tạo ra một tệp đã biên dịch có phần mở rộng ".pyc" để thực thi. Tuy nhiên, nếu bạn thay đổi nguồn của chương trình, bước biên dịch sang mã byte sẽ xảy ra lần nữa vì Python tự động theo dõi ngày sửa đổi của tệp mã nguồn.

Nếu Python không thể ghi tệp mã byte, chẳng hạn như do thiếu quyền ghi vào đĩa, thì chương trình sẽ không bị ảnh hưởng, mã byte sẽ chỉ được thu thập trong bộ nhớ và bị xóa khỏi đó khi chương trình thoát.

Máy ảo Python (PVM)

Sau khi quá trình biên dịch diễn ra, mã byte được chuyển tới một cơ chế gọi là máy ảo, sẽ thực thi các hướng dẫn từ mã byte. Máy ảo là một cơ chế thời gian chạy, nó luôn hiện diện trong hệ thống Python và là một thành phần cực đoan của hệ thống được gọi là “Trình thông dịch Python”.

Để củng cố những gì chúng ta đã học, hãy làm rõ tình huống một lần nữa: quá trình biên dịch thành mã byte được thực hiện tự động và PVM chỉ là một phần của hệ thống Python mà bạn đã cài đặt cùng với trình thông dịch và trình biên dịch. Mọi thứ diễn ra một cách minh bạch với người lập trình và bạn không phải thực hiện các thao tác này một cách thủ công.

Hiệu suất

Các lập trình viên có kinh nghiệm về các ngôn ngữ như C và C++ có thể nhận thấy một số khác biệt trong mô hình thực thi của Python. Đầu tiên là không có bước build hay gọi tiện ích "make", chương trình Python có thể chạy ngay sau khi viết mã nguồn. Điểm khác biệt thứ hai là mã byte không phải là mã máy nhị phân (ví dụ: hướng dẫn cho bộ vi xử lý Intel), nó là biểu diễn bên trong của chương trình Python.

Vì những lý do này, các chương trình trong Python không thể thực thi nhanh như trong C/C++. Các hướng dẫn được truyền qua bởi hệ thống ảo chứ không phải bộ vi xử lý và để thực thi mã byte yêu cầu diễn giải bổ sung, các hướng dẫn này mất nhiều thời gian hơn hướng dẫn máy của bộ vi xử lý.

Tuy nhiên, mặt khác, không giống như các trình thông dịch truyền thống, chẳng hạn như trong PHP, có một giai đoạn biên dịch bổ sung - trình thông dịch không cần phải phân tích văn bản nguồn của chương trình mỗi lần.

Kết quả là hiệu năng của Python nằm giữa các ngôn ngữ lập trình biên dịch truyền thống và ngôn ngữ lập trình phiên dịch truyền thống.

Triển khai Python thay thế

Những gì đã nói ở trên về trình biên dịch và máy ảo là điển hình cho việc triển khai Python tiêu chuẩn, cái gọi là CPython (triển khai trong ANSI C). Tuy nhiên, cũng có những triển khai thay thế như Jython và IronPython, sẽ được thảo luận ngay bây giờ.

Đây là cách triển khai Python tiêu chuẩn và nguyên bản, được đặt tên như vậy vì nó được viết bằng ANSI C. Đây là những gì chúng tôi đã cài đặt khi chọn gói Python hoạt động hoặc được cài đặt từ BSD miễn phí cổng. Vì đây là một triển khai tham khảo nên nhìn chung hoạt động nhanh hơn, ổn định hơn và tốt hơn hơn các triển khai thay thế.

Jython

Tên gốc JPython, mục đích chính - tích hợp chặt chẽ với ngôn ngữ lập trình Java. Việc triển khai Jython bao gồm các lớp Java biên dịch mã Python thành mã byte Java và sau đó truyền mã byte kết quả Máy ảo Java (JVM).

Mục tiêu của Jython là cho phép các chương trình Python kiểm soát các ứng dụng Java, giống như CPython có thể kiểm soát các thành phần C/C++. Việc triển khai này có sự tích hợp liền mạch với Java. Vì mã Python được dịch sang mã byte Java nên nó hoạt động chính xác như một chương trình Java thực trong thời gian chạy. Các chương trình Jython có thể hoạt động như các applet và servlet, tạo giao diện đồ họa bằng cơ chế Java, v.v. Hơn nữa, Jython còn cung cấp hỗ trợ cho khả năng nhập và sử dụng các lớp Java trong mã Python.

Tuy nhiên, do việc triển khai Jython chậm hơn và kém mạnh mẽ hơn CPython nên các nhà phát triển Java cần một ngôn ngữ kịch bản lệnh làm giao diện cho mã Java rất quan tâm.

Việc triển khai được thiết kế để cung cấp khả năng tích hợp các chương trình Python với các ứng dụng được xây dựng để chạy trên Microsoft .NET Framework của hệ điều hành Windows, cũng như Mono, mã nguồn mở tương đương với Linux. .NET framework và thời gian chạy C# được thiết kế để cho phép khả năng tương tác giữa các đối tượng phần mềm—bất kể ngôn ngữ lập trình được sử dụng—theo tinh thần của mô hình COM trước đó của Microsoft.

IronPython cho phép các chương trình Python hoạt động như cả thành phần máy khách và máy chủ có thể truy cập được từ các ngôn ngữ lập trình .NET khác. Bởi vì việc phát triển được thực hiện bởi Microsoft, người ta sẽ mong đợi sự tối ưu hóa hiệu suất đáng kể từ IronPython, cùng với những thứ khác.

Công cụ tối ưu hóa tốc độ thực thi

Có các triển khai khác, bao gồm trình biên dịch động Tâm thần và trình dịch Shedskin C++, cố gắng tối ưu hóa mô hình thực thi cơ bản.

Trình biên dịch động Psyco

Hệ thống tâm lý là thành phần mở rộng mô hình thực thi mã byte, cho phép các chương trình chạy nhanh hơn. Tâm thần là một phần mở rộng PVM, thu thập và sử dụng thông tin loại để dịch các phần mã byte của chương trình thành mã máy nhị phân thực sự, thực thi nhanh hơn nhiều. Bản dịch này không yêu cầu thay đổi mã nguồn hoặc biên dịch bổ sung trong quá trình phát triển.

Trong quá trình thực hiện chương trình, Psyco thu thập thông tin về các loại đối tượng và thông tin này sau đó được sử dụng để tạo mã máy hiệu quả cao được tối ưu hóa cho loại đối tượng đó. Mã máy được tạo ra sau đó sẽ thay thế các phần mã byte tương ứng, từ đó tăng tốc độ thực thi.

Lý tưởng nhất là một số phần của mã chương trình dưới sự kiểm soát của Psyco có thể chạy nhanh như mã C đã biên dịch.

Psyco cung cấp tốc độ tăng từ 2 đến 100 lần, nhưng thường là 4 lần, khi sử dụng trình thông dịch Python chưa sửa đổi. Nhược điểm duy nhất của Psyco là hiện tại nó chỉ có khả năng tạo mã máy cho kiến ​​trúc Intel x86.

Psyco không đạt tiêu chuẩn; nó phải được tải xuống và cài đặt riêng. Ngoài ra còn có một dự án PyPy, đại diện cho một nỗ lực để viết lại PVMđể tối ưu hóa mã như trong Tâm thần, dự án PyPy sẽ hấp thụ nhiều hơn của dự án Tâm thần.

Trình dịch Shedskin C++

Lột da là một hệ thống chuyển đổi mã nguồn Python thành mã nguồn C++, sau đó có thể được biên dịch thành mã máy. Ngoài ra, hệ thống còn triển khai cách tiếp cận độc lập với nền tảng để thực thi mã Python.

Mã nhị phân đông lạnh

Đôi khi bạn cần tạo các tệp thực thi độc lập từ các chương trình Python của mình. Điều này là cần thiết cho việc đóng gói và phân phối các chương trình.

Các tệp nhị phân cố định kết hợp mã byte, PVM của chương trình và các tệp hỗ trợ mà chương trình cần vào một tệp gói duy nhất. Kết quả là một tệp thực thi duy nhất, chẳng hạn như tệp có phần mở rộng ".exe" dành cho Windows.

Ngày nay có ba công cụ chính để tạo "các tệp nhị phân bị đóng băng":

  • py2exe- nó có thể tạo các chương trình độc lập cho Windows sử dụng thư viện Tkinter, PMW, wxPython và PyGTK để tạo giao diện đồ họa, các chương trình sử dụng phần mềm tạo trò chơi PyGame, chương trình máy khách win32com và nhiều chương trình khác;
  • Trình cài đặt Py- giống py2exe, nhưng cũng chạy trên Linux và UNIX và có khả năng tạo các tệp thực thi tự cài đặt;
  • đông cứng- phiên bản gốc.

Bạn cần tải xuống các công cụ này riêng biệt với Python, chúng miễn phí.

Các tệp nhị phân cố định khá lớn vì chúng chứa PVM, nhưng theo tiêu chuẩn hiện đại, chúng vẫn không lớn bất thường. Vì trình thông dịch Python được tích hợp trực tiếp vào các tệp nhị phân cố định nên không cần phải cài đặt nó để chạy các chương trình ở đầu nhận.

Bản tóm tắt

Đó là tất cả cho ngày hôm nay, trong bài viết tiếp theo, tôi sẽ nói về các kiểu dữ liệu tiêu chuẩn trong Python và trong các bài viết tiếp theo, chúng ta sẽ xem xét từng loại riêng biệt, cũng như các hàm và toán tử để làm việc với các kiểu này.