Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Bỏ qua nội dung

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Nếu có một điều gì đó về Python mà hơi khó chịu, thì đó là sự thiếu hoàn toàn của niềng răng, hoặc như họ đã gọi bằng tiếng Anh Mỹ, những người treo. Một tính năng của mỗi loại C, Java, PHP, Perl và cả một loạt các ngôn ngữ rất mạnh mẽ khác, niềng răng làm cho mọi thứ trở nên dễ đọc hơn và không dựa vào thụt đầu tiên. [Ruby] và [ERAN] đã đưa ra một cách để sử dụng các dấu chấm câu này với Python trong một dự án mà họ gọi là Python với niềng răng.

Đúng như tên gọi của nó, Python với niềng răng không quan tâm đến thụt lề: Bạn có thể tự do làm cho bạn mã & nbsp; cực kỳ xấu xí hoặc viết mã của bạn đúng cách theo kiểu K & R. Mỗi dòng được chấm dứt trong một dấu chấm phẩy và các khối mã chỉ có một câu lệnh don don yêu cầu niềng răng xoăn, giống như C và Java.

Ngay bây giờ [Ruby] và [ERAN] có trình cài đặt Windows với gói OS X trên đường. Việc thực hiện một python với tập lệnh niềng răng chỉ yêu cầu thực hiện nó bằng một thực thi ‘pythonb, thay vì thực thi’ python bình thường.

Có một giải pháp cho vấn đề của bạn được phân phối với chính Python. pindent.py, 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:

pindent.py -c myfile.py

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 đó myfile.py 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 pindent.py -r để chèn các vết lõm 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 pindent.py -r myfile.py sẽ chuyển đổi mã sau trong myfile.py thành cùng một mã được thụt đúng (và cũng được bình luận) được tạo 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!'
0 ở 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 đỡ.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Sở thích cá nhân của Graydon và để làm cho các lập trình viên C ++ cảm thấy như ở nhà. Cá nhân tôi thích cú pháp dựa trên khoảng trắng, nhưng tôi cũng không phải là người khó tính. Khi thiết kế một ngôn ngữ, bạn khá nhiều phải chọn một và làm ai đó thất vọng.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Trở thành một người chỉ được lập trình bằng các ngôn ngữ sử dụng dấu ngoặc, tôi thực sự, thực sự không nhận được không gian trắng này .. Nó xuất hiện, ít nhất là để đọc mã rất khó khăn. Với dấu ngoặc, tôi có thể quét một trang mã và xem các khối mã liên quan.

Những lợi thế khi sử dụng không gian trắng là gì?

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tất nhiên đó là một sở thích cá nhân nhưng theo tôi, nó thực sự làm cho mã dễ đọc hơn nhiều. Nó buộc mọi người phải sử dụng các quy ước tương tự để thụt vào và nó nhận được 'sự lộn xộn (ngoặc)' ra khỏi đường để bạn có thể tập trung vào những gì quan trọng, mã.

Các khối dễ dàng được xác định bởi thụt lề của chúng. Nó có thể mất một chút quen thuộc nhưng tôi thấy nó rất dễ chịu.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi không thể nghĩ "buộc mọi người phải sử dụng các quy ước tương tự cho thụt lề" như một điều hoàn toàn tốt, bất kỳ điều gì hơn là "buộc mọi người viết bình luận bằng tiếng Anh thế kỷ 18".

