Các bình luận được chú thích bằng Python như thế nào?

Kể từ đó, các tính năng đã xuất hiện và biến mất. Bối cảnh của gợi ý kiểu đã trải qua một số cuộc đại tu lớn — đặc biệt là với hai bản phát hành Python mới nhất — 3. 9 và (sắp tới) 3. 10

Trong bài viết này, chúng ta sẽ xem xét các tính năng này — và cách chúng ta áp dụng gợi ý loại cho mã của chính mình

Chú thích loại là gì?

Chú thích kiểu — còn được gọi là chữ ký kiểu — được sử dụng để chỉ ra kiểu dữ liệu của biến và đầu vào/đầu ra của hàm và phương thức

Trong nhiều ngôn ngữ, kiểu dữ liệu được nêu rõ ràng. Trong các ngôn ngữ này, nếu bạn không khai báo kiểu dữ liệu của mình — mã sẽ không chạy

Hãy lấy ví dụ về tập lệnh hello world trong C

#include<stdio.h>int main()
{
char hello[] = "hello world!";
printf("%s\n", hello);
return 0;
}

Ở đây chúng tôi đã xác định hai loại chữ ký, int

characters = 'am a'
character = 'I ' + characters + ' string'
0. Mã này biên dịch và chạy hoàn hảo. Nhưng điều gì sẽ xảy ra nếu chúng tôi xóa chữ ký
characters = 'am a'
character = 'I ' + characters + ' string'
0 của mình?

Việc thiếu chữ ký kiểu char ở định nghĩa biến sẽ khiến chúng ta gặp một thế giới đau đớn khi biên dịch

Mã của chúng tôi sẽ không hoạt động. C yêu cầu chúng tôi khai báo bất kỳ và tất cả các kiểu dữ liệu biến

Python dễ tha thứ hơn — chúng ta không cần xác định các loại tại bất kỳ thời điểm nào

Tĩnh vs Động

Có tên cho những cách tiếp cận này trong ngôn ngữ lập trình. C yêu cầu chúng tôi xác định rõ ràng các loại - đó là ngôn ngữ được nhập tĩnh

Mặt khác, Python, với cách tiếp cận gung-ho hơn đối với các phép gán biến, là một ngôn ngữ được gõ động

Làm thế nào để chúng ta xác định hai cách tiếp cận này?

  • Nhập tĩnh - thực hiện kiểm tra kiểu tại thời điểm biên dịch và yêu cầu khai báo kiểu dữ liệu
  • Nhập động - thực hiện kiểm tra kiểu khi chạy và không yêu cầu khai báo kiểu dữ liệu

Có những ưu và nhược điểm đối với cả hai cách tiếp cận, nhưng một điểm mạnh của các ngôn ngữ được nhập tĩnh (áp dụng cho chúng tôi) là nó làm cho mã rất rõ ràng. Để đưa ra hai ví dụ về lý do tại sao điều này là hữu ích

  1. Các kiểu dữ liệu được xác định rõ ràng trong mã, loại bỏ mọi sự mơ hồ về kiểu dữ liệu tiềm năng
  2. Ví dụ, các lỗi chính tả và lỗi nhỏ khi viết mã có thể dễ dàng xác định hơn
characters = 'am a'
character = 'I ' + characters + ' string'

Biến thứ hai phải là

characters = 'am a'
character = 'I ' + characters + ' string'
2 chứ không phải
characters = 'am a'
character = 'I ' + characters + ' string'
3. Trong ngôn ngữ được nhập tĩnh, lỗi đánh máy này sẽ gây ra lỗi - nhưng đối với ngôn ngữ được nhập động thì không.

Mặt khác, mã được nhập tĩnh được nhiều người xem là quá dài dòng. Làm cho mã phức tạp hơn để đọc và viết

Trong thực tế, không có mô hình nào tốt hơn hay xấu hơn mô hình kia. Họ có điểm mạnh và điểm yếu riêng

Bây giờ là đủ cho các chú thích kiểu chung, còn chú thích kiểu Python thì sao?

Chú thích loại của Python

