Hướng dẫn why does python not use curly braces? - tại sao python không sử dụng dấu ngoặc nhọn?

>>> from __future__ import braces
  File "", line 1
SyntaxError: not a chance

Vâng, đó là giải thích rất nhiều. Tuy nhiên, lưu ý rằng Python không hỗ trợ các khối mã Brace-D Curly! Hãy xem bên dưới:
Note however, that Python does natively support curly brace-d code blocks! Take a look at below:

if x: #{
    x += 1
#}

Đối với các lập trình viên ADA hoặc Pascal, tôi rất vui mừng khi tiết lộ cho bạn:

if x: #BEGIN
    ...
#END

Lấy từ các tài liệu:

Trình phân tích cú pháp của Python cũng đủ tinh vi để nhận ra các ký hiệu hỗn hợp, và thậm chí nó sẽ bắt gặp các trình phân cách bắt đầu hoặc kết thúc bị thiếu và sửa chữa chương trình cho người dùng. Điều này cho phép sau đây được công nhận là Python hợp pháp:

if x: #BEGIN
     x = x + 1
#}

Và điều này, đối với người dùng bash:

if x:
    x=99
#fi

Thậm chí tốt hơn, đối với các lập trình viên quen thuộc với C, C ++, v.v., bạn có thể bỏ qua hoàn toàn niềng răng xoăn chỉ cho một câu lệnh:

if x:
    do_stuff()

Xinh đẹp. Như đã đề cập trước đó, Python cũng có thể tự động sửa mã bằng các dấu phân cách không chính xác, vì vậy mã này cũng hợp pháp:

if x:
    do_a_hundred_or_more_statements()
    x = x + 1
    print(x)

Vì điều này phải khiến bạn yêu Python hơn nữa, tôi gửi cho bạn với một trích dẫn cuối cùng từ các tài liệu.

Bây giờ như bạn có thể thấy trong loạt các ví dụ này, Python đã nâng cao trạng thái của nghệ thuật công nghệ phân tích cú pháp và khả năng nhận dạng mã vượt xa các ngôn ngữ di sản. Nó đã làm điều này theo cách cân bằng cẩn thận phong cách mã hóa tốt với nhu cầu các lập trình viên lớn tuổi cảm thấy thoải mái với vẻ ngoài của cú pháp ngôn ngữ.

Hạn chế duy nhất là các phân định đặc biệt này được đi trước bởi biểu tượng hashtag. is that these special delimiters be preceded by a hashtag symbol.

Phạm vi giằng xoăn, tự động hóa và các phương pháp khác để viết mã tốt hơn

Ảnh của Josh Kahen trên unplash

Python sẽ luôn tìm thấy một cái gì đó để làm chúng tôi ngạc nhiên - đơn giản là có quá nhiều tính năng tuyệt vời được nhồi nhét vào ngôn ngữ. May mắn thay, điều này có nghĩa là chúng tôi không bao giờ hết mọi thứ để học.ython will always find something to surprise us with — there are simply far too many brilliant features crammed into the language. Fortunately, this means we never run out of things to learn.

Theo thời gian, tôi đã xây dựng thói quen ghi chú mọi tính năng mới mà tôi vấp ngã trong Python. Chủ yếu là họ rất thú vị nhưng đi kèm với các trường hợp sử dụng khá hẹp.

Tuy nhiên, những lần khác, tôi vấp phải một tính năng thực sự rất có thể áp dụng được - và thông thường, nó sẽ thay đổi cách tôi mã. Tôi theo dõi những điều này với một danh sách và bài viết này bao gồm năm tính năng yêu thích của tôi từ danh sách đó.

Get Method for Dictionaries - no more KeyErrors
Tree Datatypes - or autovivification
Advanced List Indexing - [::3]?
Decorator Functions - those @ things
Denote Scopes with Braces - not whitespace (my favorite feature)

Nhận phương pháp cho từ điển

Phương pháp từ điển

if x: #BEGIN
    ...
#END
6 thực hiện hoạt động tương tự như cú pháp
if x: #BEGIN
    ...
#END
7 phổ biến hơn với một sự khác biệt đáng kể - chúng tôi không có lỗi nếu
if x: #BEGIN
    ...
#END
8 không tồn tại trong từ điển của chúng tôi:

dictionary = {
'one': 1,
'two': 2
}
dictionary['three']

if x: #BEGIN
    ...
#END
9

Với GET -get

dictionary.get('three')

if x: #BEGIN
     x = x + 1
