Hướng dẫn python ellipsis - dấu chấm lửng trăn

Trong văn bản tiếng Anh, bạn có thể sử dụng dấu chấm lửng để chỉ ra rằng bạn sẽ bỏ đi thứ gì đó. Về cơ bản, bạn sử dụng ba dấu chấm (

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3) để thay thế nội dung. Nhưng dấu chấm lửng không chỉ tồn tại trong văn xuôi mà bạn có thể đã thấy ba dấu chấm trong mã nguồn Python.

Show

Các hình elip theo nghĩa đen (

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3) đánh giá thành Python từ
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5. Vì
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 là hằng số tích hợp, bạn có thể sử dụng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 hoặc
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 mà không cần nhập nó:
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5
. Because
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 is a built-in constant, you can use
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 or
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 without importing it:

>>>

>>> ...
Ellipsis

>>> Ellipsis
Ellipsis

>>> ... is Ellipsis
True

Mặc dù ba chấm có thể trông kỳ lạ như cú pháp Python, nhưng có những tình huống sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 có thể có ích. Nhưng khi nào bạn nên sử dụng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 trong Python?But when should you use
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 in Python?

Tóm lại: Sử dụng dấu chấm lửng như một trình giữ chỗ trong Python

Mặc dù bạn có thể sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 và
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 hoán đổi cho nhau, nhưng bạn thường chọn
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 trong mã của mình. Tương tự như sử dụng ba dấu chấm bằng tiếng Anh để bỏ qua nội dung, bạn có thể sử dụng dấu chấm lửng trong Python làm trình giữ chỗ cho mã không viết:

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()

Khi bạn chạy

$ python ellipsis_example.py
$
4 và thực thi
$ python ellipsis_example.py
$
5, thì Python chạy mà không phàn nàn:

$ python ellipsis_example.py
$

Không có lỗi nào khi bạn thực hiện một chức năng trong Python chỉ chứa

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 trong cơ thể chức năng. Điều đó có nghĩa là bạn có thể sử dụng dấu chấm lửng làm trình giữ chỗ tương tự như từ khóa
$ python ellipsis_example.py
$
7.

Sử dụng ba chấm tạo ra sự lộn xộn thị giác tối thiểu. Vì vậy, có thể thuận tiện để thay thế mã không liên quan khi bạn chia sẻ các phần của mã trực tuyến.

Một thời gian phổ biến khi bạn bỏ qua mã là khi bạn làm việc với các cuống. Bạn có thể nghĩ về các sơ khai như là độc lập cho các chức năng thực sự. Các cuống có thể có ích khi bạn chỉ cần một chữ ký chức năng nhưng không muốn thực thi mã trong thân chức năng. Ví dụ: bạn có thể muốn ngăn chặn các yêu cầu bên ngoài khi bạn đang phát triển một ứng dụng.stubs. You can think of stubs as stand-ins for real functions. Stubs can come in handy when you only need a function signature but don’t want to execute the code in the function body. For example, you’d probably want to prevent external requests when you’re developing an application.

Giả sử bạn có một dự án Flask nơi bạn đã tạo bộ đếm khách truy cập của riêng mình trong

$ python ellipsis_example.py
$
8. Hàm
$ python ellipsis_example.py
$
9 được kết nối với cơ sở dữ liệu nơi bạn theo dõi số lượng khách truy cập. Để không tự đếm mình khi bạn kiểm tra ứng dụng của mình ở chế độ gỡ lỗi, bạn có thể tạo một cuống
$ python ellipsis_example.py
$
9:

 1# app.py
 2
 3from flask import Flask
 4
 5from custom_stats import count_visitor
 6
 7app = Flask(__name__)
 8
 9if app.debug:
10    def count_visitor(): ...
11
12@app.route("/")
13def home():
14    count_visitor()
15    return "Hello, world!"

Bởi vì nội dung của

$ python ellipsis_example.py
$
9 không có vấn đề gì trong trường hợp này, nên bạn nên sử dụng dấu chấm lửng trong cơ thể chức năng. Python gọi
$ python ellipsis_example.py
$
9 mà không có lỗi hoặc tác dụng phụ không mong muốn khi bạn chạy ứng dụng bình của mình ở chế độ gỡ lỗi:

$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on

Nếu bạn chạy ứng dụng Flask ở chế độ gỡ lỗi, thì

$ python ellipsis_example.py
$
9 trong dòng 14 đề cập đến cuống của bạn trong dòng 10. Sử dụng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 trong cơ thể chức năng của
$ python ellipsis_example.py
$
9 giúp bạn kiểm tra ứng dụng của mình mà không có tác dụng phụ.