Chắc chắn, bạn làm cho người xem ngẫu nhiên dễ dàng được chuẩn bị luôn luôn hiểu ngay những gì đang diễn ra, nhưng đồng thời, lập trình viên viết cho chính mình hoặc của một nhóm nhỏ người khác sẽ thấy mình bị hạn chế bởi Một kế hoạch toàn trị nói với họ những gì họ có thể diễn đạt và những gì họ không thể. Giả định rằng hầu hết các mã được viết cho hầu hết mọi người đọc đơn giản là không đúng và mã dành cho quần chúng luôn có thể giải quyết vấn đề bằng cách áp đặt các hướng dẫn về phong cách.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi không thể hiểu làm thế nào để buộc quy ước mã hóa có thể dẫn đến "bị hạn chế bởi một kế hoạch toàn trị". Chúng tôi đang viết bằng một ngôn ngữ chính thức thay vì tiếng Anh. Phong cách là nơi cuối cùng bạn muốn sáng tạo. Sử dụng bạn sáng tạo để thể hiện các thuật toán, không phải là phong cách giằng.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Nhưng nó không chỉ đơn giản là vấn đề sáng tạo. Ngoài các trường hợp gây tranh cãi liên quan đến sự thiếu sót hoàn toàn của thụt lề (nếu (sdfg) {a; b;}), cũng có những trường hợp thỉnh thoảng tôi lập luận rằng về mặt ngữ nghĩa, bạn có một khối, nhưng về mặt cú pháp, bạn không; Chẳng hạn, tôi luôn luôn ủng hộ cách tiếp cận khi viết mã OpenGL để thụt lại mọi thứ giữa glbegin và Glend để tách dữ liệu đỉnh khỏi mã xung quanh và cho thấy ngay lập tức các đối tượng trong cảnh được nhóm lại như thế nào. Tôi nghĩ rằng một số ngôn ngữ dựa trên thụt lề sẽ bỏ qua sự gia tăng thụt đầu tiên ở đây và xem xét giảm thụt đầu trước khi glend là kết thúc của khối chứa nhóm các câu lệnh ...

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Trên thực tế, nó không toàn trị như bạn ngụ ý. Đó chỉ là một cách khác để thể hiện các khối mã. Các ngôn ngữ đánh dấu các khối sử dụng vết lõm khoảng trắng (như Python hoặc Haskell) thường không buộc bất kỳ lượng thụt nào cụ thể. Các dòng liên tiếp với cùng một lượng tiền tố Whitespace được coi là một phần của cùng một khối.

Hầu hết các dự án/công ty có tiêu chuẩn thụt/phong cách để mã có thể được truyền đạt qua các cá nhân. Khi bạn thêm vào kiểu thụt, niềng răng có vẻ dư thừa và chỉ là tiếng ồn và rất có thể xảy ra lỗi.

Mặc dù vậy, tôi phải thừa nhận các hệ thống toàn trị thường giúp mọi người làm việc cùng nhau :)

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Khi tôi nhìn vào mã, tôi thấy cấu trúc. Trước khi tôi thấy các squiggles, dấu ngoặc, dấu chấm phẩy riêng lẻ, tôi thấy các cấu trúc và khối mã. Một khối mã được thụt vào trong một khối khác, "Ồ, đây là một khối lớn ở đây", "Đây là 3 cái lồng nhau", v.v. Giá đỡ không giúp tôi ở đó nhưng thụt lề thì có.

Hãy để tôi hỏi bạn điều này, bạn đã thụt mã mã của bạn? Nếu không, đó có lẽ là một mớ hỗn độn và tôi sẽ không muốn tiếp tục chuyển đổi với bạn. Nhưng, nếu bạn đã thụt mã mã của mình, vậy tại sao bạn cần dấu ngoặc? Bạn đang lãng phí không gian và bạn đang lặp lại chính mình. Nó giống như thực thi rằng mọi tuyên bố của "Int Counter" sẽ được theo sau bởi một nhận xét nói rằng "// Tuyên bố của bộ đếm là một int".

Lý do duy nhất để sử dụng dấu ngoặc là thu nhỏ một đoạn mã hoặc thu hút các lập trình viên C ++ hoặc C. Vì vậy, JavaScript lợi ích từ việc có dấu ngoặc. Tôi đoán Rust cũng vậy vì nó đang cố gắng thu hút các lập trình viên C ++.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Chân đế và dấu ngoặc đơn giúp tôi hiểu cấu trúc và dòng chảy của mã trong nháy mắt. Thắng cũng giúp, nhưng nó không hoàn toàn phụ thuộc vào cú pháp cấu trúc. Nó giống như dấu phẩy, dấu chấm phẩy, thời kỳ, đoạn văn, vv bằng văn bản. Chúng là công cụ để giúp bạn truyền đạt ý nghĩa không rõ ràng từ chính các từ.

