Hướng dẫn does python follow the indentation instead of brackets? - python có tuân theo thụt lề thay vì dấu ngoặc vuông không?

Xem: Mười điều mọi người muốn biết về PythonTen things people want to know about Python

Câu trả lời
  • Để tách các khối mã (như các vòng lặp, nếu các khối và định nghĩa hàm), trình biên dịch / trình thông dịch cần một cái gì đó để nói với nó khi một khối kết thúc. Niềng răng xoăn và câu lệnh cuối là cách hoàn toàn hợp lệ để cung cấp thông tin này cho trình biên dịch. Để một con người có thể đọc được thụt mã là một cách tốt hơn nhiều để cung cấp các tín hiệu trực quan về cấu trúc khối. Vì thụt lề cũng chứa tất cả thông tin cho trình biên dịch, để sử dụng cả hai sẽ là dự phòng. Vì vết lõm là tốt hơn cho con người, nên việc sử dụng nó cho trình biên dịch đó rất hợp lý. Nó có lợi thế là các chương trình Python có xu hướng đồng đều và liên tục thụt vào, loại bỏ một trở ngại để hiểu mã của người khác. Python không bắt buộc cách bạn thụt lề (hai khoảng trống hoặc bốn, tab hoặc không gian - nhưng không phải cả hai), chỉ là bạn làm điều đó một cách nhất quán. Những người đã quen với cách làm Python làm mọi việc có xu hướng bắt đầu thấy niềng răng xoăn là tiếng ồn dòng không cần thiết mà củng cố mã. Mặt khác, 'thứ khoảng trắng' có thể là lý do lớn nhất tại sao một số nhà phát triển từ chối thậm chí thử Python.

[Văn hóa dân gian nói rằng các abcers trong thập niên 80 đã xác định bằng thực nghiệm rằng khoảng trắng đáng kể có lợi thế có thể đo lường được. 'Có ai có tài liệu cho việc này không?]whitespace has measurable advantages. 'Anyone have documentation for this?]

Quan sát bổ sung ::

  • Trong số các lập trình viên sử dụng các ngôn ngữ bỏ qua không gian trắng, các quy ước phổ biến là thụt các khối mã để tạo điều kiện cho con người dễ dàng. Các chi tiết chính xác của các quy ước như vậy khác nhau (và có thể tranh luận về phong cách đáng kể giữa một số lập trình viên). Nhưng các tính năng chung có mặt khắp nơi, gần như phổ biến: mã được hiển thị chủ yếu ở định dạng "phác thảo" ... với các mức độ làm tổ từ vựng được biểu thị bằng cách tăng mức độ thụt. Python chỉ sử dụng quy ước (gần như phổ quát) này như là một phần của cú pháp cho phép nó phân phối với các mã thông báo kết thúc khối khác. Một số người cho rằng cú pháp này giúp tránh các tình huống trong đó mã không khớp với ý định rõ ràng (khi thụt lề không phù hợp với cấu trúc từ vựng). Như với các điểm tốt hơn về cách mã nên được thụt vào trong các ngôn ngữ Agnostica không gian trắng, đó là một điểm của cuộc thảo luận vô tận.

Tại sao các phần riêng biệt bằng vết lõm thay vì dấu ngoặc hoặc 'kết thúc' (chỉnh sửa lần cuối năm 2009-04-05 23:45:26 bởi 99-51-74-201)99-51-74-201)

Có một giải pháp cho vấn đề của bạn được phân phối với chính Python.

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
3, nó nằm trong thư mục công cụ \ scripts trong cài đặt windows (đường dẫn của tôi đến nó là c: \ python25 \ tools \ scripts), có vẻ như bạn phải lấy nó từ svn.python.org nếu bạn đang chạy trên Linux hoặc OSX.

Nó thêm nhận xét khi các khối được đóng hoặc có thể thụt mã đúng nếu các nhận xét được đưa vào. Đây là một ví dụ về mã được xuất ra bởi Pindent với lệnh:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
4

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

Trong đó

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
5 ban đầu là:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'