Ví dụ trên cho thấy cách sử dụng cuống ở quy mô nhỏ hơn. Đối với các dự án lớn hơn, các cuống thường được sử dụng trong các bài kiểm tra đơn vị vì chúng giúp kiểm tra các phần của mã của bạn một cách bị cô lập.

Ngoài ra, nếu bạn quen thuộc với việc kiểm tra loại trong Python, cuộc nói chuyện về dấu chấm lửng này kết hợp với các cuống có thể rung chuông.

Công cụ phổ biến nhất để kiểm tra loại là mypy. Để xác định các loại của thư viện tiêu chuẩn và các định nghĩa thư viện của bên thứ ba, MyPy sử dụng các tệp sơ khai:mypy. To determine the types of the standard library and third-party library definitions, mypy uses stub files:

Tệp sơ khai là một tệp chứa bộ xương của giao diện công cộng của mô -đun Python đó, bao gồm các lớp, biến, chức năng - và quan trọng nhất là các loại của chúng. (Nguồn)

Bạn có thể truy cập kho lưu trữ được đánh máy Python, và khám phá việc sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 trong các tệp sơ khai mà kho lưu trữ này chứa. Khi bạn đi sâu hơn vào chủ đề gõ tĩnh, bạn có thể tìm thấy một trường hợp sử dụng khác của hằng số
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5. Trong phần tiếp theo, bạn sẽ học khi sử dụng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 trong các gợi ý loại.

Ellipsis có nghĩa là gì trong gợi ý loại?

Trong phần cuối cùng, bạn đã học được rằng bạn có thể sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 làm trình giữ chỗ cho các tệp sơ khai của mình, bao gồm cả khi kiểm tra nhập. Nhưng bạn cũng có thể sử dụng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 trong Gõ gợi ý. Trong phần này, bạn sẽ học cách sử dụng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 để:type hinting. In this section, you’ll learn how to use
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 to:

  1. Chỉ định một tuple có độ dài thay đổi của loại đồng nhất
  2. Thay thế cho một danh sách các lập luận cho một người có thể gọi được

Loại gợi ý là một cách tuyệt vời để rõ ràng về các loại dữ liệu mà bạn mong đợi trong mã của mình. Nhưng đôi khi, bạn muốn sử dụng các gợi ý loại mà không hạn chế hoàn toàn cách người dùng của bạn có thể sử dụng các đối tượng. Ví dụ, có lẽ bạn muốn chỉ định một tuple chỉ chứa số nguyên, nhưng số lượng số nguyên có thể tùy ý. Điều đó khi Ellipsis có thể có ích:

 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]

Trong dòng 3, bạn xác định một biến,

$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
2, thuộc loại tuple. Biến
$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
2 phải là một tuple chỉ chứa các số nguyên. Tổng số lượng là không quan trọng.

Các định nghĩa biến trong dòng 6, 7 và 8 có giá trị vì chúng tuân thủ loại gợi ý loại. Các định nghĩa khác của

$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
2 aren cho phép:

  • Dòng 11 không chứa các vật phẩm đồng nhất. doesn’t contain homogeneous items.
  • Dòng 12 không phải là một tuple, nhưng là một danh sách. isn’t a tuple, but a list.

Nếu bạn đã cài đặt MyPy, thì bạn có thể chạy mã với MyPy để liệt kê cả hai lỗi:

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")

Sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 trong một gợi ý loại tuple có nghĩa là bạn mong đợi tất cả các mục cùng loại trong bộ tuple.

Mặt khác, khi bạn sử dụng nghĩa đen Ellipsis cho các loại có thể gọi được, bạn về cơ bản nâng cao một số hạn chế về cách gọi có thể gọi có thể được gọi, có lẽ về số lượng hoặc loại đối số:callable can be called, perhaps in terms of number or type of arguments:

 1from typing import Callable
 2
 3def add_one(i: int) -> int:
 4    return i + 1
 5
 6def multiply_with(x: int, y: int) -> int:
 7    return x * y
 8
 9def as_pixels(i: int) -> str:
10    return f"{i}px"
11
12def calculate(i: int, action: Callable[..., int], *args: int) -> int:
13    return action(i, *args)
14
15# Works:
16calculate(1, add_one)
17calculate(1, multiply_with, 3)
18
19# Doesn't work:
20calculate(1, 3)
21calculate(1, as_pixels)

Trong dòng 12, bạn xác định một tham số có thể gọi,

