>>> 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 unplashPython 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
9Với GET -get —
dictionary.get['three']
if x: #BEGIN
x = x + 1
#}
0Thay 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
#}
0if x: #BEGIN
x = x + 1
#}
4if x: #{
x += 1
#}
1if x: #BEGIN
x = x + 1
#}
5Cuố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
#}
4if x: #BEGIN
x = x + 1
#}
7Cú 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
#}
5if x:
x=99
#fi
3Nhữ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
#}
6Sau đó, 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
#}
7if x:
x=99
#fi
4Cú 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
#}
8if x:
x=99
#fi
7Chứ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
#}
9if x:
do_stuff[]
0Chứ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
0Sau đó, 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
1Chú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
2Nế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
4Và 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
5Tô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!