Bạn cũng có thể sử dụng

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
6 để chèn đúng thụt chính xác dựa trên các nhận xét (đọc tiêu đề của Pindent.py để biết chi tiết), điều này sẽ cho phép bạn mã hóa trong Python mà không phải lo lắng về thụt lề.

Ví dụ: chạy

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
7 sẽ chuyển đổi mã sau trong
def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
5 thành cùng một mã được thụt lề (và cũng được bình luận) đúng như được sản xuất bởi ví dụ
def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
9 ở trên:

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
# end if
else:
print 'oops!'
# end if
# end def foobar

Tôi muốn tìm hiểu giải pháp nào bạn kết thúc sử dụng, nếu bạn cần bất kỳ sự trợ giúp nào nữa, vui lòng bình luận về bài đăng này và tôi sẽ cố gắng giúp đỡ.

PEP 8: Căn cứ thụt lề và dấu ngoặc đóng trong Python

PEP 8 Purists đã sẵn sàng tấn công bạn và mã của bạn nếu họ bắt bạn không tuân thủ tiêu chuẩn PEP 8. Chẳng hạn, các lập trình viên Python đặt niềng răng, dấu ngoặc hoặc dấu ngoặc đơn của họ vào một dòng riêng để giúp dễ dàng nắm bắt các danh sách hoặc từ điển được lồng nhau.

Bài viết này cho thấy cách xếp hàng niềng răng, giá đỡ và dấu ngoặc đơn chính xác trong Python. Đây được gọi là thụt lề treo trên mạng và nó là trung tâm của PEP 8 được tiêu chuẩn hóa, mã sạch mà dễ đọc và hiểu!This is called “hanging indentation” and it’s at the heart of PEP 8 standardized, clean code that’s easy to read and understand!

Một ví dụ nhanh cho thấy cách bạn có thể tạo cấu trúc đa dòng tuân thủ tiêu chuẩn PEP 8:

# PEP 8 Compliant
age = {
    'Alice': 24,
    'Bob': 28,
    'Ann': 26,
    }

Vì vậy, làm thế nào để có ý định chính xác danh sách hoặc dữ liệu từ điển được đặt trong niềng răng, ngoặc và dấu ngoặc đơn?

Theo tiêu chuẩn PEP 8, có hai cách để xếp hàng niềng răng, giá đỡ hoặc dấu ngoặc đơn. Đầu tiên, xếp nó lên với ký tự không phải đầu tiên của dòng trước. Thứ hai, xếp nó lên với ký tự đầu tiên bắt đầu cấu trúc đa dòng.

Điều này nghe có vẻ hơi khó hiểu vì vậy hãy để Lôi nhảy vào các ví dụ thực tế.

Nơi đặt niềng răng, khung hoặc dấu ngoặc đơn đóng?

Đối với các cấu trúc đa dòng, có hai tùy chọn cơ bản về cách dự định chính xác dữ liệu.

1. Căn chỉnh nẹp đóng với ký tự không phải màu trắng đầu tiên của dòng trước::

# PEP 8 Compliant
age = {
    'Alice': 24,
    'Bob': 28,
    'Ann': 26,
    }

2. Căn chỉnh nẹp đóng với ký tự đầu tiên bắt đầu cấu trúc đa dòng::

# PEP 8 Compliant
age = {
    'Alice': 24,
    'Bob': 28,
    'Ann': 26,
}

Cả hai cách thụt lề đều có giá trị như nhau theo tiêu chuẩn PEP 8. Nhưng lưu ý rằng trong mọi trường hợp, niềng răng mở và đóng (ngoặc, dấu ngoặc đơn) nên được đặt trong dòng riêng của họ. Vì vậy, những điều sau đây sẽ là vi phạm tiêu chuẩn PEP 8:

# NOT PEP 8 COMPLIANT
age = {'Alice': 24,
       'Bob': 28,
       'Ann': 26,
       }

Lý do là cả hai niềng răng mở và đóng (ngoặc, dấu ngoặc đơn) nên được đặt trong dòng riêng của họ.

