Hướng dẫn what is static type in python? - kiểu tĩnh trong python là gì?

Người mới bắt đầu Python

Tiến hành kiểm tra loại một cách dễ dàng

Hướng dẫn what is static type in python? - kiểu tĩnh trong python là gì?

Ảnh của Battlecalet Coffee Roasters trên unplash

Python là một ngôn ngữ được đánh máy động. Điều đó có nghĩa là không cần thiết phải khai báo loại biến khi gán giá trị cho nó. Chẳng hạn, bạn không cần phải khai báo loại dữ liệu của đối tượng

char major[] = "Tom";
2 là
char major[] = "Tom";
3 khi bạn khởi tạo đối tượng với giá trị chuỗi là
char major[] = "Tom";
4.dynamically typed language. That means it is not necessary to declare the type of a variable when assigning a value to it. For instance, you do not need to declare the data type of object
char major[] = "Tom";
2 as
char major[] = "Tom";
3 when you initialise the object with a string value of
char major[] = "Tom";
4.

major = 'Tom'

Trong một ngôn ngữ được gõ tĩnh như C, bạn phải khai báo loại dữ liệu của một đối tượng. Một chuỗi được khai báo là một mảng các ký tự.statically typed language like C, you must declare the data type of an object. A string is declared as an array of characters.

char major[] = "Tom";

Mã hóa bằng một ngôn ngữ được đánh máy động như Python chắc chắn là linh hoạt hơn, nhưng người ta có thể muốn chú thích các loại dữ liệu của các đối tượng và thực thi các ràng buộc loại. Nếu một hàm chỉ mong đợi các đối số số nguyên, việc ném các chuỗi vào hàm có thể làm sập chương trình.

Mặc dù đây là một trong những cạm bẫy chính của việc gõ động, Python 3 giới thiệu một số công cụ chú thích cho các lập trình viên để chỉ định và hạn chế các loại dữ liệu của các đối tượng.

Chú thích chức năng

Hãy để một chức năng rất đơn giản

char major[] = "Tom";
5 làm ví dụ:

def foo(n, s='Tom'):
return s*n

Hàm lấy

char major[] = "Tom";
6 và
char major[] = "Tom";
7 làm đối số và trả về
char major[] = "Tom";
8. Mặc dù nó có thể trông giống như một hàm nhân đơn giản và vô nghĩa, nhưng hãy chú ý giá trị mặc định của
char major[] = "Tom";
7 là
char major[] = "Tom";
4 là một chuỗi, không phải là một số. Chúng tôi có thể suy luận rằng chức năng này có ý định trả về một chuỗi lặp lại chuỗi
char major[] = "Tom";
7 nhiều lần - chính xác là
char major[] = "Tom";
6.

foo(3, 'Tom') # returns 'TomTomTom'

Chức năng này khá khó hiểu. Bạn có thể bị cám dỗ để viết các nhận xét và tài liệu dài giải thích chức năng và chỉ định các loại dữ liệu của các đối số và giá trị trả về.comments and docstrings that explain the function and specify the data types of arguments and return values.

def foo(n, s='Tom'):
"""Repeat a string multiple times.
Args:
n (int): number of times
s (string): target string
Returns:
(string): target string repeated n times.
"""
return s*n

Ảnh của NASA trên unsplash

Python cung cấp một cách nhỏ gọn hơn để bạn thực hiện chú thích tùy chọn bằng các ký hiệu

def foo(n, s='Tom'):
return s*n
3 và
def foo(n, s='Tom'):
return s*n
4.optional annotation using symbols
def foo(n, s='Tom'):
return s*n
3 and
def foo(n, s='Tom'):
return s*n
4.

def foo(n: int, s: str='Tom') -> str:
return s*n

Các chú thích của hàm

char major[] = "Tom";
5 có sẵn từ thuộc tính hàm
def foo(n, s='Tom'):
return s*n
6. Đó là một từ điển ánh xạ tên tham số cho các biểu thức được chú thích của chúng. Điều này cho phép kiểm tra loại thủ công bằng cách chạy mã thay vì tự mình xem mã nguồn. Khá tiện dụng.manual type checking by running the code instead of looking into the source code by yourself. Pretty handy.

foo.__annotations__
# {'n': int, 's': str, 'return': str}

Chú thích biến

Ngoài các đối số chức năng và giá trị trả về, bạn cũng có thể chú thích các biến bằng một loại dữ liệu nhất định. Bạn cũng có thể chú thích các biến mà không cần khởi tạo chúng với bất kỳ giá trị nào!

major: str='Tom' # type:str, this comment is no longer necessary
i: int

Tốt hơn là để chú thích các biến bằng cách sử dụng cú pháp tích hợp này thay vì nhận xét, vì các bình luận thường bị mờ đi trong nhiều biên tập viên.

Để chú thích các biến với các loại nâng cao hơn như

def foo(n, s='Tom'):
return s*n
7,
def foo(n, s='Tom'):
return s*n
8, v.v., bạn sẽ cần nhập chúng từ mô -đun
def foo(n, s='Tom'):
return s*n
9. Tên của các loại được viết hoa, chẳng hạn như
foo(3, 'Tom') # returns 'TomTomTom'
0,
foo(3, 'Tom') # returns 'TomTomTom'
1,
foo(3, 'Tom') # returns 'TomTomTom'
2 vv ..

from typing import List, Tuple, Dictl: List[int] = [1, 2, 3]
t1: Tuple[float, str, int] = (1.0, 'two', 3)
t2: Tuple[int, ...] = (1, 2.0, 'three')
d: Dict[str, int] = {'uno': 1, 'dos': 2, 'tres': 3}

