Python đa dòng là gì?

Có một số cách để trích dẫn chuỗi trong Python. Ba dấu ngoặc kép để chuỗi trải dài trên nhiều dòng. Ngắt dòng trong tệp nguồn của bạn trở thành ký tự ngắt dòng trong chuỗi của bạn. Chuỗi trích dẫn ba lần trong Python hoạt động giống như “here doc” trong các ngôn ngữ khác

Tuy nhiên, các quy tắc thụt đầu dòng của Python làm phức tạp vấn đề vì việc thụt đầu dòng trở thành một phần của chuỗi được trích dẫn. Ví dụ: giả sử bạn có đoạn mã sau bên ngoài một hàm

x = """\
abc
def
ghi
"""

Sau đó, bạn chuyển cái này vào một hàm

def foo[]:
    y = """\
    abc
    def
    ghi
    """
0 và đổi tên thành
def foo[]:
    y = """\
    abc
    def
    ghi
    """
1

def foo[]:
    y = """\
    abc
    def
    ghi
    """

Bây giờ

def foo[]:
    y = """\
    abc
    def
    ghi
    """
2 và
def foo[]:
    y = """\
    abc
    def
    ghi
    """
1 là các chuỗi khác nhau. Cái trước bắt đầu bằng
def foo[]:
    y = """\
    abc
    def
    ghi
    """
4 và cái sau bắt đầu bằng bốn khoảng trắng. [Dấu gạch chéo ngược sau dấu ngoặc kép mở đầu ngăn không cho dòng mới sau trở thành một phần của chuỗi được trích dẫn. Nếu không thì
def foo[]:
    y = """\
    abc
    def
    ghi
    """
2 và
def foo[]:
    y = """\
    abc
    def
    ghi
    """
1 sẽ bắt đầu bằng một dòng mới. ] Chuỗi
def foo[]:
    y = """\
    abc
    def
    ghi
    """
1 cũng có bốn khoảng trắng phía trước
def foo[]:
    y = """\
    abc
    def
    ghi
    """
8 và bốn khoảng trắng phía trước
def foo[]:
    y = """\
    abc
    def
    ghi
    """
9. Bạn không thể đẩy nội dung chuỗi sang lề trái vì điều đó sẽ vi phạm quy tắc định dạng của Python. [Cập nhật. Ồ vâng, bạn có thể. Xem bình luận của Aaron Meurer bên dưới. ]

Bây giờ chúng tôi đưa ra ba giải pháp cho vấn đề này

Giải pháp 1. bọc văn bản. vết lõm

Có một hàm trong thư viện chuẩn Python sẽ loại bỏ khoảng trống không mong muốn ra khỏi chuỗi

def foo[]:
    y = """\
    abc
    def
    ghi
    """
1

def foo[]:
    y = """\
    abc
    def
    ghi
    """
3

Điều này hiệu quả, nhưng theo tôi, cách tiếp cận tốt hơn là sử dụng cụm từ thông dụng [1]

Giải pháp 2. Biểu thức chính quy có cờ

Chúng tôi muốn xóa khoảng trắng và biểu thức chính quy cho ký tự khoảng trắng là

def foo[]:
    y = """\
    abc
    def
    ghi
    """
31. Chúng tôi muốn xóa một hoặc nhiều khoảng trắng nên chúng tôi thêm
def foo[]:
    y = """\
    abc
    def
    ghi
    """
32 vào cuối. Nhưng nói chung, chúng tôi không muốn xóa tất cả khoảng trắng, chỉ xóa khoảng trắng ở đầu dòng, vì vậy chúng tôi dán
def foo[]:
    y = """\
    abc
    def
    ghi
    """
33 ở phía trước để nói rằng chúng tôi muốn khớp khoảng trắng ở đầu dòng

def foo[]:
    y = """\
    abc
    def
    ghi
    """
7

Thật không may, điều này không hoạt động. Theo mặc định,

def foo[]:
    y = """\
    abc
    def
    ghi
    """
33 chỉ khớp với phần đầu của chuỗi, không khớp với phần đầu của dòng. Vì vậy, nó sẽ chỉ xóa khoảng trắng phía trước dòng đầu tiên;

Một giải pháp là thêm cờ

def foo[]:
    y = """\
    abc
    def
    ghi
    """
35 vào chức năng thay thế. Điều này sẽ báo hiệu rằng chúng tôi muốn
def foo[]:
    y = """\
    abc
    def
    ghi
    """
33 khớp với phần đầu của mỗi
def foo[]:
    y = """\
    abc
    def
    ghi
    """
37 trong chuỗi nhiều dòng của chúng tôi

def foo[]:
    y = """\
    abc
    def
    ghi
    """
2

Thật không may, điều đó cũng không hiệu quả. Đối số vị trí thứ tư cho

def foo[]:
    y = """\
    abc
    def
    ghi
    """
38 là số lượng thay thế cần thực hiện. Nó mặc định là 0, mà thực sự có nghĩa là vô cùng, tôi. e. thay thế tất cả các lần xuất hiện. Ví dụ: bạn có thể đặt
def foo[]:
    y = """\
    abc
    def
    ghi
    """
39 thành 1 để chỉ thay thế lần xuất hiện đầu tiên. Nếu chúng tôi không chỉ định
def foo[]:
    y = """\
    abc
    def
    ghi
    """
39, chúng tôi phải đặt
def foo[]:
    y = """\
    abc
    def
    ghi
    """
71 theo tên thay vì theo vị trí, tôi. e. dòng trên phải là