Loại chú thích trong Python không phải là tạo hoặc phá vỡ như trong ví dụ C của chúng tôi. Chúng là các đoạn cú pháp tùy chọn mà chúng ta có thể thêm vào để làm cho mã của chúng ta rõ ràng hơn

Chú thích loại sai sẽ không làm gì khác hơn là làm nổi bật chú thích không chính xác trong trình chỉnh sửa mã của chúng tôi — không có lỗi nào phát sinh do chú thích

Vì vậy, nếu chú thích loại không được thực thi, tại sao lại sử dụng chúng?

Chà, như chúng ta đã đề cập - việc khai báo các kiểu làm cho mã của chúng ta rõ ràng hơn và nếu được thực hiện tốt, sẽ dễ đọc hơn - cho cả chúng ta và những người khác

Những thứ cơ bản

Từ Python 3. 9 chúng tôi đã có thể định nghĩa các kiểu dữ liệu như vậy

Khá mát mẻ phải không?

Sau đó, chúng tôi đã xác định một hàm đơn giản và khai báo các kiểu dữ liệu dự kiến ​​của hai đối số đầu vào

characters = 'am a'
character = 'I ' + characters + ' string'
6 và
characters = 'am a'
character = 'I ' + characters + ' string'
7 — và thậm chí cả kiểu dữ liệu mà hàm trả về với
characters = 'am a'
character = 'I ' + characters + ' string'
8

Bây giờ, nếu chúng ta nhập một chú thích không chính xác, điều gì sẽ xảy ra?

Trên thực tế, không có gì quan trọng — hãy nhớ rằng Python không thực thi các chú thích kiểu của chúng ta

Trình nói dối Python của chúng tôi làm nổi bật mã của chúng tôi, đưa ra cảnh báo rằng có điều gì đó không ổn

Di chuột qua mã được đánh dấu cho chúng tôi biết rằng một str đã được chuyển vào nơi chúng tôi mong đợi một int

Thay vào đó, chúng được sử dụng bởi các IDE và linters của bên thứ ba. Vì vậy, một chú thích sai sẽ được đánh dấu bằng công cụ bên thứ ba của chúng tôi — hoạt động như một hệ thống cảnh báo sớm rằng logic của chúng tôi không hoàn toàn đúng

Kết hợp các kiểu dữ liệu

Bên cạnh các kiểu dữ liệu cơ bản int,

str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
0,
str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
1,
str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
2, v.v. — chúng ta cũng có thể kết hợp từng loại này để tạo các cấu trúc gõ phức tạp hơn

Vì vậy, đưa ra hai từ điển

str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}

Chúng ta có thể định nghĩa hai đối tượng này là loại

str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
2. Để viết một hàm mong đợi một trong hai từ điển này làm đầu vào, chúng ta có thể viết

def sum_dict(var: dict):
return sum(var[key] for key in var.keys())

Nhưng, chúng ta muốn xác định điều gì rằng chúng ta mong đợi một từ điển chứa các khóa thuộc loại

str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
0 và các giá trị thuộc loại int?

def sum_dict(var: dict[str, int]):
...

Bây giờ, khi đưa cả

str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
6 và
str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
7 vào cùng một chức năng trong IDE của chúng tôi - chúng tôi sẽ thấy rằng
str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
7 được tô sáng

Trình nói dối Python của chúng tôi nhấn mạnh loại đầu vào sai của chúng tôi

Di chuột qua biến được đánh dấu int_int sẽ hiển thị thông báo cảnh báo này

Từ điển đầu tiên của chúng tôi

str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
6 sẽ trôi qua mà không có vấn đề gì. Tuy nhiên,
str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
7 trả về cảnh báo loại không tương thích

đoàn thể

Trong một số trường hợp, chúng tôi có thể muốn cho phép một tập hợp các loại khác nhau cho một nhiệm vụ

Ví dụ, trong chức năng bổ sung trước đó của chúng tôi - chúng tôi có thực sự chỉ muốn cho phép số nguyên không?

Để cho phép nhiều kiểu dữ liệu, chúng ta có thể sử dụng các toán tử hợp kiểu. Tiền Python 3. 10 cái này sẽ như thế nào