Chủ nghĩa tối giản vì lợi ích riêng của nó là một kiểu mẫu trong thiết kế ngôn ngữ. Tôi sẽ rất hạnh phúc khi meme này chết.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Không có thông tin cấu trúc nào trong một khối mã Python so với trong một khối mã C. Một khi bạn đã quen với cú pháp và ngữ nghĩa ngôn ngữ, bạn sẽ dễ dàng có thể hiểu được cấu trúc và dòng chảy trong nháy mắt.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Dấu ngoặc cung cấp cho biên tập viên của bạn thông tin cần thiết để tự động suy ra phạm vi và thực hiện định dạng lại thông minh. Không có nó, bạn hoàn toàn là của riêng bạn.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Và biên tập viên của tôi (hoặc bất kỳ trình soạn thảo giỏi nào tôi tranh luận) có thể làm điều tương tự với thụt lề cũng dễ dàng.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Điều gì được coi là "tốt"? Theo định nghĩa của bạn, đó là một trong đó có thể cung cấp giúp các khối dựa trên thụt lề. :-)

Tôi không thể phụ thuộc vào việc có một trình soạn thảo "tốt". Tôi có 2 máy làm việc, 2 máy gia đình, SSH đến VPS, SSH đến một loạt các máy tại nơi làm việc, v.v ... Vì vậy, tôi thường không phải sử dụng VIM để chỉnh sửa mã nhanh. Tôi cũng thường buộc phải sử dụng XCODE của Apple cho các ứng dụng OBJ-C, nhưng sử dụng các biên tập viên khác cho bất cứ điều gì khác. Làm việc một mình đồ chơi của tôi so với làm việc tại nơi làm việc, so với việc ở trường thay vì một thực thể thương mại có giấy phép phần mềm đẹp cũng có nghĩa là tôi không thể phụ thuộc vào việc có cùng một trình soạn thảo văn bản, ngoài những người miễn phí.

Tôi muốn sử dụng ngôn ngữ lập trình dễ đọc và viết trong bất kỳ trình soạn thảo văn bản nào. Yêu cầu duy nhất tôi không thể dễ dàng trốn thoát là biên tập viên phải hỗ trợ tự động. (Vì vậy, MS Notepad đã ra ngoài.)

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

> Tôi muốn sử dụng ngôn ngữ lập trình dễ đọc và viết trong bất kỳ trình soạn thảo văn bản nào.

Trên thực tế, bạn có thể áp dụng đối số đó cho các ngôn ngữ chỉ có khoảng trắng, bởi vì chúng tạo ra mã phù hợp hơn. Vì vậy, vì mã nhất quán, nó cũng dễ đọc và viết hơn (trái ngược với nói, xử lý định dạng lập dị của ai đó).

VIM hoặc Emacs (cái tôi sử dụng) có sẵn cho bất kỳ hệ điều hành hiện đại nào ngoài kia. Nó là miễn phí và có cú pháp nổi bật nổi bật và hoạt động thông qua một thiết bị đầu cuối theo như tôi biết.

Nói chung, có vẻ như đây là một cái đuôi vẫy vấn đề về con chó - chọn một ngôn ngữ để làm việc với (những gì dường như là một biên tập viên bị hỏng).

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Nói chung có vẻ như đây là một cái đuôi vẫy vấn đề về con chó

Tôi đồng ý nhưng ngược lại. Bạn sẵn sàng từ bỏ một cú pháp có thể nhìn thấy tầm thường chỉ để tránh gõ một vài niềng răng?

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Nó không thể vì vết lõm là một phần của mã. Nếu tôi chạy một tệp nguồn Java thông qua một tập lệnh loại bỏ tất cả khoảng trắng, tôi có thể lấy lại một tệp được định dạng đẹp mắt với một phím duy nhất. Điều này thực sự là không thể đối với các ngôn ngữ khoảng trắng như Python và Haskell.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Nhưng tương tự như vậy, nếu tôi loại bỏ tất cả các niềng răng khỏi Java, tôi không nhất thiết phải lấy lại chúng bằng một phím.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Biên tập viên của tôi (EMACS) thực hiện một công việc tuyệt vời trong việc định dạng mã Python. Nếu trình biên dịch và mắt của bạn có đủ thông tin về cách mã là cấu trúc từ thụt lề, thì trình soạn thảo của bạn cũng vậy.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Trở thành một người chỉ từng được lập trình bằng các ngôn ngữ sử dụng khoảng trắng hoặc parens, tôi thực sự, thực sự không nhận được thứ niềng răng xoăn. :) Không gian trắng rất dễ đọc và rõ ràng là một sự phân biệt của codeblocks như niềng răng xoăn.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Là một người sử dụng cả hai liên tục, ngôn ngữ khoảng trắng và niềng răng xoăn là như nhau. Đối với một lập trình viên giỏi, cô ấy có thể lấy ra nẹp xoăn và nó sẽ trông giống như một ngôn ngữ khoảng trắng. Tương tự như vậy, một ngôn ngữ khoảng trắng sẽ chỉ có niềng răng ở mọi nơi sẽ có một sự thay đổi thụt. '{' cho thụt lề chuyển tiếp và '}' cho thụt lề ngược.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Chính xác, tôi đồng ý.

