Tại sao nên sử dụng kiểu gõ tĩnh trong Python?

Một ngôn ngữ được coi là ngôn ngữ được nhập động nếu loại biến của ngôn ngữ đó được kiểm tra trong thời gian chạy của quá trình biên dịch mã hoặc diễn giải mã. Trong các loại ngôn ngữ lập trình như vậy, chúng ta không cần khởi tạo một biến với kiểu của nó. Chúng ta có thể khai báo một biến bằng cách viết tên ở bên trái và giá trị ở bên trái của tên biến, Ex Var = 90. Một số ngôn ngữ gõ động là

Vì việc cấp phát bộ nhớ và kiểm tra biến được thực hiện trong thời gian chạy mã, nên các loại ngôn ngữ này không được coi là kém tối ưu hơn so với ngôn ngữ được nhập tĩnh

Chương trình Giáo dục Kỹ thuật (EngEd) này được hỗ trợ bởi Mục. Triển khai tức thì các container trên nhiều nhà cung cấp đám mây trên toàn cầu

Dùng thử miễn phí

Nhập tĩnh trong Python

8 Tháng Ba, 2021
  • chủ đề
  • ngôn ngữ

Python là một ngôn ngữ được gõ động. Người ta không cần phải chỉ ra rõ ràng kiểu dữ liệu và kiểu trả về của các biến và hàm của bạn, tương ứng. Dynamic typing làm cho Python rất thân thiện với người dùng. Tuy nhiên, gõ động không có tài liệu xác minh trình biên dịch và có thể dẫn đến lỗi thời gian chạy khó sửa. Gõ tĩnh cung cấp một giải pháp cho những vấn đề này

Trong bài viết này sẽ giới thiệu cách thực hiện gõ tĩnh trong Python và xử lý cả chú thích biến và hàm. Bạn sẽ cần có hiểu biết cơ bản về Python để theo dõi. Bạn cũng sẽ cần cài đặt mypy để kiểm tra loại

Mục lục

  1. Giới thiệu về loại chú thích
  2. Chú thích biến
  3. Chú thích chức năng
  4. Các chú thích được chọn trong mô-đun
    Output 1: John Doe
    
    7 của Python
    • Có thể gọi
    • Danh sách
    • Dict & Bất kỳ
    • liên hiệp
  5. Sử dụng trình kiểm tra kiểu tĩnh mypy

1. Giới thiệu về loại chú thích

Chú thích loại là một tính năng mới được PEP 484 thêm vào Python phiên bản 3. 5 trở lên. Chúng đưa ra các gợi ý cho trình đọc mã về kiểu trả về của biến hoặc hàm. Chú thích loại cũng có thể được thực hiện trên các biến và hàm

2. Chú thích biến

Chúng tôi đạt được chú thích biến bằng cách thêm dấu chấm phẩy và loại sau khi khai báo hoặc khởi tạo một biến. Tôi. e

Output 1: John Doe
8. Giống như trong ví dụ bên dưới, thay vì nói
Output 1: John Doe
9, chúng tôi chỉ định loại trả về bằng cách viết
def square(x: int) -> int:
    return x * x
print(square(6))
0. Người ta có thể tìm thấy đầu ra của mã này

name: str = "John Doe"
print("Output 1: "+ str(name))

Đầu ra có thể được tìm thấy

Output 1: John Doe

Bạn sẽ nhận thấy rằng đầu ra giống như

Output 1: John Doe
9. Tuy nhiên, chúng ta sẽ tìm hiểu lý do tại sao cái sau được khuyến nghị

3. Chú thích chức năng

Điều này đạt được bằng cách thêm một mũi tên chuyển tiếp biểu thị kiểu trả về dự kiến ​​của tham số hàm sau dấu ngoặc đóng của tham số hàm. Tôi. e

def square(x: int) -> int:
    return x * x
print(square(6))
2

def square(x: int) -> int:
    return x * x
print(square(6))

Đầu ra có thể được tìm thấy là Đầu ra. 2

36

4. Các chú thích được chọn trong mô-đun 'Đánh máy' của Python

Ở đây chúng ta sẽ xem xét một số chú thích được sử dụng phổ biến nhất trong mô-đun Python Typing

4. 1. Có thể gọi

Chúng tôi sử dụng Callable khi một chức năng là đối số của một chức năng khác. Đoạn mã dưới đây trình bày cách sử dụng

def square(x: int) -> int:
    return x * x
print(square(6))
3, chúng tôi đang viết một hàm để gọi hàm
def square(x: int) -> int:
    return x * x
print(square(6))
4 cho mọi thành viên của danh sách

from typing import Callable, List
# The square integers
def square(x: int) -> int:
    return x*x
# implementing callable. square() function passed as an argument
def square_list_members(get_square: Callable, list: List) -> List[int]:
    return [get_square(num) for num in list]
# print output
print(square_list_members(square, range(10,20)))

đầu ra

[100, 121, 144, 169, 196, 225, 256, 289, 324, 361]

Bạn có thể xác nhận đầu ra là đầu ra 3

4. 2. Danh sách

def square(x: int) -> int:
    return x * x
print(square(6))
5 thông báo cho trình kiểm tra loại rằng các số là một danh sách nếu các số nguyên.
def square(x: int) -> int:
    return x * x
print(square(6))
6 chỉ ra rằng hàm trả về một danh sách các số nguyên

Đầu ra mã là một danh sách các số chẵn từ 100 đến 120. là đầu ra là

def square(x: int) -> int:
    return x * x
print(square(6))
7

# List as a varible
numbers: List[int] = []
# List as a return type of a function
from typing import List
def even_numbers(numbers: List[int]) -> List[int]:
    # list compression
    numbers = [number for number in numbers if number % 2 == 0]
    # return even numbers in the list arguments
    return numbers
