Python (ngôn ngữ lập trình)

Dễ học, dễ đọc

Python được thiết kế để trở thành một ngôn ngữ dễ học, mã nguồn dễ đọc, bố cục trực quan, dễ hiểu, thể hiện qua các điểm sau:

Khối lệnh

Trong các ngôn ngữ khác, khối lệnh thường được đánh dấu bằng cặp ký hiệu hoặc từ khóa. Ví dụ, trong C/C++, cặp ngoặc nhọn { } được dùng để bao bọc một khối lệnh. Python, trái lại, có một cách rất đặc biệt để tạo khối lệnh, đó là thụt các câu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh cha chứa nó. Ví dụ, giả sử có đoạn mã sau trong C/C++:
 1 #include <math.h> 2 //... 3 delta = b * b – 4 * a * c; 4 if (delta > 0) 5 { 6     // Khối lệnh mới bắt đầu từ ký tự { đến } 7     x1 = (- b + sqrt(delta)) / (2 * a); 8     x2 = (- b - sqrt(delta)) / (2 * a); 9     printf("Phuong trinh co hai nghiem phan biet:\n");10     printf("x1 = %f; x2 = %f", x1, x2);11 }
Đoạn mã trên có thể được viết lại bằng Python như sau:
1 import math2 #...3 delta = b * b – 4 * a * c4 if delta > 0:5     # Khối lệnh mới, thụt vào đầu dòng6     x1 = (- b + math.sqrt(delta)) / (2 * a)7     x2 = (- b – math.sqrt(delta)) / (2 * a)8     print "Phuong trinh co hai nghiem phan biet:"9     print "x1 = ", x1, "; ", "x2 = ", x2
Ta có thể sử dụng dấu tab hoặc khoảng trống để thụt các câu lệnh vào.

Khả năng mở rộng

Python có thể được mở rộng: nếu ta biết sử dụng C, ta có thể dễ dàng viết và tích hợp vào Python nhiều hàm tùy theo nhu cầu. Các hàm này sẽ trở thành hàm xây dựng sẵn (built-in) của Python. Ta cũng có thể mở rộng chức năng của trình thông dịch, hoặc liên kết các chương trình Python với các thư viện chỉ ở dạng nhị phân (như các thư viện đồ họa do nhà sản xuất thiết bị cung cấp). Hơn thế nữa, ta cũng có thể liên kết trình thông dịch của Python với các ứng dụng viết từ C và sử dụng nó như là một mở rộng hoặc một ngôn ngữ dòng lệnh phụ trợ cho ứng dụng đó.

Trình thông dịch

Python là một ngôn ngữ lập trình dạng thông dịch, do đó có ưu điểm tiết kiệm thời gian phát triển ứng dụng vì không cần phải thực hiện biên dịch và liên kết. Trình thông dịch có thể được sử dụng để chạy file script, hoặc cũng có thể được sử dụng theo cách tương tác. Ở chế độ tương tác, trình thông dịch Python tương tự shell của các hệ điều hành họ Unix, tại đó, ta có thể nhập vào từng biểu thức rồi gõ Enter, và kết quả thực thi sẽ được hiển thị ngay lập tức. Đặc điểm này rất hữu ích cho người mới học, giúp họ nghiên cứu tính năng của ngôn ngữ; hoặc để các lập trình viên chạy thử mã lệnh trong suốt quá trình phát triển phần mềm. Ngoài ra, cũng có thể tận dụng đặc điểm này để thực hiện các phép tính như với máy tính bỏ túi.

Module

Python cho phép chia chương trình thành các module để có thể sử dụng lại trong các chương trình khác. Nó cũng cung cấp sẵn một tập hợp các modules chuẩn mà lập trình viên có thể sử dụng lại trong chương trình của họ. Các module này cung cấp nhiều chức năng hữu ích, như các hàm truy xuất tập tin, các lời gọi hệ thống, trợ giúp lập trình mạng (socket),…

Multiple paradigms (đa biến hóa)