Đủ với Bikeshing! Có nhiều điều thú vị hơn về Rust để thảo luận hơn thế này.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Vấn đề với khoảng trắng đáng kể là nó tạo ra các nhiệm vụ thường xuyên như sao chép & dán và thay đổi các khối xung quanh một bài tập dễ bị lỗi và lỗi thay vì một nhiệm vụ biên tập viên tầm thường. Thay vào đó, hãy cho tôi một cú pháp cho phép trình chỉnh sửa của tôi hoàn toàn và chính xác định dạng lại toàn bộ tệp với khóa.

Thắng đáng kể là điều số 1 giữ tôi ở khoảng cách từ Haskell và CoffeeScript.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi đã nghe điều này trước đây và sau khi làm việc trong một cơ sở mã Python 250k LỘC trong 4 năm, tôi không thể nói rằng đây thực sự đã từng là một vấn đề.

Bất kỳ trình soạn thảo tốt nào cho phép bạn xử lý phần thụt khối rất đơn giản, và thường dễ dàng nhìn thấy mức độ thụt nên là gì.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi thấy rằng không gian trắng đáng kể là một vấn đề chủ yếu khi đi giữa các biên tập viên, và chủ yếu là do không gian so với các vấn đề về tab. Ví dụ. Nếu tôi sao chép-dán từ VIM trong Terminal vào TextWrangler (BBedit miễn phí) thì tất cả các tab đã trở thành không gian, mà Python sẽ ném phù hợp. Tương tự nếu tôi sao chép mã-dán từ một trang web hoặc mục blog.

Trong các ngôn ngữ với () hoặc {} Tôi có thể nhấn một khóa để định dạng lại mã được sao chép. Trong Python tôi phải làm điều đó bằng tay.

Khi nói đến việc di chuyển các khối mã python xung quanh bên trong một tệp nguồn, thì đó là một vấn đề đơn giản để nhấn vào phím nóng cộng/trừ.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Sử dụng các tab thay vì không gian không phải là một thực hành được khuyến nghị cho Python, hoặc hầu hết các ngôn ngữ định hướng không gian trắng mà tôi biết. Việc áp dụng thực tiễn tốt nhất đó dường như sẽ làm giảm bớt hầu hết các mối quan tâm của bạn mà bạn đã liệt kê ở đây.

Hầu hết các biên tập viên thậm chí cho phép bạn xử lý điều đó trên cơ sở FileType, vì vậy bạn có thể sử dụng 4 khoảng trống cho Python và các tab cho các tệp C của bạn.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tại sao tôi thậm chí nên lãng phí thời gian của mình để lo lắng về việc cung cấp không gian hoặc tab mỗi khi tôi đến một dòng mới trong khi lập trình.

Đó được cho là công việc biên dịch. Tôi ở đây để làm của tôi.

Không có gì ngạc nhiên khi nhiều người ghét phân tích cú pháp dựa trên khoảng trắng.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

> Tại sao tôi thậm chí nên lãng phí thời gian của mình để lo lắng về việc cung cấp không gian hoặc tab mỗi khi tôi đến một dòng mới trong khi lập trình.

Bạn đang nói về cái gì? Tại sao bạn không có trình soạn thảo của mình chỉ chèn số lượng khoảng trống chính xác khi bạn nhấn phím tab? Nó hoạt động tốt cho tất cả các công việc python của tôi.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tại sao tôi không thể trả lời câu trả lời cho bình luận của tôi?