Tuy nhiên, tiêu chuẩn PEP 8 cho phép không đặt cả niềng răng mở và đóng (ngoặc, dấu ngoặc đơn) vào dòng riêng của họ nếu các đối số hoặc mục sắp xếp. Dưới đây là ba ví dụ tuân thủ PEP 8:

# PEP 8 Compliant
def f(argument_1, argument_2,
      argument_3, argument_4):
    None


# PEP 8 Compliant
def f(argument_1,
      argument_2,
      argument_3,
      argument_4):
    None


# PEP 8 Compliant
def f(argument_1, argument_2, argument_3, argument_4):
    None

Mặc dù dấu ngoặc đơn mở và đóng không được đặt vào dòng riêng của họ, nhưng nó vẫn tuân thủ PEP 8 vì các đối số phù hợp trong hai ví dụ đầu tiên.

Các mã tương tác sau đây vẫn chưa sẵn sàng. Nó đòi hỏi siêu năng lực gỡ lỗi của bạn:

Bài tập: Gỡ lỗi mã để nó chạy. Phương pháp nào là phương pháp ưa thích của bạn?: Debug the code so that it runs. Which indentation method is your preferred one?

Tại sao kết thúc danh sách Python với dấu phẩy kéo dài?

Chúng tôi đã thấy nhiều ví dụ về các cấu trúc đa dòng trong đó có một dấu phẩy kéo theo yếu tố danh sách cuối cùng:

# PEP 8 Compliant
age = {
    'Alice': 24,
    'Bob': 28,
    'Ann': 26,
    }

Dấu phẩy kéo theo dòng cuối cùng trong từ điển (

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
# end if
else:
print 'oops!'
# end if
# end def foobar
0) là tùy chọn theo tiêu chuẩn PEP 8.optional according to the PEP 8 standard.

Xin lưu ý: Bạn sẽ tìm thấy nhiều ý kiến ​​trên web nơi các chuyên gia của người Hồi giáo nói với bạn rằng cần có dấu phẩy kéo dài (như ở đây). Nhưng điều này không được nêu rõ ràng trong tiêu chuẩn. Trên thực tế, tiêu chuẩn khuyên bạn nên sử dụng dấu phẩy nếu các mục của bạn [được] dự kiến ​​sẽ được mở rộng theo thời gian (nguồn). Trong trường hợp này, nó dễ dàng hơn để sao chép và dán các mục mới vào danh sách (hoặc từ điển) mà không cần phải thêm dấu phẩy theo cách thủ công vào mục cuối cùng cũ và loại bỏ dấu phẩy kéo theo mục cuối cùng mới. you’ll find many opinions on the web where “experts” tell you that the trailing comma is required (like here). But this is not explicitly stated in the standard. In fact, the standard recommends that you use the comma if your “items [are] expected to be extended over time” (source). In this case, it’s easier to copy&paste new items into the list (or dictionary) without having to manually add a trailing comma to the old last item and removing the trailing comma after the new last item.

Nói cách khác, cấu trúc đa dòng sau đây cũng hợp lệ và hoàn toàn tuân theo tiêu chuẩn PEP 8:

# PEP 8 Compliant
age = {
    'Alice': 24,
    'Bob': 28,
    'Ann': 26
    }

Lưu ý rằng dấu phẩy bị thiếu. Nhưng nếu bạn không có kế hoạch mở rộng danh sách của mình theo thời gian, thì bạn sẽ rất tốt khi sử dụng điều này ngay cả khi một số trình kiểm tra kiểu mã Python (lin linters)) phàn nàn.

Cấu trúc đa dòng lồng nhau

Bây giờ, bạn chỉ cần quyết định về phương pháp nào ở trên bạn chuẩn bị viết mở và đóng niềng răng, ngoặc hoặc dấu ngoặc đơn. Tại đây, cách bạn có thể làm tổ chúng và tuân thủ tiêu chuẩn PEP 8:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
0