$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
6. Điều này có thể gọi có thể lấy bất kỳ số và loại đối số nào nhưng phải trả về một số nguyên. Với
$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
7, bạn cũng cho phép một số lượng khác nhau các đối số tùy chọn, miễn là các số nguyên của chúng. Trong cơ thể chức năng của
$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
8 trong dòng 13, bạn gọi
$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
6 có thể gọi được với số nguyên
 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
0 và bất kỳ đối số nào khác được truyền lại.

Khi bạn xác định một loại có thể gọi được, bạn phải cho Python biết những loại bạn sẽ cho phép làm đầu vào và loại nào bạn mong đợi có thể gọi được sẽ trở lại. Bằng cách sử dụng

 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
1, bạn nói rằng bạn không quan tâm đến việc có bao nhiêu và loại đối số nào mà có thể gọi được chấp nhận. Tuy nhiên, bạn đã chỉ định rằng nó phải trả về một số nguyên.

Các chức năng mà bạn truyền dưới dạng đối số cho

$ flask --app app --debug run
 * Serving Flask app 'app'
 * Debug mode: on
8 trong các dòng 16 và 17 tuân thủ quy tắc bạn đặt. Cả
 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
3 và
 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
4 đều là các thiết bị gọi trả về một số nguyên.

Mã trong dòng 20 không hợp lệ vì

 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
5 không thể gọi được. Một người có thể gọi phải là thứ mà bạn có thể gọi, do đó tên.

Mặc dù

 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
6 có thể gọi được, nhưng việc sử dụng của nó trong dòng 21 cũng không hợp lệ. Trong dòng 10, bạn đã tạo ra một chuỗi F. Bạn nhận được một chuỗi là giá trị trả về, đó là loại số nguyên mà bạn mong đợi.

Trong các ví dụ trên, bạn đã điều tra cách sử dụng nghĩa đen Ellipsis về kiểu gợi ý cho các bộ đếm và vật liệu gọi:

Loại hình
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 Sử dụng
 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
8
Xác định một bộ dữ liệu có độ dài không xác định với một loại thống nhất
 1# tuple_example.py
 2
 3numbers: tuple[int, ...]
 4
 5# Allowed:
 6numbers = ()
 7numbers = (1,)
 8numbers = (4, 5, 6, 99)
 9
10# Not allowed:
11numbers = (1, "a")
12numbers = [1, 3]
9
Viết tắt của một danh sách các đối số cho một cuộc gọi có thể gọi, xóa các hạn chế

Tiếp theo, bạn sẽ học cách sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 với Numpy.

Làm thế nào bạn có thể sử dụng dấu chấm lửng để cắt trong numpy?

Nếu bạn đã làm việc với Numpy trước đây, thì bạn có thể đã bắt gặp một cách sử dụng khác của

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5. Trong Numpy, bạn có thể cắt các mảng đa chiều với nghĩa đen Ellipsis.NumPy before, then you may have come across another use of
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5. In NumPy, you can slice multidimensional arrays with the ellipsis literal.

Bắt đầu với một ví dụ mà không tận dụng lợi thế của

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 trong Numpy:

>>>

>>> import numpy as np

>>> dimensions = 3
>>> items_per_dimension = 2
>>> max_items = items_per_dimension**dimensions
>>> axes = np.repeat(items_per_dimension, dimensions)
>>> arr = np.arange(max_items).reshape(axes)
>>> arr
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])

Trong ví dụ này, bạn đã tạo ra một mảng ba chiều bằng cách kết hợp

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
3 và
$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
4 trong Numpy.

Nếu bạn muốn chỉ định các mục đầu tiên của kích thước cuối cùng, thì bạn có thể cắt mảng numpy với sự trợ giúp của ký tự đại tràng (

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
5):

>>>

>>> arr[:, :, 0]
array([[0, 2],
       [4, 6]])

Trong ví dụ này, bạn đã tạo ra một mảng ba chiều bằng cách kết hợp

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
3 và
$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
4 trong Numpy.

>>>

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
0

Trong ví dụ này, bạn đã tạo ra một mảng ba chiều bằng cách kết hợp

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
3 và
$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
4 trong Numpy.

>>>

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
1

Trong ví dụ này, bạn đã tạo ra một mảng ba chiều bằng cách kết hợp

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
3 và
$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
4 trong Numpy.

Nếu bạn muốn chỉ định các mục đầu tiên của kích thước cuối cùng, thì bạn có thể cắt mảng numpy với sự trợ giúp của ký tự đại tràng (

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
5):