#}
0

Thay vì trả về KeyError, phương thức

if x: #BEGIN
    ...
#END
6 không trả về không.KeyError, the
if x: #BEGIN
    ...
#END
6 method returns None.

Chúng ta có thể tiến thêm một bước bằng cách chỉ định giá trị để trả về nếu

if x: #BEGIN
    ...
#END
8 không tồn tại với đối số thứ hai của phương thức
if x: #BEGIN
    ...
#END
6:

if x: #{
    x += 1
#}
0

if x: #BEGIN
     x = x + 1
#}
4

if x: #{
    x += 1
#}
1

if x: #BEGIN
     x = x + 1
#}
5

Cuối cùng, nếu bạn biết nội dung của từ điển của bạn - đừng sử dụng

if x: #BEGIN
    ...
#END
6 thì nó chậm hơn! (Cảm ơn Petru)

Kiểu dữ liệu cây

Một kiểu dữ liệu cây trông như thế này:

Biểu diễn cây của các từ trong một câu và các phần tương ứng của chúng của các thẻ lời nói (POS). Nguồn: Tác giả.

Nó đại diện cho một cấu trúc cây phân cấp với giá trị gốc ở lớp trên cùng, phân nhánh thành các nút con. Mỗi nút con có một nút cha và mỗi nút cha có thể có một hoặc nhiều nút con.

Bây giờ, đại diện của chúng tôi trong Python sẽ rất giống với một từ điển lồng nhau, mà chúng tôi sẽ xây dựng như thế này:

if x: #{
    x += 1
#}
2

Ở đây chúng ta cần xác định một từ điển mới cho mỗi nút trẻ, từng bước một.

Nó rất chậm, lộn xộn và dễ bị lỗi-hãy tưởng tượng điều này cho một cây năm lớp đơn giản trong đó mỗi nút cha mẹ chỉ có hai nút con.

May mắn thay, chúng ta có thể xây dựng kiểu dữ liệu cây của mình chỉ với điều này:

Bây giờ, thay vì xác định từng từ điển trẻ khi chúng ta đi, chúng ta có thể xây dựng toàn bộ các nhánh ngay lập tức:

if x: #{
    x += 1
#}
3 Cây phân loại của người bạn tốt nhất và những thứ khác mà mọi người thích. Ảnh của Jamie Street trên unplash (trái), ảnh của Kari Shea trên unplash (phải).man’s best friend and those other things people like. Photo by Jamie Street on Unsplash (left), Photo by Kari Shea on Unsplash (right).

Phương pháp này có một tên, tự động hóa - việc tạo tự động các mảng và băm mới mỗi khi giá trị không xác định được giải thích.

Một triển khai dòng duy nhất khác (không bao gồm nhập) có thể được tìm thấy ở đây.

Lập chỉ mục danh sách nâng cao

Các bước

Có một số phương pháp cắt danh sách chưa biết, mặc dù hữu ích. Đầu tiên trong số đó là việc sử dụng các bước:steps:

if x: #{
    x += 1
#}
4

if x: #BEGIN
     x = x + 1
#}
7

Cú pháp chúng tôi đang sử dụng ở đây là

if x: #BEGIN
     x = x + 1
#}
8 - bởi vì chúng tôi để trống
if x: #BEGIN
     x = x + 1
#}
9 và
if x:
    x=99
#fi
0, chúng tôi lặp lại từ đầu đến cuối danh sách, với
if x:
    x=99
#fi
1 của
if x:
    x=99
#fi
2.

if x: #{
    x += 1
#}
5

if x:
    x=99
#fi
3

Những lát được đặt tên

Phương pháp cắt danh sách nâng cao sau đây được gọi là các lát được đặt tên. Ở đây, chúng tôi gán một lát cho một biến, như vậy:named slices. Here, we assign a slice to a variable, like so:

if x: #{
    x += 1
#}
6

Sau đó, chúng tôi có thể áp dụng lát cắt được đặt tên này vào bất kỳ danh sách nào.

if x: #{
    x += 1
#}
7

if x:
    x=99
#fi
4

Cú pháp chúng tôi đang sử dụng ở đây sử dụng cùng một mẫu bắt đầu, kết thúc, bước -

if x:
    x=99
#fi
5. Chúng ta có thể viết lại
if x:
    x=99
#fi
6 như thế này:

if x: #{
    x += 1
#}
8

if x:
    x=99
#fi
7

Chức năng trang trí

Một chức năng trang trí là một trong những điều kỳ lạ