def foo[]:
    y = """\
    abc
    def
    ghi
    """
7

Điều đó hoạt động

Bạn cũng có thể viết tắt

def foo[]:
    y = """\
    abc
    def
    ghi
    """
35 thành
def foo[]:
    y = """\
    abc
    def
    ghi
    """
73. Cái trước rõ ràng hơn và cái sau nhỏ gọn hơn. Cho mỗi người của riêng mình. Có nhiều hơn một cách để làm điều đó. [2]

Giải pháp 3. Biểu thức chính quy với một công cụ sửa đổi

Theo ý kiến ​​​​của tôi, tốt hơn là sửa đổi biểu thức chính quy hơn là chuyển vào cờ. Công cụ sửa đổi

def foo[]:
    y = """\
    abc
    def
    ghi
    """
74 chỉ định rằng trong phần còn lại của thông thường, ký tự
def foo[]:
    y = """\
    abc
    def
    ghi
    """
33 phải khớp với đầu mỗi dòng

def foo[]:
    y = """\
    abc
    def
    ghi
    """
2

Một lý do tôi tin rằng điều này tốt hơn là chuyển thông tin từ việc triển khai biểu thức chính quy theo ngôn ngữ cụ thể sang cú pháp biểu thức chính quy được hỗ trợ trong nhiều ngôn ngữ lập trình

Ví dụ, biểu thức chính quy

def foo[]:
    y = """\
    abc
    def
    ghi
    """
3

sẽ có cùng ý nghĩa trong Perl và Python. Hai ngôn ngữ có cách diễn đạt bổ ngữ giống nhau [3] nhưng khác cách diễn đạt cờ. Trong Perl, bạn dán một

def foo[]:
    y = """\
    abc
    def
    ghi
    """
76 vào cuối toán tử so khớp để thực hiện những gì Python thực hiện với cài đặt
def foo[]:
    y = """\
    abc
    def
    ghi
    """
77

Một trong những công cụ sửa đổi được sử dụng phổ biến nhất là

def foo[]:
    y = """\
    abc
    def
    ghi
    """
78 để chỉ ra rằng một biểu thức chính quy phải khớp theo cách không phân biệt chữ hoa chữ thường. Perl và Python [và các ngôn ngữ khác] chấp nhận
def foo[]:
    y = """\
    abc
    def
    ghi
    """
78 trong biểu thức chính quy, nhưng mỗi ngôn ngữ có cách thêm từ bổ nghĩa riêng. Perl thêm một
def foo[]:
    y = """\
    abc
    def
    ghi
    """
20 sau toán tử so khớp và Python sử dụng

def foo[]:
    y = """\
    abc
    def
    ghi
    """
9

hoặc

def foo[]:
    y = """\
    abc
    def
    ghi
    """
0

như một đối số chức năng

Tìm hiểu thêm về biểu thức chính quy

  • Biểu thức chính quy trong Perl và Python
  • Cụm từ thông dụng với tiếng Do Thái và tiếng Hy Lạp
  • Tại sao biểu thức chính quy khó

[1] Vâng, tôi đã nghe câu châm ngôn về hai vấn đề. Thật buồn cười, nhưng nó không phải là một quy luật phổ quát

[2] “Có nhiều hơn một cách để làm điều đó” là một câu thần chú của Perl và mâu thuẫn với The Zen of Python. Tôi sử dụng dòng ở đây như một lời châm chọc tốt bụng vào Python. Bất chấp những lý tưởng đã nêu, Python có nhiều điểm chung với Perl hơn là nó muốn thừa nhận và tiếp tục áp dụng các ý tưởng từ Perl

[3] Mô-đun

def foo[]:
    y = """\
    abc
    def
    ghi
    """
21 của Python không hỗ trợ mọi công cụ sửa đổi biểu thức chính quy mà Perl hỗ trợ. Tôi không biết về mô-đun
def foo[]:
    y = """\
    abc
    def
    ghi
    """
22 của Python

RegEx đa tuyến là gì?

Tùy chọn nhiều dòng hoặc tùy chọn m nội tuyến, cho phép công cụ biểu thức chính quy xử lý một chuỗi đầu vào bao gồm nhiều dòng . Nó thay đổi cách diễn giải của các phần tử ngôn ngữ ^ và $ để chúng khớp với phần đầu và phần cuối của một dòng, thay vì phần đầu và phần cuối của chuỗi đầu vào.

Hàm re trong Python là gì?

Mô-đun "re" của Python cung cấp hỗ trợ biểu thức chính quy . Trong Python, tìm kiếm biểu thức chính quy thường được viết là. khớp = lại. tìm kiếm[pat, str] Cái lại. phương thức search[] lấy một mẫu biểu thức chính quy và một chuỗi và tìm kiếm mẫu đó trong chuỗi.

Chia lại trong Python là gì?

Lại. hàm split[] tách chuỗi đã cho theo sự xuất hiện của một ký tự hoặc mẫu cụ thể . Khi tìm thấy mẫu, hàm này trả về các ký tự còn lại từ chuỗi trong danh sách.

Việc sử dụng mô-đun lại là gì?

Mô-đun re cung cấp một tập hợp các tiện ích biểu thức chính quy mạnh mẽ, cho phép bạn nhanh chóng kiểm tra xem một chuỗi đã cho có khớp với một mẫu nhất định hay không [sử dụng hàm khớp] hoặc có chứa một mẫu như vậy [sử dụng chức năng tìm kiếm]

Chủ Đề