Phím tắt thụt lề Python

Thụt đầu dòng là một khái niệm rất quan trọng của Python vì nếu không thụt lề mã Python đúng cách, cuối cùng bạn sẽ thấy IndentationError và mã sẽ không được biên dịch

Thụt lề Python

Thụt đầu dòng Python đề cập đến việc thêm khoảng trắng trước một câu lệnh cho một khối mã cụ thể. Nói cách khác, tất cả các câu lệnh có cùng khoảng trắng ở bên phải, thuộc về cùng một khối mã

Phím tắt thụt lề Python

Ví dụ về thụt lề Python

  • Câu lệnh (dòng 1), câu lệnh if (dòng 2) và câu lệnh (dòng cuối cùng) thuộc cùng một khối có nghĩa là sau câu lệnh 1, câu lệnh if sẽ được thực hiện. và giả sử điều kiện if trở thành Sai thì Python sẽ chuyển đến câu lệnh cuối cùng để thực thi
  • If-else lồng nhau thuộc khối 2 nghĩa là nếu if lồng nhau trở thành False thì Python sẽ thực thi các câu lệnh bên trong điều kiện else
  • Các câu lệnh bên trong if-else lồng nhau thuộc khối 3 và chỉ một câu lệnh sẽ được thực thi tùy thuộc vào điều kiện if-else

Thụt đầu dòng trong Python là một cách để nói với trình thông dịch Python rằng nhóm các câu lệnh thuộc về một khối mã cụ thể. Một khối là sự kết hợp của tất cả các câu lệnh này. Khối có thể được coi là nhóm các câu lệnh cho một mục đích cụ thể. Hầu hết các ngôn ngữ lập trình như C, C++ và Java đều sử dụng dấu ngoặc nhọn { } để xác định một khối mã. Python sử dụng thụt đầu dòng để làm nổi bật các khối mã. Khoảng trắng được sử dụng để thụt đầu dòng trong Python. Tất cả các câu lệnh có cùng khoảng cách về bên phải đều thuộc về cùng một khối mã. Nếu một khối phải được lồng sâu hơn, thì nó chỉ cần được thụt vào xa hơn về bên phải. Bạn có thể hiểu rõ hơn bằng cách xem các dòng mã sau.  

ví dụ 1

