Tại sao python được gọi là ngôn ngữ được gõ động và mạnh mẽ?

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 danh mục đối tượng mà nó có thể làm việc và cách các danh mục đó đượ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]

2 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]

2, nó sẽ tăng giá trị
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

4 vì bạn không thể cộng một số nguyên và một chuỗi trong Python

Trong 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]

5 trả về loại đối tượng

Nhậ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]

3

public 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]

1

Nế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]

3

Dò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]

6

Python sẽ luôn là một ngôn ngữ được gõ động. 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

Dưới đây là một số tài nguyên về bpython, công cụ REPL[Read–Eval–Print Loop] được sử dụng trong các video này

  • Một REPL Python tốt hơn. bpython so với trăn
  • Trang chủ bpython
  • tài liệu bpython

00. 00 Trong video này, tôi sẽ so sánh gõ động và gõ tĩnh. Khi nói về các hệ thống loại, bạn sẽ thường xuyên nghe thấy sự so sánh giữa động và tĩnh. Python là một ngôn ngữ được gõ động

00. 12 Trình thông dịch Python chỉ kiểm tra kiểu khi mã chạy. Khi bạn thực thi một dòng mã, như bạn sẽ thấy trong ví dụ tiếp theo, đó là lúc quá trình kiểm tra kiểu xảy ra

00. 23 Ngoài ra, loại biến được phép thay đổi trong suốt thời gian tồn tại của nó. Hãy để tôi cho bạn thấy cả hai trông như thế nào. Đối với các ví dụ mà tôi đang chạy Python trong REPL, tôi sẽ sử dụng một thay thế REPL được gọi là bpython

00. 37 Vì vậy, thay vì gõ

public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
1 hoặc
public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
2 và lấy REPL tiêu chuẩn để bạn có thể gõ lệnh, tôi sẽ gõ
public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
3

00. 47 Tôi có một liên kết ở cuối video này để chỉ cho bạn cách cài đặt nó nếu bạn muốn sử dụng nó

00. 56 Đối với kiểu nhập động, nếu bạn đã tạo một câu lệnh như thế này,

public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
4
public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
5, số nguyên
public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
5, cộng với [
public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
7] chuỗi văn bản
public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
8, chỉ cần lưu ý rằng dòng này sẽ không bao giờ chạy, vì vậy sẽ không có
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

4 nào được nâng lên

01. 14 Nhưng câu lệnh

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

10 này sẽ, và nếu tôi cộng hai số nguyên lại với nhau, thì
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

11,

01. 21 khi bạn nhấn Enter đủ số lần, bạn sẽ xuống và bạn sẽ thấy rằng nó đã cộng chúng lại với nhau một cách chính xác và cho bạn số nguyên là

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

12. Điều gì sẽ xảy ra nếu bạn chỉ cố chạy dòng này một mình,
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

2?

01. 33 Cái này sẽ được kiểm tra kiểu

01. 38 Và bạn có thể thấy ở đây, nó đã tạo ra

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

4 đó, nếu bạn định sử dụng toán tử
public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
7 ở đó, thì một
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

16 và một
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

17 [chuỗi] là các loại toán hạng không được hỗ trợ

01. 47 Vì vậy, những cái đó không tương thích. Bạn không thể sử dụng toán tử

public class HelloTypes {

    public static void main[String[] args] {

        String thing;
        thing = "Hello World";

        System.out.println[thing];
    }
}
7 giữa hai. Và trình thông dịch Python chỉ ném ngoại lệ đó của
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

4 khi mã được chạy

01. 59 Hãy kiểm tra xem các biến có thể thay đổi loại không. Chúng ta sẽ bắt đầu với một đối tượng có tên là

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

8 bằng với
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

31. Được rồi, vậy
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

8 là gì?

02. 09 Bạn có thể sử dụng hàm có sẵn

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

5 và nhập đối tượng
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

8. Và điều đó sẽ nói rằng đó là loại
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

17. Chà, sau này, nếu bạn đột nhiên nói trong chương trình Python của mình
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

36, thì bây giờ
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

8 là gì?

02. 29 Vì vậy, khi bạn chạy lệnh gán của

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

36, trình thông dịch Python sẽ thay đổi loại cho
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

8 thành
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

39 một cách linh hoạt

02. 42 Trong trường hợp gõ tĩnh, mọi thứ rất khác. Trên thực tế, việc kiểm tra kiểu tĩnh sẽ đượ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, kiểu kiểm tra đó được thực hiện khi chương trình được biên dịch, trước khi chương trình thực sự có thể chạy. Vì vậy, có thêm một bước biên dịch mà tôi sẽ chỉ cho bạn

