Hướng dẫn can python be statically typed? - python có thể được nhập tĩnh không?

Nhập gợi ý, chú thích thay đổi và kiểm tra loại thời gian chạy - mọi thứ bạn cần biết.

Python là một ngôn ngữ được đánh máy động - tôi chắc chắn bạn biết điều đó. Điều này làm cho nó dễ dàng và thú vị cho người mới bắt đầu, vì ở đó, không cần phải nghĩ về các loại dữ liệu. Tuy nhiên, gõ tĩnh có một số lợi ích. Hôm nay chúng tôi sẽ khám phá cách làm Python được đánh máy tĩnh nhất có thể.

Vì vậy, những gì mà thỏa thuận với các ngôn ngữ được đánh máy động? Tóm lại, điều đó có nghĩa là không có bộ biên dịch mã nào, vì vậy trình thông dịch Python thực hiện kiểm tra loại khi mã chạy. Do đó, các loại biến được phép thay đổi trong toàn bộ ứng dụng.

Nghe có vẻ như là một lợi thế, nhưng nó có thể dẫn đến các lỗi kỳ lạ và khó theo dõi khi cơ sở mã trở nên lớn hơn.

Mặt khác, các ngôn ngữ được gõ tĩnh thực hiện kiểm tra loại khi biên dịch (nghĩ C hoặc Java). Hơn nữa, họ cung cấp cho bạn một số cảm giác an toàn, vì bạn có thể ngay lập tức cho biết loại tham số đi vào từng hàm.

Chỉ là một từ chối trách nhiệm nhanh trước khi chúng ta bắt đầu - Python sẽ luôn là một ngôn ngữ được đánh máy động. Không có gì bạn có thể làm để làm cho nó tĩnh như Java hoặc C. Pep 484 đã giới thiệu các gợi ý loại, vì vậy chúng tôi sẽ phải làm việc với điều đó.disclaimer before we start — Python will always be a dynamically typed language. There’s nothing you can do to make it static as Java or C. PEP 484 introduced type hints, so we’ll have to work with that.

Bài viết được cấu trúc như sau:

  • Loại gợi ý
  • Chú thích biến
  • Biểu thị các loại dữ liệu nâng cao hơn
  • Buộc kiểm soát loại khi chạy
  • Sự kết luận

Loại gợi ý

Chú thích biến

Biểu thị các loại dữ liệu nâng cao hơn

def sum_numbers(a, b):
return a + b
print(sum_numbers(10, 5))
print(sum_numbers(10.3, 5))
print(sum_numbers('Bob', 'Mark'))

Buộc kiểm soát loại khi chạy

  • Sự kết luận
  • Loại gợi ý chỉ là như vậy - gợi ý. Họ cho bạn thấy kiểu dữ liệu nào được mong đợi, nhưng không có gì ngăn cản bạn bỏ qua chúng. Sau đó, chúng tôi sẽ khám phá cách buộc kiểm tra loại bởi phiên dịch viên Python, nhưng trước tiên hãy để che đậy những điều cơ bản.

Hãy để làm một ví dụ mà không có gợi ý loại. Dưới đây là một hàm được thiết kế để thêm hai số và trả lại tổng. Python là Python, chúng tôi không phải chỉ định các loại dữ liệu cho các tham số cũng như giá trị trả về:

def sum_numbers(a: int, b: int) -> int:
    return a + b

print(sum_numbers(10, 5))
print(sum_numbers(10.3, 5))
print(sum_numbers('Bob', 'Mark'))

Các kết quả được in từ các cuộc gọi chức năng lần lượt là 15, 15.3 và Bobmark. Để giới thiệu các gợi ý loại, chúng tôi phải làm như sau:

