Hướng dẫn is match a keyword in python? - có khớp với một từ khóa trong python không?

Tôi không hoàn toàn hiểu tại sao từ khóa match có thể được sử dụng như một tên biến hoặc tên chức năng, không giống như các từ khóa khác if, while, v.v.?

>>> match "abc":
...     case "abc":
...         print('Hello!')
...     
Hello!
>>> from re import match
>>> match('A', 'A Something A')

>>> match = '????'
>>> match
'????'
>>> case = 'something'
>>> case
'something'

Phiên bản tiếp theo của Python, 3.10, là vào cuối alpha và dự kiến ​​sẽ được phát hành vào giữa năm 2021. Nó có một số thay đổi nhỏ đối với ngôn ngữ, nhưng cũng là một phần mới của cú pháp mới, từ khóa `match`.

Đó là phổ biến (trong bất kỳ ngôn ngữ lập trình nào) để kiểm tra một biến so với các điều kiện khác nhau, hành động trên trường hợp đầu tiên phù hợp. Hãy tưởng tượng mã như thế này, có thể hữu ích trong một ứng dụng đồ thị:

def find_point(point):
    """Given a tuple of (x, y), find that point on a plane."""

    if not isinstance(point, tuple) or len(point) != 2:
        print("not a point")

    elif point[0] == 0 and point[1] == 0:
        print("at origin")

    elif point[0] == 0:
        print(f"on y axis at {point[1]}")

    elif point[1] == 0:
        print(f"on x axis at {point[0]}")

    else:
        print("somewhere else")

Chúng tôi có thể sử dụng điều này như:

>>> find_point((0, 3))
on y axis at 3

Mã này khá đơn giản, nhưng nó có rất nhiều sự lặp lại --- chúng tôi tiếp tục phải kiểm tra các mục trong bộ phận bằng cách tra cứu. Chúng tôi có thể tái cấu trúc mã của mình để vượt qua điều này, nhưng sau đó chúng tôi không thể có điều này trong một khối `if/elif/other`, vì chúng tôi phải kiểm tra trước nếu chúng tôi được cung cấp . Cũng không may là trường hợp * không phải * của chúng tôi xảy ra ngay từ đầu; Sẽ rõ ràng hơn khi có điều đó vào cuối, như một sự bắt giữ cho bất cứ điều gì không phù hợp trước đây.

Python 3.10 giới thiệu từ khóa mới `match`, cung cấp một tính năng giống như` switch` (được tìm thấy trong JavaScript và nhiều ngôn ngữ khác, nhưng không phải trong Python), nhưng với các tính năng bổ sung. Hãy xem mã của chúng tôi bằng cách sử dụng `match`:

def find_point(point):
    """Given a tuple of (x, y), find that point on a plane."""

    match point:
        case (0, 0):
            print("at origin")

        case (0, y):
            print(f"on y axis at {y}")

        case (x, 0):
            print(f"on x axis at {x}")

        case (x, y):
            print("somewhere else")

        case _:
            print("not a point")

Mệnh đề `match` của chúng tôi phù hợp với biến` point` và khớp dựa trên "hình dạng" của các điều khoản trường hợp: chúng tôi có thể sử dụng nghĩa đen có nghĩa là ý nghĩa của chúng. Vì vậy, `Case (0, 0)` sẽ chỉ khớp với một tuple với `(0, 0)` hoặc để khớp một phần mẫu. Kết hợp `case (0, y)` yêu cầu một bộ hai mục với phần tử thứ nhất là 0 và phần tử thứ hai có thể là bất cứ điều gì, sẽ được ghi lại trong biến mới `y`.)

Cần phải liệt kê rằng trường hợp bắt tất cả mặc định phải được liệt kê --- đó sẽ là lỗi cú pháp nếu điều này không được thực hiện (đây là một tính năng bảo vệ tốt, giúp các lập trình viên viết mã cẩn thận hơn). `Case _` bắt mọi thứ.