Vì $ mypy tuple_example.py tuple_example.py:11: error: Incompatible types in assignment (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]") tuple_example.py:12: error: Incompatible types in assignment (expression has type "List[int]", variable has type "Tuple[int, ...]") 6 có ba chiều, bạn cần chỉ định ba lát. Nhưng hãy tưởng tượng sự khó chịu của cú pháp sẽ nhận được như thế nào nếu bạn thêm nhiều kích thước! Nó thậm chí còn tệ hơn khi bạn có thể nói với bao nhiêu kích thước mà một mảng có:

Trong ví dụ này, bạn đã tạo ra một mảng có thể có tối đa mười chiều. Bạn có thể sử dụng Numpy từ

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
7 để tìm hiểu có bao nhiêu chiều
$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
6 có. Nhưng trong trường hợp như thế này, sử dụng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 là một cách tốt hơn:

Ở đây,

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
6 có năm chiều. Bởi vì số lượng kích thước là ngẫu nhiên, đầu ra của bạn có thể trông khác nhau. Tuy nhiên, việc chỉ định mảng đa chiều của bạn với
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 sẽ hoạt động.secondary prompt:

>>>

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
2

Trong ví dụ này, bạn đã tạo ra một mảng ba chiều bằng cách kết hợp

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
3 và
$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
4 trong Numpy.

Nếu bạn muốn chỉ định các mục đầu tiên của kích thước cuối cùng, thì bạn có thể cắt mảng numpy với sự trợ giúp của ký tự đại tràng (

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
5):

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
6 có ba chiều, bạn cần chỉ định ba lát. Nhưng hãy tưởng tượng sự khó chịu của cú pháp sẽ nhận được như thế nào nếu bạn thêm nhiều kích thước! Nó thậm chí còn tệ hơn khi bạn có thể nói với bao nhiêu kích thước mà một mảng có:

Trong ví dụ này, bạn đã tạo ra một mảng có thể có tối đa mười chiều. Bạn có thể sử dụng Numpy từ $ mypy tuple_example.py tuple_example.py:11: error: Incompatible types in assignment (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]") tuple_example.py:12: error: Incompatible types in assignment (expression has type "List[int]", variable has type "Tuple[int, ...]") 7 để tìm hiểu có bao nhiêu chiều $ mypy tuple_example.py tuple_example.py:11: error: Incompatible types in assignment (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]") tuple_example.py:12: error: Incompatible types in assignment (expression has type "List[int]", variable has type "Tuple[int, ...]") 6 có. Nhưng trong trường hợp như thế này, sử dụng # ellipsis_example.py def do_nothing(): ... do_nothing() 3 là một cách tốt hơn:

Ở đây,

$ mypy tuple_example.py
tuple_example.py:11: error: Incompatible types in assignment
  (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]")
tuple_example.py:12: error: Incompatible types in assignment
  (expression has type "List[int]", variable has type "Tuple[int, ...]")
6 có năm chiều. Bởi vì số lượng kích thước là ngẫu nhiên, đầu ra của bạn có thể trông khác nhau. Tuy nhiên, việc chỉ định mảng đa chiều của bạn với
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 sẽ hoạt động.

Numpy cung cấp nhiều tùy chọn hơn để sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 để chỉ định một phần tử hoặc một loạt các mảng. Kiểm tra Numpy:
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 (
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3) cho
 1from typing import Callable
 2
 3def add_one(i: int) -> int:
 4    return i + 1
 5
 6def multiply_with(x: int, y: int) -> int:
 7    return x * y
 8
 9def as_pixels(i: int) -> str:
10    return f"{i}px"
11
12def calculate(i: int, action: Callable[..., int], *args: int) -> int:
13    return action(i, *args)
14
15# Works:
16calculate(1, add_one)
17calculate(1, multiply_with, 3)
18
19# Doesn't work:
20calculate(1, 3)
21calculate(1, as_pixels)
5 để khám phá thêm các trường hợp sử dụng cho ba chấm nhỏ này.

Nếu bạn làm việc với Numpy, thì bạn có thể sử dụng

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
3 để viết tắt cú pháp cắt của bạn bằng cách thay thế các kích thước có độ dài thay đổi bằng đối tượng
# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5.Với cú pháp không lộn xộn mà ba dấu chấm cung cấp, bạn có thể làm cho mã của mình dễ đọc hơn.

Theo nguyên tắc thông thường, bạn có thể nhớ rằng bạn thường sử dụng Python từ

# ellipsis_example.py

def do_nothing():
    ...

do_nothing()
5 để bỏ qua mã.Một số thậm chí có thể nói rằng dấu chấm lửng có thể làm cho mã không đầy đủ trông dễ thương