03. 04 Loại biến không được phép thay đổi trong suốt thời gian tồn tại của nó. Nó sẽ được sửa như nó được xác định. Bây giờ, có những trường hợp ngoại lệ mà tôi không muốn đi sâu vào, nơi bạn có thể chuyển một biến thành các loại khác nhau tùy thuộc vào loại ngôn ngữ, nhưng nói chung, loại biến không được phép thay đổi so với loại của nó.

03. 25 Hãy nhìn vào đó. Để tôi chỉ cho bạn một ví dụ nhanh từ một ngôn ngữ được gõ tĩnh. Hãy xem xét điều đơn giản này “Xin chào, Thế giới. ” chương trình trong Java. Ở đây, bạn đang tạo một biến có tên là

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

8, và ở đây bạn đang gán tĩnh cho nó một loại
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

2, và ở đây, bạn đang gán giá trị của một chuỗi văn bản thực tế. Để có thể chạy cái này,

03. 52 Tôi sẽ nói

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

4, đó là lệnh biên dịch tệp này
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

66

04. 01 Tại thời điểm đó, sau khi được biên dịch, nếu không có lỗi, nó sẽ quay lại và chỉ cho chúng tôi ở đây. Trong trình duyệt của tôi, bạn sẽ thấy rằng nó thực sự đã thay đổi

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

66 và biên dịch nó thành
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

68

04. 14 Bây giờ đây không phải là hướng dẫn về Java, tôi chỉ muốn cho bạn thấy rằng tệp đó không tồn tại trước đây và được tạo bằng cách chạy lệnh này. Để chạy chương trình, tôi thực sự có thể nói

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

69,

04. 31 và có chương trình đơn giản của tôi đã chạy. Được chứ. Điều gì sẽ xảy ra nếu bạn, trong mã, thay đổi nó để nói, "Chà, thực ra bây giờ là

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

20," thay đổi nó thành
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

16, gán nó giống như bạn làm trong Python. Chà, tôi phải biên dịch lại

04. 49 Vì vậy, tôi đã cứu. Bây giờ tôi đã lưu, để biên dịch—

>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

22. Tại thời điểm biên dịch đó, nó ghi là
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

23 và cho kết quả là
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

24. Vì vậy, nó thậm chí sẽ không biên dịch chương trình thành phiên bản
>>> thing = "Hello"
>>> type[thing]


>>> thing = 28.1
>>> type[thing]

5 của nó

05. 09 Python sẽ luôn là ngôn ngữ kiểu động. Tôi sẽ bao gồm một số liên kết bên dưới văn bản này cho thấy lý do đằng sau điều này. Và với những thay đổi gần đây, nếu bạn muốn có một số tính năng của ngôn ngữ được nhập tĩnh, bạn có thể sử dụng chúng bên trong Python ngay bây giờ với các tính năng như gợi ý kiểu và khả năng kiểm tra kiểu

05. 29 PEP 484 đã giới thiệu các gợi ý về loại—bạn có thể xem liên kết bên dưới video này—và sau đó có các công cụ bổ sung để thực hiện kiểm tra loại tĩnh bằng cách sử dụng các gợi ý đó. Bạn sẽ có cơ hội thử chúng nhiều hơn trong khóa học này. Trong video tiếp theo, bạn sẽ khám phá cách gõ vịt

Tại sao Python là ngôn ngữ động và được gõ mạnh?

Python vừa là ngôn ngữ được gõ mạnh vừa là ngôn ngữ được gõ động. Gõ mạnh có nghĩa là các biến có một loại và loại đó quan trọng khi thực hiện các thao tác trên một biến. Nhập động có nghĩa là loại biến chỉ được xác định trong thời gian chạy

Ngôn ngữ được gõ động trong Python là gì?

Python là 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ó .

Ngôn ngữ nào được gọi là ngôn ngữ kiểu động?

JavaScript, Python, Ruby, Perl , v.v. là những ví dụ về ngôn ngữ kiểu động. Ví dụ. Ví dụ này chứng minh JavaScript là ngôn ngữ được gõ động. HTML.

Tại sao Python được gọi là ngôn ngữ gõ lỏng lẻo?

Một ngôn ngữ lập trình được nhập lỏng lẻo hoặc nhập yếu, khi nó không yêu cầu đặc điểm kỹ thuật rõ ràng của các loại đối tượng và biến khác nhau . Các quy tắc gõ "lỏng lẻo" trong các ngôn ngữ lập trình được gõ yếu có thể tạo ra kết quả sai hoặc không thể đoán trước. Nó có thể thực hiện các chuyển đổi kiểu ẩn trong thời gian chạy.

Chủ Đề