Bạn thấy rằng chúng ta đặt từng nẹp, khung và dấu ngoặc đơn trong một dòng. Dòng tiếp theo bắt đầu với bốn vết lõm khoảng trắng. Sau đó đến các mặt hàng, theo sau là một dấu phẩy. Bản thân các mặt hàng cũng có thể là một cấu trúc đa dòng là tốt. Nhưng nếu bạn hiểu cách viết một cấu trúc đa dòng, bạn cũng sẽ hiểu cách làm tổ chúng.

Câu hỏi tương tự

Niềng răng xoăn có nên xuất hiện trên dòng riêng của họ không?

Vâng, họ nên xuất hiện trên dòng riêng của họ. Một ngoại lệ là nếu bạn viết toàn bộ chuỗi các mục trong một dòng. Trong trường hợp này, nẹp đóng, khung hoặc dấu ngoặc đơn cũng sẽ xuất hiện ở cuối cùng một dòng.

Đâu để đặt nẹp đóng?

Như đã thảo luận trước đây, bạn xếp nó lên với ký tự không phải là màu đầu tiên của dòng trước hoặc với ký tự đầu tiên bắt đầu cấu trúc đa dòng.

Quy tắc Flake-8: Dòng tiếp tục không được sắp xếp cho thụt lề treo (E131)

Đây là một lỗi phổ biến của bộ phân tích mã Flake-8. Một dòng tiếp tục không được sắp xếp để treo thụt lề.

Chống lại mẫu::

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
1

Thực hành tốt nhất::

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'
2

Nghệ thuật của mã sạch

Hướng dẫn does python follow the indentation instead of brackets? - python có tuân theo thụt lề thay vì dấu ngoặc vuông không?

Hầu hết các nhà phát triển phần mềm lãng phí hàng ngàn giờ làm việc với mã quá phức tạp. Tám nguyên tắc cốt lõi trong nghệ thuật mã hóa sạch sẽ dạy bạn cách viết mã rõ ràng, có thể duy trì mà không ảnh hưởng đến chức năng. Nguyên tắc hướng dẫn của cuốn sách là sự đơn giản: giảm và đơn giản hóa, sau đó tái đầu tư năng lượng vào các phần quan trọng để tiết kiệm cho bạn vô số giờ và giảm bớt nhiệm vụ khó khăn trong việc bảo trì mã.

  1. Tập trung vào những thứ quan trọng với nguyên tắc 80/20 - tập trung vào 20% mã của bạn quan trọng nhất80/20 principle — focus on the 20% of your code that matters most
  2. Tránh mã hóa trong sự cô lập: Tạo một sản phẩm khả thi tối thiểu để nhận phản hồi sớmminimum viable product to get early feedback
  3. Viết mã sạch sẽ và đơn giản là để loại bỏ sự lộn xộn & nbsp;eliminate clutter 
  4. Tránh tối ưu hóa sớm có nguy cơ chuyển đổi quá mức mã & nbsp; that risks over-complicating code 
  5. Cân bằng mục tiêu, năng lực và phản hồi của bạn để đạt được trạng thái dòng chảy hiệu quảFlow
  6. Áp dụng triết lý tốt làm một điều để cải thiện chức năng rất nhiềuDo One Thing Well philosophy to vastly improve functionality
  7. Thiết kế giao diện người dùng hiệu quả với ít nguyên tắc hơnLess is More principle
  8. Liên kết các kỹ năng mới của bạn lại với nhau thành một nguyên tắc thống nhất: Tập trungFocus

Nghệ thuật mã hóa sạch dựa trên Python phù hợp cho các lập trình viên ở bất kỳ cấp độ nào, với các ý tưởng được trình bày một cách bất khả tri về ngôn ngữ.The Art of Clean Coding is suitable for programmers at any level, with ideas presented in a language-agnostic manner.


Đi đâu từ đây?

Đủ lý thuyết. Hãy để có được một số thực hành!

Các lập trình viên được trả tiền sáu con số và hơn thế nữa vì họ có thể giải quyết các vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa.

