Hướng dẫn how do you specify parameter data type in python? - làm thế nào để bạn chỉ định kiểu dữ liệu tham số trong python?

Các câu trả lời khác đã thực hiện một công việc tốt trong việc giải thích việc gõ vịt và câu trả lời đơn giản của tzot:

Python không có biến, giống như các ngôn ngữ khác trong đó các biến có loại và giá trị; Nó có tên chỉ vào các đối tượng, trong đó biết loại của chúng.

Tuy nhiên, một điều thú vị đã thay đổi kể từ năm 2010 (khi câu hỏi được đặt ra lần đầu tiên), cụ thể là việc thực hiện PEP 3107 (được thực hiện trong Python 3). Bây giờ bạn thực sự có thể chỉ định loại tham số và loại trả về của một hàm như thế này:, one interesting thing has changed since 2010 (when the question was first asked), namely the implementation of PEP 3107 (implemented in Python 3). You can now actually specify the type of a parameter and the type of the return type of a function like this:

def pick(l: list, index: int) -> int:
    return l[index]

Ở đây chúng ta có thể thấy rằng pick có 2 tham số, danh sách l và số nguyên index. Nó cũng sẽ trả về một số nguyên.

Vì vậy, ở đây có nghĩa là l là một danh sách các số nguyên mà chúng ta có thể thấy mà không cần nỗ lực nhiều, nhưng đối với các chức năng phức tạp hơn, nó có thể hơi khó hiểu về những gì danh sách nên chứa. Chúng tôi cũng muốn giá trị mặc định là index là 0. Để giải quyết điều này, bạn có thể chọn viết pick như thế này: thay vào đó:

def pick(l: "list of ints", index: int = 0) -> int:
    return l[index]

Lưu ý rằng bây giờ chúng tôi đặt vào một chuỗi là loại l, được cho phép về mặt cú pháp, nhưng nó không tốt cho việc phân tích cú pháp theo chương trình (mà chúng tôi sẽ quay lại sau).

Điều quan trọng cần lưu ý là Python sẽ không tăng

def pick(l: "list of ints", index: int = 0) -> int:
    return l[index]
3 nếu bạn chuyển phao vào index, lý do cho đây là một trong những điểm chính trong triết lý thiết kế của Python: "Tất cả chúng ta đều đồng ý với người lớn ở đây", có nghĩa là bạn Dự kiến ​​sẽ nhận thức được những gì bạn có thể chuyển đến một chức năng và những gì bạn không thể. Nếu bạn thực sự muốn viết mã ném Kiểu mẫu, bạn có thể sử dụng chức năng
def pick(l: "list of ints", index: int = 0) -> int:
    return l[index]
5 để kiểm tra xem đối số được truyền có thuộc loại thích hợp hay một lớp con như thế này không:

def pick(l: list, index: int = 0) -> int:
    if not isinstance(l, list):
        raise TypeError
    return l[index]

Thông tin thêm về lý do tại sao bạn hiếm khi làm điều này và những gì bạn nên làm thay vào đó được nói đến trong phần tiếp theo và trong các bình luận.

PEP 3107 không chỉ cải thiện khả năng đọc mã mà còn có một số trường hợp sử dụng phù hợp mà bạn có thể đọc ở đây.here.


Chú thích loại được chú ý nhiều hơn trong Python 3.5 với việc giới thiệu PEP 484 giới thiệu một mô -đun tiêu chuẩn

def pick(l: "list of ints", index: int = 0) -> int:
    return l[index]
6 cho các gợi ý loại.

Những gợi ý loại này đến từ loại Checker MyPy (GitHub), hiện đang tuân thủ PEP 484.

Mô -đun

def pick(l: "list of ints", index: int = 0) -> int:
    return l[index]
6 đi kèm với một bộ sưu tập khá toàn diện các gợi ý loại, bao gồm:

  • def pick(l: "list of ints", index: int = 0) -> int:
        return l[index]
    
    8,
    def pick(l: "list of ints", index: int = 0) -> int:
        return l[index]
    
    9,
    def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    0,
    def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    1 - cho
    def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    2,
    def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    3,
    def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    4 và
    def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    5.
  • def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    6 - hữu ích cho máy phát điện.
  • def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    7 - ​​Khi nó có thể là bất cứ điều gì.
  • def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    8 - Khi nó có thể là bất cứ điều gì trong một tập hợp các loại được chỉ định, trái ngược với
    def pick(l: list, index: int = 0) -> int:
        if not isinstance(l, list):
            raise TypeError
        return l[index]
    
    7.
  • from typing import List
    
    def pick(l: List[int], index: int) -> int:
        return l[index]
    
    0 - Khi nó có thể là không có. Tốc ký cho
    from typing import List
    
    def pick(l: List[int], index: int) -> int:
        return l[index]
    
    1.might be None. Shorthand for
    from typing import List
    
    def pick(l: List[int], index: int) -> int:
        return l[index]
    
    1.
  • from typing import List
    
    def pick(l: List[int], index: int) -> int:
        return l[index]
    
    2 - Được sử dụng với thuốc generic.
  • from typing import List
    
    def pick(l: List[int], index: int) -> int:
        return l[index]
    
    3 - Được sử dụng chủ yếu cho các chức năng, nhưng có thể được sử dụng cho các thiết bị gọi khác.