Có một thỏa thuận tốt hơn ở đây. Từ đề xuất tăng cường Python đã đưa ra tính năng này:

  • Một mẫu chữ là hữu ích để lọc các giá trị không đổi trong một cấu trúc. Nó & nbsp; & nbsp; trông giống như một con trăn theo nghĩa đen (bao gồm một số giá trị như đúng, sai và không có). Nó chỉ khớp với các đối tượng bằng với nghĩa đen và không bao giờ liên kết.
  • Một mẫu chụp trông giống như X và tương đương với mục tiêu gán giống hệt nhau: nó luôn khớp và liên kết biến với tên (đơn giản) đã cho.
  • Mô hình ký tự đại diện là một dấu gạch dưới: _. Nó luôn luôn khớp, nhưng không nắm bắt bất kỳ biến nào (điều này ngăn chặn sự can thiệp với các mục đích sử dụng khác cho _ và cho phép một số tối ưu hóa).
  • Một mẫu giá trị không đổi hoạt động giống như nghĩa đen nhưng đối với một số hằng số được đặt tên. Lưu ý rằng nó phải là một tên đủ điều kiện (chấm), với sự mơ hồ có thể có với một mẫu chụp. Nó trông giống như màu sắc và chỉ phù hợp với các giá trị bằng với giá trị tương ứng. Nó không bao giờ ràng buộc.
  • Một mẫu trình tự trông giống như [a, *rest, b] và tương tự như một danh sách giải nén. Một sự khác biệt quan trọng là các yếu tố lồng nhau trong đó có thể là bất kỳ loại mẫu nào, không chỉ tên hoặc trình tự. Nó chỉ khớp với các chuỗi có độ dài phù hợp, miễn là tất cả các mẫu phụ cũng phù hợp. Nó làm cho tất cả các ràng buộc của các mẫu phụ của nó.
  • & nbsp; một mẫu ánh xạ trông giống như {"user": u, "email": [*es]}. Nó phù hợp với ánh xạ với ít nhất là tập hợp các khóa được cung cấp và nếu tất cả các mẫu phụ & nbsp; khớp với các giá trị tương ứng của chúng. Nó liên kết bất cứ điều gì liên kết mẫu phụ & nbsp; trong khi khớp với các giá trị tương ứng với các khóa. Thêm ** phần còn lại ở cuối mẫu để thu thập các mục bổ sung được cho phép.
  • Một mẫu lớp tương tự như ở trên nhưng khớp với các thuộc tính thay vì các khóa. Nó trông giống như datetime.date (năm = y, day = d). Nó phù hợp với các phiên bản của loại đã cho, có ít nhất các thuộc tính được chỉ định, miễn là các thuộc tính khớp với các mẫu phụ tương ứng. Nó liên kết bất cứ điều gì các mô hình phụ liên kết khi khớp với các giá trị của các thuộc tính đã cho. Một giao thức tùy chọn cũng cho phép các đối số vị trí phù hợp.
  • Một hoặc mẫu trông giống như [*x] | {"elems": [*x]}. Nó phù hợp nếu bất kỳ mẫu phụ của nó phù hợp. Nó sử dụng liên kết cho mẫu ngoài cùng bên trái phù hợp.
  • Một mẫu Walrus trông giống như D: = DateTime (năm = 2020, tháng = m). Nó chỉ phù hợp nếu mẫu phụ của nó cũng phù hợp. Nó liên kết bất cứ điều gì mà khớp mẫu phụ làm, và cũng liên kết biến được đặt tên với toàn bộ đối tượng.

Đó là rất nhiều sự linh hoạt --- và chắc chắn sẽ làm cho việc xử lý các câu lệnh chuyển đổi phức tạp trong Python dễ dàng hơn rất nhiều!

Python nói chung là bảo thủ trong việc thêm các tính năng mới vào ngôn ngữ, để giữ cho nó một ngôn ngữ có thể dễ dàng học và sử dụng bởi các chuyên gia cũng như các chuyên gia. Tuy nhiên, ý tưởng kết hợp mẫu đã có mặt ở một số ngôn ngữ mới khác, như Swift và Kotlin, vì vậy thật thú vị khi thấy ý tưởng này được chuyển trong Python.

Match () trong Python là gì?

khớp (mẫu, chuỗi): Phương thức này tìm thấy khớp nếu nó xảy ra khi bắt đầu chuỗi.Ví dụ: Gọi Match () trên chuỗi 'Hướng dẫn TP TP' và tìm kiếm một mẫu 'TP' sẽ khớp.Tuy nhiên, nếu chúng ta chỉ tìm kiếm các hướng dẫn, mẫu sẽ không khớp.This method finds match if it occurs at start of the string. For example, calling match() on the string 'TP Tutorials Point TP' and looking for a pattern 'TP' will match. However, if we look for only Tutorials, the pattern will not match.

Python 3.9 có phù hợp không?

Kể từ đầu năm 2021, từ khóa trận đấu không tồn tại trong các phiên bản Python được phát hànhthe match keyword does not exist in the released Python versions <= 3.9. Since Python doesn't have any functionality similar to switch/case in other languages, you'd typically use nested if/elif/else statements or a dictionary.

Tuyên bố trận đấu là gì?

Tuyên bố trận đấu là gì?Nếu bạn là lập trình viên C hoặc C ++, có khả năng bạn đã sử dụng hoặc ít nhất là nghe về việc sử dụng câu lệnh MATCH, chỉ là nó được đổi tên thành câu lệnh Switch.Tuyên bố này được sử dụng để kiểm soát luồng thực thi mã.used in order to control the flow of code execution.

Khi nào trận đấu được giới thiệu Python?

'Kết hợp mô hình cấu trúc' mới được giới thiệu trong Python 3.10.Cú pháp cho tính năng mới này đã được đề xuất trong PEP 622 vào tháng 6 năm 2020. Tuyên bố phù hợp với mẫu của Python được lấy cảm hứng từ cú pháp tương tự được tìm thấy trong Scala, Erlang và các ngôn ngữ khác.Python 3.10. The syntax for this new feature was proposed in PEP 622 in JUne 2020. The pattern matching statement of Python was inspired by similar syntax found in Scala, Erlang, and other languages.