print(even_numbers(range(100, 150)))

[100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120]

4. 3. Dict & bất kỳ

from typing import Callable, Dict, Any
# The square integers
def square(x: int) -> int:
    return x*x
# implementing  Dict, the key can be of any type
def square_dictionary_values(get_square: Callable, dictionary: Dict[Any, int]) -> Dict[Any, int]:
    return {key: get_square(value) for key, value in dictionary.items()}
# print output
print(square_dictionary_values(square, {'one':1, 'two': 2, 'three':3, 'four': 4, 'five': 5}))

Bạn có thể tìm thấy đầu ra là

def square(x: int) -> int:
    return x * x
print(square(6))
8

{'one': 1, 'two': 4, 'three': 9, 'four': 16, 'five': 25} 

Trình kiểm tra loại coi

def square(x: int) -> int:
    return x * x
print(square(6))
9 là tương thích với bất kỳ loại dữ liệu nào. Chúng tôi có thể thực hiện bất kỳ thao tác hoặc lệnh gọi phương thức nào trên
def square(x: int) -> int:
    return x * x
print(square(6))
9

4. 4. liên hiệp

Union được sử dụng khi một hàm có nhiều hơn một kiểu trả về. Chẳng hạn, chúng ta có thể sử dụng

36
1 để sửa đổi hàm
def square(x: int) -> int:
    return x * x
print(square(6))
4 của mình để tìm bình phương của cả
36
3 và
36
4

Output 1: John Doe
0

Sản lượng đầu ra là

36
5

Output 1: John Doe
1

5. Sử dụng trình kiểm tra kiểu tĩnh mypy

Đây là nơi chúng ta sẽ hiểu sự liên quan của việc gõ tĩnh

Đầu tiên, chúng tôi cài đặt

36
6

Output 1: John Doe
2

Chúng tôi sẽ kiểm tra loại bằng cách sử dụng chức năng

def square(x: int) -> int:
    return x * x
print(square(6))
4 của chúng tôi. Khi chúng ta thay đổi giá trị trả về của hàm thành chuỗi
36
8

Output 1: John Doe
3

Chương trình xuất ra một chuỗi

36
8 mặc dù chúng tôi mong đợi số nguyên hoặc số float. Bạn sẽ nhận thấy rằng chương trình này đã chạy thành công mà không có lỗi

Hãy sử dụng

36
6 để nhập mã kiểm tra lỗi. Để kiểm tra một đoạn mã bằng mypy, hãy chạy
from typing import Callable, List
# The square integers
def square(x: int) -> int:
    return x*x
# implementing callable. square() function passed as an argument
def square_list_members(get_square: Callable, list: List) -> List[int]:
    return [get_square(num) for num in list]
# print output
print(square_list_members(square, range(10,20)))
1 trong thư mục mã của bạn

Chạy mã và kiểm tra đầu ra trong thiết bị đầu cuối sau

đầu ra

Output 1: John Doe
4

Khi chúng tôi sửa lỗi bằng cách xác định kiểu trả về hợp lệ của các biến và hàm,

36
6 đưa ra kết quả thành công cho thấy chương trình đã vượt qua kiểm tra kiểu thành công như được hiển thị

Output 1: John Doe
5

đầu ra

Output 1: John Doe
6

Như bạn có thể thấy, với kiểu gõ tĩnh, chúng ta có thể sử dụng trình kiểm tra kiểu để xác định lỗi trong mã của mình

5. Phần kết luận

Gõ gợi ý là một tính năng hữu ích trong Python. Nó giúp bạn xác định lỗi và duy trì một hồ sơ rõ ràng. Trong hướng dẫn này, bạn đã học những kiến ​​thức cơ bản về cách sử dụng gợi ý loại và cách thêm chúng vào mã bằng cách sử dụng chú thích

Bạn cũng đã có phần giới thiệu về cách sử dụng mypy làm trình kiểm tra kiểu tĩnh. Bạn có thể tiếp tục và tìm hiểu sâu hơn về PEP 484 và tài liệu Mypy để biết thêm thông tin

Gõ tĩnh trong Python có làm cho nó nhanh hơn không?

Đó là lý do tại sao ngôn ngữ được nhập tĩnh thường nhanh hơn nhưng dài dòng hơn . Với PEP 3107 và PEP 484, chúng ta có thể sử dụng chú thích kiểu trong Python để chú thích kiểu dữ liệu. Tuy nhiên, Python sẽ vẫn là một ngôn ngữ động. Vai trò của các loại gợi ý là giúp bạn viết mã rõ ràng và mạnh mẽ.

Python có sử dụng kiểu gõ tĩnh không?

Python là một ngôn ngữ được gõ động. Người ta không cần phải chỉ ra rõ ràng kiểu dữ liệu và kiểu trả về của các biến và hàm của bạn, tương ứng. Dynamic typing làm cho Python rất thân thiện với người dùng

Khi nào bạn sẽ sử dụng một ngôn ngữ gõ tĩnh?

Một ngôn ngữ lập trình được cho là sử dụng kiểu gõ tĩnh khi việc kiểm tra kiểu được thực hiện trong thời gian biên dịch chứ không phải trong thời gian chạy . Trong kiểu gõ tĩnh, các loại được liên kết với các biến không phải giá trị.

Cái nào được gõ tĩnh hoặc gõ động tốt hơn?

Có hai điểm khác biệt chính giữa gõ động và gõ tĩnh mà bạn nên biết khi viết tập lệnh chuyển đổi. Đầu tiên, các ngôn ngữ được nhập động thực hiện kiểm tra kiểu khi chạy, trong khi các ngôn ngữ được nhập tĩnh thực hiện kiểm tra kiểu tại thời điểm biên dịch .