Dù sao, đó là Tab so với Space Flamewar, War War thực tiễn tốt nhất, v.v.

Tóm lại, tôi không thích không gian vì các biên tập viên không dễ dàng điều hướng trở lại/chuyển tiếp 4 (hoặc 2) không gian như để điều hướng 1 tab. Ví dụ khó chịu nhất của điều này: sự kết hợp của Keypresses để có được từ giữa một dòng đến đầu của một dòng? Trong Notepad ++, thật dễ dàng, nhưng nó xcode CMD-bên trái của nó sau đó đánh vào bên phải cho mỗi không gian/tab bạn cần vượt qua. . nhưng vẫn hơi khó nhảy từ CMD sang Key.)

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Và bây giờ tôi sẽ giới thiệu Flamewar của biên tập viên: Trong VIM, chuyển từ bất cứ nơi nào trên một dòng sang ký tự không phải là màu đầu tiên trên dòng đó chỉ là ^, chuyển sang ký tự đầu tiên của dòng là 0. Nói chung, điều hướng trong VIM là bất khả tri (inasmuch khi bạn di chuyển xung quanh bởi những đoạn văn bản, không phải là nhân vật)

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi đã làm việc tại một công ty vài năm trước, đã trải qua một trang web hoạt động trên toàn trang web vì một kỹ sư đã hotfix một tập tin python với một biên tập viên chèn một tab thay vì một không gian. Nó cũng không dễ dàng để xác định vấn đề.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Chà, tôi không biết, tôi chưa bao giờ thực sự gặp vấn đề với nó, nhưng, như tôi nói, phần lớn mã của tôi đã ở trong Python và Clojure. Tôi không tranh cãi với niềng răng, btw, đó chỉ là một dấu phân cách khác như khoảng trắng. Tất cả chỉ là những loại điều bạn sẵn sàng đào tạo bộ não của bạn để làm, IMO.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

IMVHO: Niềng răng xoăn giống như dấu chấm câu trong một ngôn ngữ, trong đó chúng rất rõ ràng đánh dấu sự khởi đầu, kết thúc và vân vân. Nhưng, vâng, đó là một vấn đề rất phong cách, nhưng với tôi mã không có niềng răng xoăn cảm thấy rất khỏa thân.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi không biết liệu điều này có áp dụng cho bạn không, nhưng cũng có thể "xem" các khối chỉ bằng cách thụt vào.

Nếu bạn cho rằng điều này là có thể, và mắt của bạn có thể được sử dụng để đọc mã chỉ bằng cách chặn của nó, thì dấu ngoặc là không cần thiết, thậm chí là thừa.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Meh ... Tôi đã viết cả Python và C/C ++/Java, và tôi không đồng ý rằng có thể đạt đến điểm mà thụt lề hoàn toàn làm giảm nhu cầu về dấu ngoặc trong các khối xác định. Điều đó có thể đúng nếu bạn luôn giữ các khối cực kỳ ngắn và nếu bạn không bao giờ có nhiều hơn một vài cấp độ thụt, nhưng trong mã thế giới thực dường như không bao giờ hoàn toàn phù hợp với lý tưởng Platonic đó.

Tuy nhiên, tôi sẽ cho rằng phương pháp Python không hoàn toàn tệ như tôi nghĩ, và nó có thể đến gần để phù hợp với khả năng đọc "mã với niềng răng". Nhưng, đối với tôi, ít nhất, niềng răng (và những người được căn chỉnh theo chiều dọc ở đó, dangit) hoàn toàn làm cho mã dễ đọc hơn.

YMMV, Ianal, HTH, WTFBBQ, v.v ...

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Nó giống như trở thành song ngữ. Khi bạn chỉ biết tiếng Anh, các ngôn ngữ khác hoàn toàn khó hiểu, nhưng một khi bạn học ngôn ngữ thứ hai, bạn có thể dễ dàng chọn ra các tác phẩm khác.