Python là một ngôn ngữ đa biến hóa (multiple paradigms). Có nghĩa là, thay vì ép buộc mọi người phải sử dụng duy nhất một phương pháp lập trình, Python lại cho phép sử dụng nhiều phương pháp lập trình khác nhau: hướng đối tượng, có cấu trúc, chức năng, hoặc chỉ hướng đến một khía cạnh. Python kiểu kiểu động và sử dụng bộ thu gom rác để quản lý bộ nhớ. Một đặc điểm quan trọng nữa của Python là giải pháp tên động, kết nối tên biến và tên phương thức lại với nhau trong suốt thực thi của chương trình.

Cú pháp

Sau đây là cú pháp cơ bản nhất của ngôn ngữ Python:

Khối lệnh

Khác với đa số ngôn ngữ họ C sử dụng cặp ngoặc ngọn { } để phân chia khối lệnh, Python sử dụng lùi đầu dòng (indentation) như dấu cách hay tab để biểu thị khối lệnh. Các lệnh nằm cùng mức lùi đầu dòng sẽ cùng thuộc một khối. Để biểu thị một khối rỗng Python có từ khoá "pass".

Toán tử

+ - * /  // (phép chia số nguyên)  % (chia lấy dư)  ** (lũy thừa)
~ (not)  & (and)  | (or)  ^ (xor)
<< (left shift)  >> (right shift)
== (bằng)  <=  >=    != (khác)
Python sử dụng ký pháp trung tố thường gặp trong các ngôn ngữ lập trình khác.

Lệnh gán

1 tên biến = biểu thức2 x = 23.83 y = -x ** 24 z1 = z2 = x + y5 loiChao = "Hello!"6 7 i += 1    # tăng biến i thêm 1 đơn vị

In giá trị

1 print biểu thức2 print (7 + 8) / 2.03 print (2 + 3j) * (4 - 6j)
Nội suy chuỗi (string interpolation)
1 print "Hello %s" %("world!")2 print "i = %d" %i3 print "a = %.2f and b = %.3f" %(a,b)

Cấu trúc lặp

1 while biểu_thức_đúng:2     # lệnh...
1 for phần_tử in dãy:2     # lệnh...
1 L = ["Ha Noi", "Hai Phong", "TP Ho Chi Minh"]2 for thanhPho in L:3     print thanhPho4 5 for i in range(10):6     print i

Hàm

1 def tên_hàm (tham_biến_1, tham_biến_2, tham_biến_n):2     # lệnh...3     return giá_trị_hàm
1 def binhPhuong(x):2     return x*x
Hàm với tham số mặc định:
1 def luyThua(x, n=2):2    """Lũy thừa với số mũ mặc định là 2"""3    return x**n4 5 print luyThua(3)   # 96 print luyThua(2,3) # 8

Lớp

1 class Tên_Lớp_1: 2     #... 3  4 class Tên_Lớp_2(Tên_Lớp_1): 5     """Lớp 2 kế thừa lớp 1""" 6     x = 3  # biến thành viên của lớp 7     # 8     def phương_thức(self, tham_biến): 9         #...10 11 # khởi tạo12 a = Tên_Lớp_2()13 print a.x14 print a.phương_thức(m)  # m là giá trị gán cho tham biến

List Comprehension

List Comprehension là dạng cú pháp đặc biệt (syntactic sugar) (mới có từ Python 2.x) cho phép thao tác trên toàn bộ dãy (list) mà không cần viết rõ vòng lặp. Chẳng hạn y là một dãy mà mỗi phần tử của nó bằng bình phương của từng phần tử trong dãy x:
y = [xi**2 for xi in x]

Xử lý ngoại lệ

try:
    câu_lệnhexcept Loại_Lỗi:
    thông báo lỗi

Tốc độ thực hiện

Là một ngôn ngữ thông dịch, Python có tốc độ thực hiện chậm hơn nhiều lần so với các ngôn ngữ biên dịch như Fortran, C,... Trong số các ngôn ngữ thông dịch, Python được đánh giá nhanh hơn Ruby và Tcl, nhưng chậm hơn Lua.

Các đặc điểm mới trong Python 3.x

Nội dung phần này được trích từ tài liệu của Guido van Rossum. Phần này không liệt kê đầy đủ tất cả các đặc điểm; chi tiết xin xem tài liệu nói trên.