Trong bài học này, bạn sẽ tìm hiểu về hệ thống kiểu, so sánh kiểu gõ động và kiểu gõ tĩnh. Tất cả các ngôn ngữ lập trình bao gồm một số loại hệ thống loại chính thức hóa các loại đối tượng mà nó có thể làm việc và cách các loại đó được xử lý
Nhập động
Python là một ngôn ngữ được gõ động. Điều này có nghĩa là trình thông dịch Python chỉ kiểm tra kiểu khi mã chạy và kiểu của một biến được phép thay đổi trong suốt thời gian tồn tại của nó. Dưới đây là một vài ví dụ chứng minh những ý tưởng đó
>>>
>>> if False:
.. 1 + "two" # This line never runs, so no TypeError is raised
.. else:
.. 1 + 2
...
3
>>> 1 + "two" # Now this is type checked
TypeError: unsupported operand type[s] for +: 'int' and 'str'
Trong ví dụ đầu tiên, nhánh
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
7 không bao giờ chạy, vì vậy nó không bao giờ được kiểm tra loại. Ví dụ thứ hai cho thấy rằng khi đánh giá >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
7, nó sẽ tăng giá trị >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
9 vì bạn không thể cộng một số nguyên và một chuỗi trong PythonTrong ví dụ tiếp theo này, bạn xem liệu các biến có thể thay đổi loại không
>>>
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
0 trả về loại đối tượngNhập tĩnh
Ngược lại với gõ động là gõ tĩnh. Kiểm tra loại tĩnh được thực hiện mà không cần chạy chương trình. Trong hầu hết các ngôn ngữ được nhập tĩnh, chẳng hạn như C và Java, điều này được thực hiện khi chương trình của bạn được biên dịch. Loại biến không được phép thay đổi trong suốt thời gian tồn tại của nó
Trong ví dụ về
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
0 trong Java này, hãy xem phần ở giữa, trong đó >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
1 được định nghĩa tĩnh là một loại >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
2 và sau đó được gán giá trị >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
3public class HelloTypes {
public static void main[String[] args] {
String thing;
thing = "Hello World";
System.out.println[thing];
}
}
Đây không phải là khóa học về Java, vì vậy đừng lo lắng về các chi tiết cụ thể về cách tạo mã Java. Mục đích của ví dụ này là để cho bạn thấy rằng có nhiều bước bổ sung trong hầu hết các ngôn ngữ được nhập tĩnh
Trong ví dụ tiếp theo này, bạn sẽ sử dụng lệnh
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
4 để biên dịch chương trình. Thao tác này tạo một tệp mới có cùng tên, nhưng có phần mở rộng khác là >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
5 thay vì >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
6. Đó là tệp có thể chạy bằng lệnh >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
7>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
1Nếu bạn cố gắng gán lại
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
8 cho một giá trị thuộc loại khác, ban đầu bạn sẽ không gặp lỗi. Chỉ khi mã được biên dịch, bạn mới thấy lỗi>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
3Dòng
>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
9 đang cố thay đổi kiểu của >>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
8 từ chuỗi thành kiểu int. Nếu bạn biên dịch mã này, bạn sẽ thấy lỗi>>> thing = "Hello"
>>> type[thing]
>>> thing = 28.1
>>> type[thing]
6Python sẽ luôn. Tuy nhiên, PEP 484 đã giới thiệu các gợi ý về kiểu, cho phép thực hiện kiểm tra kiểu tĩnh của mã Python