Để trở nên thành công hơn trong việc mã hóa, giải quyết nhiều vấn đề thực sự hơn cho người thực. Đó là cách bạn đánh bóng các kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, những gì mà việc sử dụng lý thuyết học tập mà không ai cần?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế!

Bạn có muốn ngừng học hỏi với các dự án đồ chơi và tập trung vào các dự án mã thực tế kiếm tiền cho bạn và giải quyết các vấn đề thực sự cho mọi người?

Nếu câu trả lời của bạn là có !, Hãy xem xét việc trở thành một nhà phát triển tự do Python! Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện các kỹ năng trăn của bạn, ngay cả khi bạn là người mới bắt đầu hoàn toàn.YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi Làm thế nào để xây dựng kỹ năng thu nhập cao của bạn Python và tìm hiểu cách tôi phát triển kinh doanh mã hóa của mình trực tuyến và làm thế nào bạn có thể, từ sự thoải mái của bạn riêng nhà.

Tham gia hội thảo trên web miễn phí ngay bây giờ!

Hướng dẫn does python follow the indentation instead of brackets? - python có tuân theo thụt lề thay vì dấu ngoặc vuông không?

Trong khi làm việc như một nhà nghiên cứu trong các hệ thống phân tán, Tiến sĩ Christian Mayer đã tìm thấy tình yêu của mình đối với việc dạy các sinh viên khoa học máy tính.

Để giúp học sinh đạt được thành công cao hơn của Python, ông đã thành lập trang web giáo dục chương trình Finxter.com. Ông là tác giả của cuốn sách lập trình phổ biến Python Oneer (Nostarch 2020), đồng tác giả của loạt sách Break Break Python, những cuốn sách tự xuất bản, người đam mê khoa học máy tính, freelancer và chủ sở hữu của một trong 10 blog Python lớn nhất trên toàn thế giới.

Niềm đam mê của ông là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ tăng cường các kỹ năng của họ. Bạn có thể tham gia học viện email miễn phí của anh ấy ở đây.

Tại sao Python sử dụng vết lõm thay vì niềng răng?

Python chỉ sử dụng quy ước (gần như phổ quát) này như là một phần của cú pháp cho phép nó phân phối với các mã thông báo kết thúc khối khác. Một số người cho rằng cú pháp này giúp tránh các tình huống trong đó mã không khớp với ý định rõ ràng (khi thụt lề không phù hợp với cấu trúc từ vựng).allows it to dispense with other block ending tokens. Some argue that this syntax helps avoid situations where the code doesn't match the apparent intent (when the indentation is subtly inconsistent with the lexical structure).

Python có dựa vào vết lõm không?

Thẩm lớp đề cập đến các không gian ở đầu một dòng mã. Trong trường hợp trong các ngôn ngữ lập trình khác, sự thụt lề trong mã chỉ dành cho khả năng đọc, việc thụt vào python là rất quan trọng. Python sử dụng thụt lề để chỉ ra một khối mã.Python uses indentation to indicate a block of code.

Python không sử dụng dấu ngoặc?

Một trong những khác biệt lớn nhất giữa Python và các ngôn ngữ lập trình phổ biến khác là trong Python, niềng răng xoăn không được sử dụng để tạo các khối chương trình để kiểm soát dòng chảy.Trong Python, thụt lề được sử dụng để điều khiển dòng chảy, giúp Python dễ đọc hơn nhiều so với hầu hết các ngôn ngữ lập trình khác.curly braces are not used to create program blocks for flow control. In Python, indentation is used for flow control, which makes Python much easier to read than most other programming languages.

Làm thế nào để Python xử lý vết lõm?

Làm thế nào để giải quyết một lỗi thụt lề trong Python ?..
Kiểm tra sai không gian trắng hoặc tab.....
Hãy chắc chắn rằng thụt vào một khối cụ thể vẫn giữ nguyên trong suốt mã, ngay cả khi một khối mới được giới thiệu ở giữa.....
Chuyển đến Cài đặt trình soạn thảo 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 ..