Đối với các tham số - Đặt dấu hiệu ruột kết (:) ngay sau tên tham số và chỉ định kiểu dữ liệu sau

  • Đối với giá trị trả về - Đặt dấu hiệu mũi tên và kiểu dữ liệu ngay sau dấu ngoặc đơn
  • Tại đây, cách thêm gợi ý loại vào chức năng sum_numbers của chúng tôi:
  • Chức năng rõ ràng hơn một chút để xem xét bây giờ, nhưng chúng ta vẫn có thể vượt qua bất kỳ loại dữ liệu nào - chỉ ra rằng gợi ý chỉ là gợi ý, không phải là một nghĩa vụ.

Dưới đây là các khuyến nghị gợi ý loại, theo PEP 8:force type checks later.


Chú thích biến

Biểu thị các loại dữ liệu nâng cao hơn

Buộc kiểm soát loại khi chạy

name: str = 'Bob'
age: int = 32
rating: float = 7.9
is_premium: bool = True

Sự kết luận


Biểu thị các loại dữ liệu nâng cao hơn

Buộc kiểm soát loại khi chạy

Sự kết luận

Loại gợi ý chỉ là như vậy - gợi ý. Họ cho bạn thấy kiểu dữ liệu nào được mong đợi, nhưng không có gì ngăn cản bạn bỏ qua chúng. Sau đó, chúng tôi sẽ khám phá cách buộc kiểm tra loại bởi phiên dịch viên Python, nhưng trước tiên hãy để che đậy những điều cơ bản.

from typing import List, Dict

names: List[str] = ['Bob', 'Mark', 'Jack']
    
emails: Dict[str, str] = {
    'Bob': '',
    'Mark': '',
    'Jack': ''
}

Hãy để làm một ví dụ mà không có gợi ý loại. Dưới đây là một hàm được thiết kế để thêm hai số và trả lại tổng. Python là Python, chúng tôi không phải chỉ định các loại dữ liệu cho các tham số cũng như giá trị trả về:

def list_summation(lst: List[int]) -> int:
    return sum(lst)

Các kết quả được in từ các cuộc gọi chức năng lần lượt là 15, 15.3 và Bobmark. Để giới thiệu các gợi ý loại, chúng tôi phải làm như sau:


Buộc kiểm soát loại khi chạy

Sự kết luận

Loại gợi ý chỉ là như vậy - gợi ý. Họ cho bạn thấy kiểu dữ liệu nào được mong đợi, nhưng không có gì ngăn cản bạn bỏ qua chúng. Sau đó, chúng tôi sẽ khám phá cách buộc kiểm tra loại bởi phiên dịch viên Python, nhưng trước tiên hãy để che đậy những điều cơ bản.

Hãy để làm một ví dụ mà không có gợi ý loại. Dưới đây là một hàm được thiết kế để thêm hai số và trả lại tổng. Python là Python, chúng tôi không phải chỉ định các loại dữ liệu cho các tham số cũng như giá trị trả về:

def add_numbers(a: int, b: int) -> int:
    return a + b

print(add_numbers(10, 5))
print(add_numbers(10.3, 5))
print(add_numbers('Bob', 'Mark'))

Các kết quả được in từ các cuộc gọi chức năng lần lượt là 15, 15.3 và Bobmark. Để giới thiệu các gợi ý loại, chúng tôi phải làm như sau:

Hướng dẫn can python be statically typed? - python có thể được nhập tĩnh không?
Đối với các tham số - Đặt dấu hiệu ruột kết (:) ngay sau tên tham số và chỉ định kiểu dữ liệu sau

Đối với giá trị trả về - Đặt dấu hiệu mũi tên và kiểu dữ liệu ngay sau dấu ngoặc đơn

Hướng dẫn can python be statically typed? - python có thể được nhập tĩnh không?
Hình ảnh 2 - Thực thi với MyPy (hình ảnh của tác giả)

Như bạn có thể thấy, chương trình bị sập. Chỉ là hành vi chúng tôi muốn, vì hàm này mong đợi hai số nguyên, nhưng chúng tôi đã không cung cấp các loại dữ liệu đó trong các cuộc gọi chức năng.