Đây là những gợi ý loại phổ biến nhất. Một danh sách đầy đủ có thể được tìm thấy trong tài liệu cho mô -đun gõ.

Dưới đây là ví dụ cũ sử dụng các phương thức chú thích được giới thiệu trong mô -đun gõ:

from typing import List

def pick(l: List[int], index: int) -> int:
    return l[index]

Một tính năng mạnh mẽ là

from typing import List

def pick(l: List[int], index: int) -> int:
    return l[index]
3 cho phép bạn nhập các phương thức chú thích có chức năng như một đối số. Ví dụ:

from typing import Callable, Any, Iterable

def imap(f: Callable[[Any], Any], l: Iterable[Any]) -> List[Any]:
    """An immediate version of map, don't pass it any infinite iterables!"""
    return list(map(f, l))

Ví dụ trên có thể trở nên chính xác hơn với việc sử dụng

from typing import List

def pick(l: List[int], index: int) -> int:
    return l[index]
2 thay vì
def pick(l: list, index: int = 0) -> int:
    if not isinstance(l, list):
        raise TypeError
    return l[index]
7, nhưng điều này đã được để lại như một bài tập cho người đọc vì tôi tin rằng tôi đã điền vào câu trả lời của mình với quá nhiều thông tin về các tính năng mới tuyệt vời được kích hoạt bằng cách loại .


Trước đây khi một mã Python được ghi lại với Sphinx, một số chức năng ở trên có thể thu được bằng cách viết các tài liệu được định dạng như thế này:

def pick(l, index):
    """
    :param l: list of integers
    :type l: list
    :param index: index at which to pick an integer from *l*
    :type index: int
    :returns: integer at *index* in *l*
    :rtype: int
    """
    return l[index]

Như bạn có thể thấy, điều này mất một số dòng bổ sung (con số chính xác phụ thuộc vào mức độ rõ ràng bạn muốn và cách bạn định dạng tài liệu của mình). Nhưng bây giờ nó sẽ rõ ràng với bạn cách PEP 3107 cung cấp một giải pháp thay thế theo nhiều cách (tất cả?) Điều này đặc biệt đúng khi kết hợp với PEP 484, như chúng ta đã thấy, cung cấp một mô -đun tiêu chuẩn xác định cú pháp cho các gợi ý/chú thích loại này có thể được sử dụng theo cách mà nó không rõ ràng và chính xác sự kết hợp mạnh mẽ.

Theo ý kiến ​​cá nhân của tôi, đây là một trong những tính năng tuyệt vời nhất trong Python từ trước đến nay. Tôi không thể chờ đợi mọi người bắt đầu khai thác sức mạnh của nó. Xin lỗi vì câu trả lời dài, nhưng đây là những gì xảy ra khi tôi cảm thấy phấn khích.


Một ví dụ về mã Python sử dụng nhiều loại có thể được tìm thấy ở đây.

Làm thế nào để bạn chỉ định tham số kiểu dữ liệu trong Python?

Python là một ngôn ngữ động được gõ mạnh, trong đó chúng ta không phải chỉ định loại dữ liệu của đối số chức năng trả về chức năng.Nó liên quan loại với các giá trị thay vì tên.Cách duy nhất để chỉ định dữ liệu của các loại cụ thể là cung cấp các kiểu dữ liệu rõ ràng trong khi gọi các chức năng.providing explicit datatypes while calling the functions.

Tham số và loại tham số trong Python là gì?

Tham số thuật ngữ và đối số có thể được sử dụng cho cùng một điều: thông tin được truyền vào một hàm.Từ quan điểm của một hàm: Một tham số là biến được liệt kê bên trong dấu ngoặc đơn trong định nghĩa hàm.Một đối số là giá trị được gửi đến hàm khi nó được gọi.information that are passed into a function. From a function's perspective: A parameter is the variable listed inside the parentheses in the function definition. An argument is the value that are sent to the function when it is called.

Các loại tham số trong Python là gì?

Trong Python, chúng ta có 4 loại đối số chức năng sau ...
Đối số mặc định ..
Đối số từ khóa (đối số được đặt tên).
Đối số vị trí ..
Các đối số tùy ý (đối số có độ dài thay đổi *args và ** kwargs).