Không gian không được coi là tương đương với tab. Một dòng thụt vào với một tab nằm ở một vết lõm khác nhau từ một dòng thụt vào với 1, 2, 4 hoặc 8 không gian.
Bằng chứng bằng ví dụ đối phó [sai lầm, hoặc, tốt nhất, Tab - Tab! = 4 không gian]:
x = 1
if x == 1:
^Iprint "fff\n"
print "yyy\n"
'
File "xx.py", line 4
print "yyy\n"
^
IndentationError: unindent does not match any outer indentation level
0' hiển thị một tab. Khi chạy qua Python 2.5, tôi gặp lỗi: File "xx.py", line 4
print "yyy\n"
^
IndentationError: unindent does not match any outer indentation level
Do đó, cho thấy rằng trong Python 2.5, các tab không bằng không gian [và đặc biệt không bằng 4 khoảng trắng].
Rất tiếc - xấu hổ; Bằng chứng của tôi bằng ví dụ đối với các tab không tương đương với 4 khoảng trống. Như Alex Martelli chỉ ra trong một bình luận, trong Python 2, các tab tương đương với 8 không gian và điều chỉnh ví dụ với một tab và 8 không gian cho thấy đây thực sự là trường hợp.
x = 1
if x != 1:
^Iprint "x is not 1\n"
print "y is unset\n"
Trong Python 2, mã này hoạt động, không có gì in.
Trong Python 3, các quy tắc hơi khác nhau [như được ghi nhận bởi Antti haapala]. So sánh:
- Python 2 trên thụt
- Python 3 trên thụt
Python 2 nói:
Đầu tiên, các tab được thay thế [từ trái sang phải] bằng một đến tám khoảng trống sao cho tổng số ký tự lên đến và bao gồm cả sự thay thế là bội số của tám [điều này được dự định là quy tắc tương tự như được sử dụng bởi Unix]. Tổng số không gian trước ký tự không trống đầu tiên sau đó xác định thụt dòng. Thắng không thể được phân chia trên nhiều dòng vật lý bằng cách sử dụng dấu gạch chéo ngược; khoảng trắng lên đến dấu gạch chéo ngược đầu tiên xác định thụt lề.
Python 3 nói:
Các tab được thay thế [từ trái sang phải] bằng một đến tám khoảng trống sao cho tổng số ký tự lên đến và bao gồm cả sự thay thế là bội số của tám [điều này được dự định là quy tắc tương tự như được sử dụng bởi UNIX]. Tổng số không gian trước ký tự không trống đầu tiên sau đó xác định thụt dòng. Thắng không thể được phân chia trên nhiều dòng vật lý bằng cách sử dụng dấu gạch chéo ngược; khoảng trắng lên đến dấu gạch chéo ngược đầu tiên xác định thụt lề.
[Ngoài từ mở đầu "Đầu tiên", những thứ này giống hệt nhau.]
Python 3 thêm một đoạn văn bổ sung:
Thắng bị từ chối là không nhất quán nếu một tệp nguồn trộn các tab và không gian theo cách làm cho ý nghĩa phụ thuộc vào giá trị của một tab trong không gian; Một taberror được nuôi dưỡng trong trường hợp đó.
Điều này có nghĩa là ví dụ Tab vs 8-Space hoạt động trong Python 2 sẽ tạo ra một điều taberror trong Python 3. Tốt nhất-cần thiết trong Python 3-để đảm bảo rằng chuỗi các ký tự tạo ra vết lõm trên mỗi dòng trong một khối là giống hệt nhau. PEP8 cho biết 'Sử dụng 4 không gian trên mỗi cấp độ thụt'. [Tiêu chuẩn mã hóa của Google cho biết 'Sử dụng 2 không gian'.]
Thắng trong Python được sử dụng để tạo ra một nhóm các tuyên bố. Nhiều ngôn ngữ phổ biến như C và Java sử dụng niềng răng [{}] để xác định một khối mã và Python sử dụng thụt lề. Thắng trong Python đề cập đến không gian trắng ở đầu dòng. Chúng ta có thể tạo vết lõm bằng cách sử dụng không gian hoặc tab. Khi viết mã Python, chúng ta phải xác định một nhóm các câu lệnh cho các chức năng và vòng lặp. Điều này được thực hiện bằng cách thụt lề đúng các câu lệnh cho khối đó.
Các không gian trắng hàng đầu [không gian và tab] ở đầu một dòng được sử dụng để xác định mức thụt của dòng. Chúng tôi phải tăng mức thụt lề để nhóm các câu lệnh cho khối mã đó. Tương tự, giảm thụt vào để đóng nhóm.
Bốn không gian trắng hoặc một ký tự một tab duy nhất được sử dụng để tạo hoặc tăng mức độ thụt của mã. Hãy cùng xem xét một ví dụ để hiểu được thụt mã và nhóm các câu lệnh.
def foo[]: print["Hi"] if True: print["true"] else: print["false"] print["Done"]
Quy tắc thụt python
- Chúng tôi có thể chia phần thụt vào nhiều dòng bằng cách sử dụng dấu gạch chéo ngược.
- Dòng đầu tiên của mã Python có thể có một vết lõm, nó sẽ ném
1.File "xx.py", line 4 print "yyy\n" ^ IndentationError: unindent does not match any outer indentation level
- Bạn nên tránh trộn các tab và khoảng trắng để tạo ra một vết lõm. Nó khác vì các biên tập viên văn bản trong các hệ thống không phải là Unix hoạt động khác nhau và trộn chúng có thể gây ra vết lõm sai.
- Nó được ưa thích để sử dụng khoảng trắng để thụt vào hơn ký tự tab.
- Cách thực hành tốt nhất là sử dụng 4 khoảng trắng cho thụt đầu tiên và sau đó tiếp tục thêm 4 khoảng trắng để tăng thụt.
Lợi ích của thụt lề trong Python
- Trong hầu hết các ngôn ngữ lập trình, thụt lề được sử dụng để cấu trúc đúng mã. Trong Python, nó được sử dụng để nhóm, làm cho mã tự động đẹp.
- Quy tắc thụt python rất đơn giản. Hầu hết các id python tự động thụt mã mã cho bạn, do đó, nó rất dễ dàng để viết mã được thụt vào đúng.
Nhược điểm của vết lõm trong Python
- Vì không gian trắng được sử dụng để thụt vào, nếu mã lớn và vết lõm bị hỏng thì nó thực sự tẻ nhạt để sửa nó. Nó xảy ra chủ yếu bằng cách sao chép mã từ các nguồn trực tuyến, tài liệu từ hoặc tệp pdf.
- Hầu hết các ngôn ngữ lập trình phổ biến đều sử dụng niềng răng để thụt vào, vì vậy bất kỳ ai đến từ một thế giới lập trình khác đều thấy khó khăn lúc đầu để điều chỉnh theo ý tưởng sử dụng khoảng trắng cho vết lõm.
Vết lõm trong python cho vòng lặp
Chúng ta phải tăng thụt vào vòng lặp để mã sẽ được nhóm lại với nhau. Hãy cùng nhìn vào một ví dụ về vết lõm trong Python cho Loop.
def print_numbers[x, y]: for i in range[x, y]: print[i]
Ví dụ thụt lề
Hãy cùng xem xét một số ví dụ về nội soi thụt trong mã Python.
>>> x = 10 File "", line 1 x = 10 ^ IndentationError: unexpected indent >>>
Chúng ta có thể có một thụt lề trong dòng đầu tiên của mã. Đó là lý do tại sao thụt lề bị ném.
if True: print["true"] print["Hi"] else: print["false"]
Các dòng mã bên trong khối IF có mức thụt khác nhau, do đó là lần nối liền.
if True: print["true"] else: print["false"] print["Done"]
Ở đây câu lệnh in cuối cùng có một số vết lõm nhưng không có tuyên bố nào để đính kèm nó, do đó lỗi thụt lề được ném.
if True: print["true"] else: print["false"]
Output:
File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/indent.py", line 2 print["true"] ^ IndentationError: expected an indented block
Bản tóm tắt
Thắng Python làm cho mã của chúng tôi đẹp. Nó cũng phục vụ mục đích nhóm các câu lệnh thành một khối mã. Điều này dẫn đến thói quen viết mã đẹp mọi lúc vì nó không phải là một tính năng tốt mà là một yêu cầu phải có của mã.
Cái gì tiếp theo?
- Kiểu dữ liệu Python
- Python if-else tuyên bố
- Xử lý ngoại lệ Python
- Danh sách trong Python
- Tuple trong Python
References:
- Python.org Docs