Các yếu tố bên trong một danh sách, tuple hoặc từ điển cũng có thể được chú thích. Những loại được viết hoa này lấy các tham số trong ngoặc vuông

foo(3, 'Tom') # returns 'TomTomTom'
3 như được hiển thị ở trên.

foo(3, 'Tom') # returns 'TomTomTom'
0 lấy một tham số, là loại được chú thích cho tất cả các yếu tố trong danh sách. Các phần tử trong một bộ tuple có kích thước cố định có thể được chú thích từng cái một, trong khi các yếu tố trong một bộ tuple có kích thước thay đổi có thể được chú thích bởi Ellipsis
foo(3, 'Tom') # returns 'TomTomTom'
5. Chúng tôi cũng có thể chỉ định các loại khóa và vật phẩm trong một từ điển.

Ảnh của Fabien Bazanue trên unplash

Chú thích nâng cao

Chúng tôi đã đề cập rằng

foo(3, 'Tom') # returns 'TomTomTom'
0 chỉ có một tham số. Điều gì về việc chú thích một danh sách có chứa hỗn hợp các yếu tố
foo(3, 'Tom') # returns 'TomTomTom'
7 và
foo(3, 'Tom') # returns 'TomTomTom'
8?
foo(3, 'Tom') # returns 'TomTomTom'
9 là câu trả lời.

from typing import Union
l2: List[Union[int, float]] = [1, 2.0, 3]

Nó cũng hỗ trợ bất kỳ lớp do người dùng xác định dưới dạng các loại trong các chú thích.

char major[] = "Tom";
0

Một cuộc gọi cũng có thể được chú thích bằng các kỹ thuật nêu trên. Một người có thể gọi là một cái gì đó có thể được gọi, giống như một chức năng.callable can also be annotated using the above-mentioned techniques. A callable is something that can be called, like a function.

char major[] = "Tom";
1

Hãy cẩn thận

Đầu tiên, loại chú thích không hoàn toàn thay thế Docstrings và bình luận. Một mô tả ngắn gọn và giải thích về các chức năng của bạn vẫn cần thiết cho mục đích dễ đọc và khả năng tái tạo. Kích hoạt các chú thích loại có thể tránh có các bình luận phức tạp chứa đầy thông tin như các loại dữ liệu.

Thứ hai, có một cái gì đó mà tôi nên nói với bạn ngay từ đầu. Trình thông dịch Python thực sự không tự động tiến hành bất kỳ loại kiểm tra nào. Điều đó có nghĩa là những chú thích đó không có hiệu ứng trong thời gian chạy, ngay cả khi bạn đang cố gắng chuyển một loại đối tượng sai lầm cho một hàm.

Vì vậy, bạn đã lãng phí thời gian của riêng mình để cố gắng học các chú thích loại? Không.

Có nhiều mô -đun Python có sẵn thực thi các ràng buộc đó trước thời gian chạy. MyPy cho đến nay là trình kiểm tra loại được sử dụng phổ biến nhất mà không có thời gian chạy.

Ảnh của cuộc nổi dậy trên unsplash

Mang đi

Loại chú thích trong Python rất hữu ích cho việc gỡ lỗi và kiểm tra loại tùy chọn có bắt chước việc gõ tĩnh. Nó ngày càng trở nên phổ biến trong phát triển dự án, nhưng vẫn rất phổ biến trên các lập trình viên Python giản dị hơn.debugging and optional type checking that mimics static typing. It becomes increasingly popular in project development, but still very uncommon across more casual Python programmers.

Mặc dù sự vắng mặt của các chú thích không nhất thiết phải làm giảm hiệu suất mã, nhưng nó vẫn được coi là một thực tiễn tốt cho sự mạnh mẽ, khả năng đọc và mục đích tái tạo.

Chúng tôi hầu như không làm trầy xước bề mặt của việc gõ tĩnh và chú thích loại trong Python. Python 3.9 sẽ sớm ra mắt với một số nâng cấp về các chú thích thay đổi, vì vậy hãy theo dõi bằng cách đăng ký nhận bản tin của tôi để nhận thông tin cập nhật về các bài viết mới của tôi.

Thậm chí chưa sẵn sàng cho Python 3.8? Tôi có bạn bảo hiểm.

Cảm ơn vì đã đọc! Bạn có thấy những tính năng này thú vị và hữu ích không? Để lại một bình luận dưới đây! Bạn cũng có thể thấy các bài viết sau đây hữu ích:

Ý bạn là gì bởi loại 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.

Loại tĩnh và động trong Python là gì?

Nếu loại biến được kiểm tra trong thời gian chạy của mã so với ngôn ngữ được gọi là ngôn ngữ được gõ động. Nếu loại biến được kiểm tra theo thời gian biên dịch của mã so với ngôn ngữ được gọi là ngôn ngữ được đánh máy tĩnh.

Python là tĩnh hay loại động?

Python vừa là một ngôn ngữ được đánh máy mạnh mẽ vừa được đánh máy độ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 hoạt động trên một biến.Gõ động có nghĩa là loại biến chỉ được xác định trong thời gian chạy.. Strong typing means that variables do have a type and that the type matters when performing operations on a variable. Dynamic typing means that the type of the variable is determined only during runtime.

Loại tĩnh và loại động là gì?

Có hai sự khác biệt chính giữa gõ động và gõ tĩnh mà bạn nên biết khi viết các tập lệnh chuyển đổi.Đầu tiên, các ngôn ngữ được tính tự động thực hiện kiểm tra loại tại thời gian chạy, trong khi các ngôn ngữ được gõ tĩnh thực hiện kiểm tra loại tại thời điểm biên dịch.dynamically-typed languages perform type checking at runtime, while statically typed languages perform type checking at compile time.