Nếu tất cả những gì bạn biết là {}, thì mã khác khó đọc hơn. Khi bạn học một ngôn ngữ giống như Lisp hoặc ngôn ngữ giống như Python thì bạn học cách nhìn thấy các khối mã mà không có {}. Đây là những gì đã xảy ra với tôi. (Tôi đã bị buộc phải học chương trình học ở trường. Chỉ sau đó tôi đã quyết định rằng Python là ngôn ngữ OK.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

> Cũng có thể "nhìn thấy" các khối chỉ bằng cách thụt vào.

Miễn là không có quá nhiều dòng mới trong các khối ...

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi đoán là vì họ chủ yếu cố gắng thu hút các lập trình viên C ++ đang tìm kiếm ngôn ngữ hệ thống an toàn hơn là các lập trình viên Python tìm kiếm một ngôn ngữ cấp thấp dễ tiếp cận hơn.

Ngẫu nhiên, tôi là người sau, và tôi rất quan tâm đến rỉ sét.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi cũng thấy rỉ sét rất thú vị. Đối với mục tiêu của GO, tôi nghĩ rằng nó hoạt động tốt khi sử dụng Python cho hầu hết mọi thứ và gọi C cho các phần quan trọng hiệu suất. Nhưng tôi đã cảm thấy khó chịu trong một thời gian dài bởi mức độ thường xuyên xảy ra các chương trình về các lỗi đơn giản không nên xảy ra, như những con trỏ null và tràn bộ đệm. Tôi thực sự hy vọng rỉ sét (hoặc một cái gì đó tương tự) có thể cất cánh.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Có rất nhiều điều thích về rỉ sét: tính bất biến như mặc định, khớp mẫu, phá hủy, coroutines, sử dụng LLVM, không có giao diện phân cấp, không có con trỏ null, thử nghiệm tích hợp. Thật thú vị, trình biên dịch rỉ sét được viết bằng chính bị rỉ sét. Nếu bạn sử dụng Mac, có homebrew cho rỉ sét. Tôi hy vọng Rust sẽ cất cánh.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Các nhà phát triển đằng sau nó có nền C ++. Phong cách mã không phải là điểm của ngôn ngữ, và do đó họ đã đi với một cái gì đó quen thuộc với các nhà phát triển làm việc trên nó.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi biết rằng một số chuyên gia PL có xu hướng viết ra cú pháp như một vấn đề có tầm quan trọng thứ cấp, nhưng đối với nhiều nhà phát triển, đó là một phần quan trọng của khả năng đọc mã. Tôi đã dành quá nhiều thời gian để cố gắng gỡ rối khối lượng JavaScript không được viết với các mức độ thụt khác nhau (hoặc không) và niềng răng nằm rải rác trên màn hình. Tôi thích làm việc với Python, CoffeeScript và Haskell vì mã hầu như luôn rất dễ đọc vì khoảng trắng (từ những gì tôi đã thấy, Ruby cũng rất dễ đọc). Tôi rất quan tâm đến Rust như một sự thay thế có thể cho C hoặc C ++ - Go là một tài năng hơn vì tôi thậm chí không thể biên dịch như thư viện đối tượng được chia sẻ trong đó. Tuy nhiên, tôi ước các nhà thiết kế Rust đã đưa ra các lập luận cho khoảng trắng được xem xét nghiêm túc. Có một số lượng lớn các lập trình viên Python và Ruby đang tìm kiếm một giải pháp thay thế cho C và C ++ như một ngôn ngữ cấp thấp hơn để gọi bằng FFI khi chúng ta cần nhiều tốc độ hơn và đối với hầu hết chúng ta, khả năng đọc (và do đó là cú pháp) là vấn đề lớn . Tuy nhiên, Rust có vẻ như là một ngôn ngữ rất tuyệt vời và tôi mong muốn được thử nó.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi hiểu lý do của bạn, tôi tìm thấy các cấu trúc như:

  if(foo) { doSomething(); } else { doSomethingElse(); }
là khá không thể đọc được. Giải pháp của tôi là không viết nó theo cách đó.

Quan sát của tôi là phong cách mã rất quan trọng đối với các nhà phát triển Ruby và Python và ít quan trọng hơn đối với những người từ các nền tảng gia đình C. Đó là, rất nhiều nhà phát triển Ruby, ví dụ, từ chối chạm vào bất cứ điều gì có chứa niềng răng trong khi một số nhà phát triển gia đình C yêu cầu họ.

Tôi nghĩ rằng giải pháp là các nhà phát triển có nền Python/Ruby cần tạo ra một ngôn ngữ hệ thống, thay vì mong đợi những người có nền tảng khác nhau sẽ được chuyển đổi thành tư duy Python/Ruby-ist. Nhưng trong thực tế, dường như rất ít nhà phát triển Python/Ruby là tất cả những gì quan tâm đến các ngôn ngữ hệ thống trong khi những người có nền tảng gia đình C rất quan tâm (do đó tình huống hiện đang tồn tại).

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Fork Rust và chỉ thay đổi cú pháp, chỉ để làm cho nó sử dụng khoảng trắng cho các khối. Các chuyên gia PL xem cú pháp là thứ yếu bởi vì đó là thứ có thể tùy ý thay đổi. Lấy vợt chẳng hạn. Họ tích hợp vào ngôn ngữ khả năng cắm vào các cú pháp tùy ý và vẫn sử dụng cùng một công cụ ngôn ngữ và API. Tôi đã cảm thấy mệt mỏi với () khi tôi đang học vợt và viết một cú pháp thay thế sử dụng thụt lề khoảng trắng và chuyển đổi thành mã vợt S-Exp tương thích 100%.

Vì vậy, bạn có thể có một phiên bản Rust dựa trên khoảng trắng dễ dàng.

Vấn đề thực tế là sau đó bạn sẽ chia cộng đồng giữa hai cú pháp vì bạn không thể sao chép các ví dụ mã dán từ một cú pháp này sang cú pháp khác. Đó có thể là vấn đề để xây dựng một cơ sở hỗ trợ lớn. Lấy D ví dụ như họ có vấn đề phân mảnh với hai thư viện tiêu chuẩn. Có lẽ một sự phân chia dựa trên cú pháp sẽ ít hơn? (Vì mã được viết trong người này có thể được chia sẻ với cái kia.) Nhưng nó vẫn sẽ gây ra vấn đề trong cách ngôn ngữ được bán cho các nhà phát triển mới.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Đã bao giờ có bất kỳ ngôn ngữ "có thể da" thành công nào (hoặc bất kỳ giao diện ngôn ngữ thành công nào)? Tôi đang nghĩ về những thứ như thông số kỹ thuật cho C ++, hoặc cách các ngôn ngữ chức năng nghiên cứu đôi khi cung cấp cả hai, ví dụ, một cú pháp C-ish và Lisp-ish biên dịch với cùng một thứ.

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Meta-Comment: Thật thú vị khi cách mặc định thay đổi theo thời gian ... khoảng 10 năm trước đây sẽ là "Tại sao Ruby sử dụng cú pháp kỳ lạ thay vì chỉ các dấu ngoặc như C/Java/JS/...?"

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Tôi đang chờ Python sửa chữa "từ __future__ Nhập niềng răng". Hoặc ít nhất thực hiện bắt buộc "vượt qua" cho cuối khối

Hướng dẫn why does python use indentation instead of braces? - tại sao python sử dụng thụt lề thay vì dấu ngoặc nhọn?

Đối với các khối mã lớn và nếu các cấp độ thụt đi sâu một chút. Không gian trắng làm cho khả năng đọc rất khó khăn.

Ngoài ra ngoài các dấu chấm phẩy không gây ra bất kỳ vấn đề nào ở nơi đầu tiên, vậy tại sao phải loại bỏ chúng?

Tại sao Python không sử dụng dấu ngoặc xoăn?

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.

Python có theo thụt lề thay vì dấu ngoặc không?

Python nổi tiếng trong số các ngôn ngữ lập trình cho cú pháp khá độc đáo của nó: thay vì được phân định bằng cách niềng răng xoăn hoặc từ khóa bắt đầu/kết thúc, các khối được phân định bằng vết lõm.blocks are delimited by indentation.

Chúng ta có thể sử dụng niềng răng trong Python không?

Biểu thị phạm vi với niềng răng dễ dàng tính năng nâng cao yêu thích của tôi trong Python, thay vì dựa vào khoảng trắng để biểu thị phạm vi (nhàm chán) - chúng ta có thể sử dụng niềng răng xoăn!we can use curly braces!