Các dòng print('Đăng nhập vào geeksforgeeks…') và print('retype the URL. ’) là hai khối mã riêng biệt. Hai khối mã trong câu lệnh if ví dụ của chúng tôi đều được thụt vào bốn khoảng trắng. Bản in cuối cùng ('Tất cả đã đặt. ') không thụt vào, vì vậy nó không thuộc khối khác.  

Python3




# Python program showing

# indentation

 

site= 'gfg'

 

if site== 'gfg'

1
2
3
4
5
2

1
2
3
4
5
3
1
2
3
4
5
4_______0_______5
1
2
3
4
5
6
1
2
3
4
5
7

1
2
3
4
5
8
1
2
3
4
5
2

1
2
3
4
5
3
1
2
3
4
5
4_______0_______5# Python program showing3_______0_______7

1
2
3
4
5
4_______0_______5_______51_______7
1
2
3
4
5
7

đầu ra

Logging on to geeksforgeeks...
All set !

ví dụ 2

Để chỉ ra một khối mã trong Python, bạn phải thụt lề từng dòng của khối bằng cùng một khoảng trắng. Hai dòng mã trong vòng lặp while đều được thụt vào bốn khoảng trắng. Nó được yêu cầu để chỉ ra khối mã mà một câu lệnh thuộc về. Ví dụ: j=1 và while(j<=5). không được thụt lề và do đó, nó không nằm trong khối Python. Vì vậy, cấu trúc mã Python bằng cách thụt đầu dòng.  

Python3




# Python program showing9= # indentation1

# indentation2

# indentation3# indentation4_______54_______ # indentation6# indentation7

# indentation8

1
2
3
4
5
4site0

# indentation8# Python program showing9= # Python program showing9site5 # indentation1

đầu ra

1
2
3
4
5

Ghi chú. Python sử dụng 4 dấu cách làm thụt đầu dòng theo mặc định. Tuy nhiên, số lượng dấu cách là tùy thuộc vào bạn, nhưng phải sử dụng tối thiểu 1 dấu cách

Sửa lỗi thụt lề Python trong Visual Studio Code. Xem tiện ích mở rộng trên VSCode Marketplace và mã nguồn của nó trên GitHub

Phím tắt thụt lề Python

Chủ đề được sử dụng trong gif. Chủ đề cộng đồng Palenight từ Chủ đề tài liệu cộng đồng v1. 4. 4

Làm thế nào nó hoạt động

Mỗi khi bạn nhấn phím

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2 trong ngữ cảnh Python, tiện ích mở rộng này sẽ phân tích cú pháp tệp Python của bạn đến vị trí con trỏ của bạn và xác định chính xác số lượng dòng tiếp theo (hoặc hai trong trường hợp thụt lề treo) và cách thức

Có ba trường hợp chính khi xác định vết lõm chính xác, được mô tả bên dưới

Giữa các cặp dấu ngoặc

Trong trường hợp khi bạn đặt con trỏ giữa một dấu ngoặc mở (một trong số

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
3) và cặp dấu ngoặc đóng của nó (một trong số tương ứng của
data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
4), tiện ích mở rộng này sẽ giữ cho các dòng tiếp theo được thụt vào ngay bên phải nơi nó được mở

data = {'a': 0,
        | # <- pressing enter should put your cursor at the "|"
| # <- this is where default VS Code puts your cursor

Ngay cả các dấu ngoặc lồng nhau cũng được xử lý

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
| # <- go back to indentation level before any brackets were opened
        | # <- default behavior of VS Code

Trong ví dụ đầy đủ bên dưới, Mã VS mặc định yêu cầu thêm chín lần nhấn phím (ba tab, hai dấu cách và bốn dấu cách) để phù hợp với thụt lề tự động của tiện ích mở rộng này

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
done(data)

thụt lề treo

Khi bạn đã mở một dấu ngoặc, nhưng chưa chèn bất kỳ nội dung nào, nhấn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2 sẽ tạo ra một khoảng thụt lề treo, phù hợp với hành vi cơ bản của Mã VS

result = my_func(
    | # <- your cursor should end up here
) # <- the closing bracket should end up here

Bạn có thể sử dụng cài đặt

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
6 để khi nhập xong, bạn chỉ cần nhấn
data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
7 để được đưa đến dấu ngoặc đóng

Nếu có nội dung ở bên phải con trỏ của bạn khi bạn nhấn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2, thì tiện ích mở rộng này sẽ chỉ thụt lề theo kích thước tab đã đặt của bạn

# The "|" is your cursor's location
result = my_func(|x, y, z)
# and when you press Enter...
result = my_func(
    |x, y, z)

Nếu bạn không bao giờ muốn dấu ngoặc đóng kết thúc trên dòng riêng của nó (i. e. bạn luôn muốn thụt lề theo kích thước tab đã đặt), hãy sử dụng cài đặt cấu hình

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
9. Cảnh báo. Điều này có thể gây ra sự thụt đầu dòng khó hiểu với các định nghĩa hàm vì danh sách đối số và mã hàm có thể kết thúc ở cùng một mức độ thụt đầu dòng

Nó không thường được sử dụng, nhưng dấu gạch chéo ngược để tiếp tục một dòng cũng sẽ khiến dòng tiếp theo bị thụt vào

my_long_calculation = 1234 + \
    5678

từ khóa

Một số từ khóa trong Python ngụ ý một số hành vi thụt đầu dòng. Ví dụ: nếu có một câu lệnh

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
0, thì chúng ta biết dòng tiếp theo có thể không được thụt lề (hoặc được thụt lề) vì không có câu lệnh nào có thể theo sau một
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
0 trong cùng một khối mã. Các từ khóa khác theo mô hình tương tự là
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
2,
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
3,
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
4 và
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
5

Tương tự, nếu có một

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
6 trên dòng hiện tại, thì dòng hiện tại cần được thụt vào và dòng tiếp theo cần được thụt vào so với vị trí mới của
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
6. Các từ khóa khác theo mô hình tương tự là
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
8,
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
9 và
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
| # <- go back to indentation level before any brackets were opened
        | # <- default behavior of VS Code
0. Một số ví dụ được hiển thị dưới đây

if True:
    pass
    else:|
# and when you press Enter...
if True:
    pass
else:
    |

Nhưng nếu bạn đã thay đổi thụt đầu dòng theo cách thủ công, tiện ích mở rộng sẽ không thay đổi nó cho bạn

if True:
    if True:
        pass
    else:|
# and when you press Enter, do NOT dedent!
if True:
    if True:
        pass
    else:
        |

# Or even more nested
if True:
    if True:
        if True:
            pass
    else:|
# and when you press Enter, still do NOT dedent
if True:
    if True:
        if True:
            pass
    else:
        |

Nếu (và chỉ khi) bạn nhấn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2 trong khi con trỏ của bạn đang ở giữa một nhận xét, thì dòng tiếp theo sẽ tự động được tạo thành một nhận xét

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
0

Cắt các dòng khoảng trắng

Bạn có thể cắt khoảng trắng khỏi các dòng chỉ chứa khoảng trắng bằng cách sử dụng cài đặt cấu hình

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
| # <- go back to indentation level before any brackets were opened
        | # <- default behavior of VS Code
2 (mặc định là không cắt khoảng trắng theo cách này). Cài đặt này đưa hành vi đến gần hơn với hành vi VSCode gốc

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
1

Tại sao nó cần thiết?

Có nhiều vấn đề liên quan trên GitHub ([1], [2], [3], [4], [5]) yêu cầu cải tiến Python indentation trong VS Code. Có vẻ như những người duy trì tiện ích mở rộng Python tại microsoft không ưu tiên thụt đầu dòng, vì đã không có tiến triển nào trong nhiều năm kể từ lần đầu tiên nó được yêu cầu

Phím tắt để sửa lỗi thụt đầu dòng trong Python là gì?

Làm cách nào để khắc phục lỗi thụt lề trong Python? .
Kiểm tra các khoảng trắng hoặc tab sai. .
Đảm bảo rằng phần thụt đầu dòng cho một khối cụ thể vẫn giữ nguyên trong toàn bộ mã, ngay cả khi một khối mới được đưa vào ở giữa. .
Chuyển đến cài đặt trình chỉnh sửa mã của bạn và bật tùy chọn tìm cách hiển thị các tab và khoảng trắng

Cách ưa thích để thụt lề trong Python là gì?

Bạn nên sử dụng khoảng trắng thay vì tab để thụt lề trong python. Ngoài ra, hãy sử dụng khoảng trắng hoặc tab để thụt lề; .