if x:
    x=99
#fi
8 mà tôi chắc chắn rằng nhiều người trong chúng ta đã thấy - đặc biệt, thư viện Flask tận dụng chúng.

Họ rất đơn giản đáng ngạc nhiên để hiểu và cực kỳ hữu ích. Các nhà trang trí chỉ cần cho phép chúng tôi sửa đổi hành vi của một chức năng mà không cần sửa đổi rõ ràng chức năng của chúng tôi.

Ví dụ: chúng ta có thể xác định hàm

if x:
    x=99
#fi
9 sẽ lặp lại thông qua một phạm vi, cuối cùng trả về in giá trị cuối cùng nhân với hai:

if x: #{
    x += 1
#}
9

if x:
    do_stuff()
0

Chức năng này sẽ không làm gì khác ngoài việc mất nhiều thời gian để chạy - nhưng đó là những gì chúng tôi muốn. Chúng ta sẽ đến lúc thời gian chạy của chức năng này bằng cách sử dụng chức năng trang trí.

Người trang trí được định nghĩa giống như bất kỳ chức năng bình thường nào:

if x: #BEGIN
    ...
#END
0

Sau đó, chúng ta có thể sử dụng cú pháp @ Weird @ đó khi xác định chức năng

if x:
    x=99
#fi
9 của chúng ta để kế thừa hành vi
if x:
    do_stuff()
2.

if x: #BEGIN
    ...
#END
1

Chúng tôi cũng có thể sử dụng nhiều nhà trang trí. Hãy để xác định một người khác được gọi là

if x:
    do_stuff()
3 sẽ lặp lại trên bất kỳ chức năng nào hai lần.

if x: #BEGIN
    ...
#END
2

Nếu bây giờ chúng tôi áp dụng cả hai người trang trí

if x:
    do_stuff()
4 và
if x:
    do_stuff()
5 cho các chức năng
if x:
    x=99
#fi
9 của chúng tôi, chúng tôi sẽ nhận được điều này:

if x: #BEGIN
    ...
#END
3

Ở đây, chúng tôi đã kết thúc

if x:
    x=99
#fi
9 vào
if x:
    do_stuff()
5 và chức năng kết quả thành
if x:
    do_stuff()
4 - giống như một số chức năng Python Frankenstein kỳ lạ của Frankenstein.

Các nhà trang trí chúng tôi đã sử dụng ở đây là những ví dụ đồ chơi đơn giản. Chúng ta có thể làm nhiều hơn nữa với các nhà trang trí - Tôi khuyên bạn nên xem xét các bài viết/tài nguyên này:a lot more with decorators — I would recommend taking a look at these articles/resources:

  • Primer on Python trang trí (một bài viết miễn phí, toàn diện về trang trí)
  • Fluent Python, Luciano Ramalho (rất nhiều Python - không chỉ là người trang trí)

Biểu thị phạm vi với niềng răng

Dễ dàng là 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!

Chúng tôi nhập chức năng từ thư viện

if x:
    do_a_hundred_or_more_statements()
    x = x + 1
    print(x)
0:

if x: #BEGIN
    ...
#END
4

Và chúng ta đi!

Đó là năm tính năng không phổ biến, nhưng các tính năng siêu tiện dụng trong Python. Một vài đề cập danh dự mà tôi đã muốn rời đi để thử:

if x: #BEGIN
    ...
#END
5

Tôi đã kết hợp một repo github nhỏ với các ví dụ về tất cả các tính năng trên, và hơn thế nữa, ở đây. Kiểm tra nó để biết đoạn mã - và tất nhiên, hãy tự thoải mái để thêm của riêng bạn!

Nếu bạn có bất kỳ đề xuất hoặc câu hỏi nào, vui lòng liên hệ qua Twitter hoặc trong các ý kiến ​​dưới đây. Hoặc, nếu bạn thích nhiều nội dung như thế này, tôi cũng đăng trên YouTube.

Cảm ơn vì đã đọc!

Python có thể sử dụng niềng răng xoăn không?

Niềng răng 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 để điều khiển 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.

Khung {} có nghĩa là gì trong Python?

Khung {} có nghĩa là gì trong Python?[] Dấu ngoặc được sử dụng cho danh sách.Nội dung danh sách có thể được thay đổi, không giống như nội dung tuple.{} được sử dụng để xác định từ điển trong danh sách của người Hồi giáo được gọi là nghĩa đen.used to define a dictionary in a “list” called a literal.