from typing import Uniondef add(x: Union[int, float], y: Union[int, float]) -> Union[int, float]:
return x + y

Ở đây, chúng tôi cho phép kiểu dữ liệu int hoặc

str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
1. Với Python3. 10 (bản phát hành đầy đủ là tháng 10 năm 2021), chúng ta có thể thay thế
def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
3 bằng toán tử công đoàn mới
def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
4

def add(x: int | float, y: int | float) -> int | float:
return x + y

Toán tử tùy chọn

Loại cuối cùng chúng ta nên xem xét là toán tử

def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
5

Khi chúng ta xác định một hàm với các tham số tùy chọn, chúng ta có thể chỉ định điều này bằng cách sử dụng loại

def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
5. Ví dụ: chúng ta có thể thêm một đối số chuỗi tùy chọn vào hàm
def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
7 của mình

from typing import Optionaldef add(x: int, y: int, op: Optional[str]) -> int:
...

Ở đây, chú thích loại của chúng tôi sẽ mong đợi một giá trị

def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
8 hoặc kiểu dữ liệu
str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
0. Chúng ta cũng có thể viết logic chính xác này bằng cách sử dụng một
def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
3

def add(x: int, y: int, op: Union[None, str]) -> int:
...

Cái nào tạo ra cùng một chú thích chính xác, cho phép giá trị

def sum_dict(var: dict):
return sum(var[key] for key in var.keys())
8 hoặc kiểu dữ liệu
str_int = {'one': 5, 'two': 7}
int_int = {1: 5, 2: 7}
0

Hàm add sử dụng toán tử Tùy chọn, trong khi hàm add2 sử dụng toán tử Hợp với Không — cả hai đều tạo ra chú thích cùng loại

Đó là tất cả cho phần giới thiệu này để nhập chú thích trong Python — một bổ sung tuyệt vời cho hệ sinh thái Python khi được áp dụng tốt

Tôi hy vọng bạn thích bài viết. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào qua Twitter hoặc trong phần bình luận bên dưới. Nếu bạn quan tâm đến nhiều nội dung như thế này, tôi cũng đăng trên YouTube

Cảm ơn vì đã đọc

Nếu bạn muốn tìm hiểu về các tính năng thú vị hơn của Python, hãy xem bài viết này về câu lệnh đối sánh trường hợp mới đi kèm với Python 3. 10

Chú thích trong Python là gì?

Chú thích hàm là các biểu thức python tùy ý được liên kết với các phần khác nhau của hàm. Các biểu thức này được đánh giá tại thời điểm biên dịch và không tồn tại trong môi trường thời gian chạy của python. Python không gắn bất kỳ ý nghĩa nào với các chú thích này

Cách viết bình luận khác nhau trong Python là gì?

Một nhận xét trong Python bắt đầu bằng ký tự băm, # và kéo dài đến cuối dòng vật lý. Tuy nhiên, một ký tự băm trong một giá trị chuỗi không được coi là một nhận xét. Nói chính xác, một nhận xét có thể được viết theo ba cách - hoàn toàn trên một dòng riêng, bên cạnh một câu lệnh và dưới dạng một khối nhận xét nhiều dòng

Chú thích chức năng là gì và chúng được sử dụng như thế nào trong Python?

Chú thích hàm, cho cả tham số và giá trị trả về, là hoàn toàn tùy chọn. Chú thích hàm không gì khác hơn là một cách liên kết các biểu thức Python tùy ý với các phần khác nhau của hàm tại thời điểm biên dịch . Bản thân Python không gắn bất kỳ ý nghĩa hoặc tầm quan trọng cụ thể nào vào các chú thích.

Chú thích loại trong Python là gì?

Chú thích loại — còn được gọi là chữ ký loại — được dùng để biểu thị kiểu dữ liệu của biến và đầu vào/đầu ra của hàm và phương thức . Trong nhiều ngôn ngữ, kiểu dữ liệu được nêu rõ ràng. Trong các ngôn ngữ này, nếu bạn không khai báo kiểu dữ liệu của mình — mã sẽ không chạy.