Và đó là tất cả những gì bạn nên biết để bắt đầu. Hãy để bọc mọi thứ trong phần tiếp theo.


Chia tay từ

Hãy cùng kết thúc bài viết này với một vài ưu và nhược điểm của việc sử dụng gợi ý loại.

Pros:

  • Họ giúp ghi lại mã của bạn - không phải là sự thay thế cho các tài liệu
  • Họ giúp duy trì cơ sở mã sạch hơn - vì những lý do rõ ràng
  • Họ cải thiện khả năng lót của trình chỉnh sửa mã của bạn - ví dụ, Pycharm sẽ hiển thị cảnh báo nếu phát hiện không phù hợp loại

Cons:

  • Có thể tẻ nhạt để thêm - đặc biệt nếu bạn không quen với họ

Để kết luận - không cần phải gợi ý loại nhưng là thực tiễn tốt, đặc biệt là khi làm việc trên các cơ sở mã lớn - ngay cả khi bạn quyết định không sử dụng

def sum_numbers(a: int, b: int) -> int:
    return a + b

print(sum_numbers(10, 5))
print(sum_numbers(10.3, 5))
print(sum_numbers('Bob', 'Mark'))
2.

Suy nghĩ của bạn về gợi ý loại là gì? Bạn có luôn sử dụng chúng, hoặc chỉ khi cơ sở mã trở nên lớn hơn? Hãy cho tôi biết trong phần bình luận dưới đây.

Việc đánh máy tĩnh có làm cho Python nhanh hơn không?

Đó là lý do tại sao các ngôn ngữ được gõ tĩnh thường nhanh hơn, nhưng nhiều dòng hơn. Với PEP 3107 và PEP 484, chúng ta có thể sử dụng các chú thích loại trong Python để chú thích các loại dữ liệu. Tuy nhiên, Python sẽ vẫn là một ngôn ngữ năng động. Vai trò của gợi ý các loại là giúp bạn viết mã sạch và mạnh mẽ.statically typed languages are typically faster, but more verbose. With PEP 3107 and PEP 484, we can use type annotations in Python to annotate data types. However, Python will remain a dynamic language. The role of types hints is to help you write clean and robust code.

Các biến python là tĩnh hay động?

Python là một ngôn ngữ được đánh máy động, có nghĩa là kiểm tra biến được thực hiện trong thời gian chạy. Trong khi đó trong ngôn ngữ được đánh máy tĩnh, việc kiểm tra các biến hoặc bất kỳ ngôn ngữ nào khác được thực hiện tại thời điểm biên dịch.dynamically typed language which means checking of the variable is done at the runtime. Whereas in the Statically typed language the checking of the variables or any other is done at the compile time.

Tại sao Python được gõ động?

Các ngôn ngữ khác như C, C ++, Java, v.v., có một tuyên bố nghiêm ngặt các biến trước khi gán các giá trị cho chúng.Python không có bất kỳ vấn đề nào ngay cả khi chúng tôi không khai báo loại biến.Nó nói rằng loại biến trong thời gian chạy của chương trình.Vì vậy, Python là một ngôn ngữ được đánh máy động.

Những ngôn ngữ nào được gõ tĩnh?

Một ngôn ngữ được gõ tĩnh là ngôn ngữ (như Java, C hoặc C ++) trong đó các loại biến được biết đến tại thời điểm biên dịch.Trong hầu hết các ngôn ngữ này, các loại phải được chỉ định rõ ràng bởi lập trình viên;Trong các trường hợp khác (chẳng hạn như OCAML), kiểu suy luận cho phép lập trình viên không chỉ ra các loại biến của chúng.a language (such as Java, C, or C++) where variable types are known at compile time. In most of these languages, types must be expressly indicated by the programmer; in other cases (such as OCaml), type inference allows the programmer to not indicate their variable types.