Trong Python, từ khóa
>>> if 1 + 1 == 3:
.. pass
...
3 tự nó là toàn bộ câu lệnh. Tuyên bố này không làm bất cứ điều gì. nó bị loại bỏ trong giai đoạn biên dịch byte. Nhưng đối với một câu lệnh không làm gì cả, câu lệnh Python >>> if 1 + 1 == 3:
.. pass
...
3 hữu ích một cách đáng ngạc nhiênĐôi khi
>>> if 1 + 1 == 3:
.. pass
...
3 hữu ích trong mã cuối cùng chạy trong sản xuất. Thường xuyên hơn, >>> if 1 + 1 == 3:
.. pass
...
3 hữu ích như giàn giáo trong khi phát triển mã. Trong những trường hợp cụ thể, có những lựa chọn thay thế tốt hơn để không làm gì cảTrong hướng dẫn này, bạn sẽ học
- Câu lệnh Python
3 là gì và tại sao nó hữu ích>>> if 1 + 1 == 3: .. pass ...
- Cách sử dụng câu lệnh Python
3 trong mã sản xuất>>> if 1 + 1 == 3: .. pass ...
- Cách sử dụng câu lệnh Python
3 như một công cụ hỗ trợ trong khi phát triển mã>>> if 1 + 1 == 3: .. pass ...
- Các lựa chọn thay thế cho
3 là gì và khi nào bạn nên sử dụng chúng>>> if 1 + 1 == 3: .. pass ...
Tiền thưởng miễn phí. Nhấp vào đây để nhận Bảng cheat Python và tìm hiểu kiến thức cơ bản về Python 3, như làm việc với các kiểu dữ liệu, từ điển, danh sách và hàm Python
Tuyên bố Python >>> if 1 + 1 == 3:
.. pass
...
3. Cú pháp và ngữ nghĩa
>>> if 1 + 1 == 3:
.. pass
...
Theo cú pháp Python, các khối thụt lề mới theo sau ký tự dấu hai chấm [
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
2]. Có một số nơi mà một khối thụt lề mới sẽ xuất hiện. Khi bạn bắt đầu viết mã Python, những vị trí phổ biến nhất là sau từ khóa def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 và sau từ khóa def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
4>>>
>>> if 1 + 1 == 3:
.. pass
...
2Sau câu lệnh
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
4 là phần thân của vòng lặp def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
4, bao gồm hai dòng thụt vào ngay sau dấu hai chấmTrong trường hợp này, có hai câu lệnh trong phần thân được lặp lại cho mỗi giá trị
7def get_and_save_middle[data, fname]: middle = data[len[data]//3:2*len[data]//3] save_to_file[middle, fname] return middle
8def get_and_save_middle[data, fname]: middle = data[len[data]//3:2*len[data]//3] save_to_file[middle, fname] return middle
Các câu lệnh bên trong loại khối này về mặt kỹ thuật được gọi là một bộ trong ngữ pháp Python. Một bộ phải bao gồm một hoặc nhiều câu lệnh. Không được để trống
Để không làm gì bên trong một bộ, bạn có thể sử dụng câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 đặc biệt của Python. Tuyên bố này chỉ bao gồm từ khóa duy nhất >>> if 1 + 1 == 3:
.. pass
...
3. Mặc dù bạn có thể sử dụng >>> if 1 + 1 == 3:
.. pass
...
3 ở nhiều nơi trong Python nhưng không phải lúc nào nó cũng hữu ích>>>
>>> if 1 + 1 == 3:
.. pass
...
0Trong câu lệnh
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 này, việc loại bỏ câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3 sẽ giữ nguyên chức năng và làm cho mã của bạn ngắn hơn. Bạn có thể thắc mắc tại sao cú pháp Python bao gồm một câu lệnh yêu cầu trình thông dịch không làm gì cả. Bạn không thể đạt được kết quả tương tự bằng cách không viết một tuyên bố nào sao?Trong một số trường hợp, việc yêu cầu Python không làm gì một cách rõ ràng phục vụ một mục đích quan trọng. Ví dụ: vì câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 không làm bất cứ điều gì, bạn có thể sử dụng nó để đáp ứng yêu cầu rằng một bộ bao gồm ít nhất một câu lệnh>>>
>>> if 1 + 1 == 3:
.. pass
...
4Ngay cả khi bạn không muốn thêm bất kỳ mã nào bên trong khối
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3, khối def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 không có câu lệnh nào sẽ tạo ra một bộ trống, đó là cú pháp Python không hợp lệĐể khắc phục điều này, bạn có thể sử dụng
>>> if 1 + 1 == 3:
.. pass
...
3>>>
>>> if 1 + 1 == 3:
.. pass
...
Bây giờ, nhờ có
>>> if 1 + 1 == 3:
.. pass
...
3, câu lệnh def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 của bạn là cú pháp Python hợp lệLoại bỏ các quảng cáoSử dụng tạm thời của >>> if 1 + 1 == 3:
.. pass
...
3
>>> if 1 + 1 == 3:
.. pass
...
Có nhiều tình huống mà
>>> if 1 + 1 == 3:
.. pass
...
3 có thể hữu ích cho bạn khi bạn đang phát triển, ngay cả khi nó không xuất hiện trong phiên bản cuối cùng của mã của bạn. Giống như giàn giáo, >>> if 1 + 1 == 3:
.. pass
...
3 có thể hữu ích để giữ cấu trúc chính của chương trình của bạn trước khi bạn điền thông tin chi tiếtNghe có vẻ lạ khi viết mã mà sau này sẽ bị xóa, nhưng làm mọi việc theo cách này có thể đẩy nhanh tốc độ phát triển ban đầu của bạn
Mật Mã Tương Lai
Có nhiều trường hợp cấu trúc của mã yêu cầu hoặc có thể sử dụng một khối. Mặc dù cuối cùng bạn có thể phải viết mã ở đó, nhưng đôi khi rất khó để thoát khỏi luồng làm việc trên một thứ gì đó cụ thể và bắt đầu làm việc trên một phần phụ thuộc. Trong những trường hợp này, câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 là một cách hữu ích để thực hiện khối lượng công việc tối thiểu cho phần phụ thuộc để bạn có thể quay lại công việc đang làmVí dụ cụ thể, hãy tưởng tượng viết một hàm xử lý một chuỗi và sau đó cả hai ghi kết quả vào một tệp và trả về nó
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
Hàm này lưu và trả về phần ba ở giữa của chuỗi. Bạn không cần hoàn thành triển khai
>>> if 1 + 1 == 3:
.. pass
...
64 trước khi có thể kiểm tra đầu ra để tìm lỗi riêng lẻ. Tuy nhiên, nếu >>> if 1 + 1 == 3:
.. pass
...
64 không tồn tại ở dạng nào đó thì bạn sẽ gặp lỗiCó thể nhận xét cuộc gọi tới
>>> if 1 + 1 == 3:
.. pass
...
64, nhưng sau đó bạn phải nhớ bỏ ghi chú cuộc gọi sau khi xác nhận rằng >>> if 1 + 1 == 3:
.. pass
...
67 hoạt động tốt. Thay vào đó, bạn có thể nhanh chóng triển khai >>> if 1 + 1 == 3:
.. pass
...
64 bằng câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3>>> if 1 + 1 == 3:
.. pass
...
2Chức năng này không làm gì cả, nhưng nó cho phép bạn kiểm tra
>>> if 1 + 1 == 3:
.. pass
...
67 mà không gặp lỗiMột trường hợp sử dụng khác cho
>>> if 1 + 1 == 3:
.. pass
...
3 là khi bạn đang viết một cấu trúc điều khiển luồng phức tạp và bạn muốn có một trình giữ chỗ cho mã trong tương lai. Ví dụ: khi thực hiện thử thách fizz-buzz với toán tử modulo, trước tiên bạn nên hiểu cấu trúc của mã>>> if 1 + 1 == 3:
.. pass
...
6Cấu trúc này xác định những gì sẽ được in trong từng trường hợp, cung cấp cho bạn bộ khung của giải pháp. Các khung cấu trúc như vậy rất hữu ích khi cố gắng tìm ra logic phân nhánh của các câu lệnh
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 nào là cần thiết và theo thứ tự nàoVí dụ, trong trường hợp này, một cái nhìn sâu sắc quan trọng là câu lệnh
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 đầu tiên cần kiểm tra tính chia hết cho >>> if 1 + 1 == 3:
.. pass
...
84 vì bất kỳ số nào chia hết cho >>> if 1 + 1 == 3:
.. pass
...
84 cũng sẽ chia hết cho >>> if 1 + 1 == 3:
.. pass
...
86 và >>> if 1 + 1 == 3:
.. pass
...
87. Cái nhìn sâu sắc về cấu trúc này rất hữu ích bất kể chi tiết của đầu ra cụ thểSau khi bạn tìm ra logic cốt lõi của vấn đề, bạn có thể quyết định xem bạn có
>>> if 1 + 1 == 3:
.. pass
...
88 trực tiếp trong mã hay không>>> if 1 + 1 == 3:
.. pass
...
8Hàm này rất dễ sử dụng vì nó in trực tiếp các chuỗi. Tuy nhiên, nó không phải là một chức năng thú vị để kiểm tra. Đây có thể là một sự đánh đổi hữu ích. Tuy nhiên, trong các cuộc phỏng vấn mã hóa, người phỏng vấn đôi khi sẽ yêu cầu bạn viết bài kiểm tra. Viết cấu trúc trước cho phép bạn đảm bảo rằng bạn hiểu luồng logic trước khi kiểm tra xem các yêu cầu khác là gì
Một cách khác là viết một hàm trả về chuỗi và sau đó thực hiện vòng lặp ở nơi khác
>>> if 1 + 1 == 3:
.. pass
...
4Chức năng này đẩy chức năng in lên ngăn xếp và dễ kiểm tra hơn
Tìm ra các điều kiện cốt lõi và cấu trúc của vấn đề bằng cách sử dụng
>>> if 1 + 1 == 3:
.. pass
...
3 giúp dễ dàng quyết định chính xác cách triển khai sẽ hoạt động sau nàyCách tiếp cận này cũng hữu ích khi viết các lớp. Nếu bạn cần viết một lớp để triển khai thứ gì đó, nhưng bạn không hiểu đầy đủ về miền vấn đề, thì trước tiên bạn có thể sử dụng
>>> if 1 + 1 == 3:
.. pass
...
3 để hiểu bố cục tốt nhất cho kiến trúc mã của mìnhVí dụ: hãy tưởng tượng bạn đang triển khai một lớp
>>> if 1 + 1 == 3:
.. pass
...
41, nhưng các thuộc tính bạn cần không rõ ràng. Cuối cùng, bạn sẽ cần tiến hành một số phân tích yêu cầu cẩn thận, nhưng trong khi triển khai các thuật toán cơ bản, bạn có thể thấy rõ rằng lớp chưa sẵn sàng>>> if 1 + 1 == 3:
.. pass
...
8Điều này cho phép bạn khởi tạo các thành viên của lớp và chuyển chúng xung quanh mà không cần phải quyết định thuộc tính nào có liên quan đến lớp
Loại bỏ các quảng cáoMã nhận xét
Khi bạn nhận xét mã, có thể làm mất hiệu lực cú pháp bằng cách xóa tất cả mã trong một khối. Nếu bạn có điều kiện ________ 93 … ________ 543, thì có thể hữu ích khi nhận xét một trong các nhánh
>>> if 1 + 1 == 3:
.. pass
...
00Trong ví dụ này,
>>> if 1 + 1 == 3:
.. pass
...
44 chạy mã mất nhiều thời gian, chẳng hạn như nhân các mảng số lớn. Trong khi bạn đang gỡ lỗi, bạn có thể cần tạm thời nhận xét cuộc gọi >>> if 1 + 1 == 3:
.. pass
...
44Ví dụ: có thể bạn muốn chạy mã này với một số dữ liệu có vấn đề và xem tại sao có quá nhiều giá trị không phải là
>>> if 1 + 1 == 3:
.. pass
...
46 bằng cách kiểm tra nhật ký để biết mô tả. Bỏ qua tính toán tốn kém cho các giá trị hợp lệ sẽ tăng tốc độ kiểm tra lên một chútTuy nhiên, đây không phải là mã hợp lệ
>>> if 1 + 1 == 3:
.. pass
...
01Trong ví dụ này, nhánh
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 không có bất kỳ câu lệnh nào trong đó. Nhận xét bị loại bỏ sớm trong quá trình phân tích cú pháp, trước khi thụt đầu dòng được kiểm tra để xem nơi bắt đầu và kết thúc khốiTrong trường hợp này, thêm một câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 làm cho mã hợp lệ>>> if 1 + 1 == 3:
.. pass
...
02Giờ đây, có thể chạy mã, bỏ qua tính toán tốn kém và tạo nhật ký với thông tin hữu ích
Nhận xét một phần mã trong khi hành vi khắc phục sự cố hữu ích trong nhiều trường hợp. Trong trường hợp như ví dụ trên, bạn có thể nhận xét mã mất nhiều thời gian để xử lý và không phải là nguồn gốc của vấn đề
Một tình huống khác mà bạn có thể muốn nhận xét mã trong khi khắc phục sự cố là khi mã được nhận xét có tác dụng phụ không mong muốn, chẳng hạn như gửi email hoặc cập nhật bộ đếm
Tương tự, đôi khi sẽ rất hữu ích khi nhận xét toàn bộ chức năng trong khi vẫn tiếp tục cuộc gọi. Nếu bạn đang sử dụng thư viện cần gọi lại, thì bạn có thể viết mã như thế này
>>> if 1 + 1 == 3:
.. pass
...
03Mã này gọi
>>> if 1 + 1 == 3:
.. pass
...
49 và đính kèm một cuộc gọi lại vào kết quảCó thể hữu ích khi chạy thử loại bỏ dữ liệu để đảm bảo rằng nguồn được cung cấp chính xác. Tuy nhiên, đây không phải là mã Python hợp lệ
>>> if 1 + 1 == 3:
.. pass
...
04Vì hàm không có câu lệnh nào trong khối nên Python không thể phân tích cú pháp mã này
Một lần nữa,
>>> if 1 + 1 == 3:
.. pass
...
3 có thể giúp bạn>>> if 1 + 1 == 3:
.. pass
...
05Đây là mã Python hợp lệ sẽ loại bỏ dữ liệu và giúp bạn xác nhận rằng các đối số là chính xác
Loại bỏ các quảng cáoĐiểm đánh dấu cho trình gỡ lỗi
Khi bạn chạy mã trong trình gỡ lỗi, có thể đặt điểm dừng trong mã nơi trình gỡ lỗi sẽ dừng và cho phép bạn kiểm tra trạng thái chương trình trước khi tiếp tục
Khi một lần chạy thử nghiệm thường kích hoạt một điểm dừng, chẳng hạn như trong một vòng lặp, có thể có nhiều trường hợp trạng thái chương trình không thú vị. Để giải quyết vấn đề này, nhiều trình gỡ lỗi cũng cho phép điểm dừng có điều kiện, điểm dừng sẽ chỉ kích hoạt khi điều kiện là đúng. Ví dụ: bạn có thể đặt điểm dừng trong vòng lặp
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
4 chỉ được kích hoạt nếu một biến là >>> if 1 + 1 == 3:
.. pass
...
46 để xem lý do tại sao trường hợp này không được xử lý đúng cáchTuy nhiên, nhiều trình sửa lỗi chỉ cho phép bạn đặt một vài điều kiện cơ bản trên các điểm dừng của mình, chẳng hạn như bằng nhau hoặc có thể là so sánh kích thước. Bạn có thể cần một điều kiện phức tạp hơn, chẳng hạn như kiểm tra xem một chuỗi có phải là một đối xứng trước khi ngắt không
Mặc dù trình gỡ lỗi có thể không có khả năng kiểm tra đối xứng, nhưng Python có thể làm như vậy với nỗ lực tối thiểu. Bạn có thể tận dụng chức năng đó bằng cách sử dụng câu lệnh do-nothing
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 và đặt điểm dừng trên dòng >>> if 1 + 1 == 3:
.. pass
...
3>>> if 1 + 1 == 3:
.. pass
...
06Bằng cách kiểm tra palindromes với
>>> if 1 + 1 == 3:
.. pass
...
85, bây giờ bạn có một dòng chỉ thực hiện nếu điều kiện là đúngMặc dù dòng
>>> if 1 + 1 == 3:
.. pass
...
3 không làm gì cả, nhưng nó giúp bạn có thể đặt điểm ngắt ở đó. Bây giờ bạn có thể chạy mã này trong trình gỡ lỗi và chỉ ngắt trên các chuỗi là palindromesChức năng trống
Trong một số trường hợp, thậm chí có thể hữu ích nếu bạn đưa một chức năng trống vào phiên bản mã đã triển khai của bạn. Ví dụ: một chức năng trong thư viện có thể yêu cầu chức năng gọi lại được chuyển vào
Một trường hợp thậm chí còn phổ biến hơn là khi mã của bạn định nghĩa một lớp kế thừa từ một lớp dự kiến một phương thức sẽ bị ghi đè. Tuy nhiên, trong trường hợp cụ thể của bạn, bạn không cần phải làm gì cả. Hoặc có lẽ lý do bạn ghi đè mã là để ngăn một phương thức có thể ghi đè làm bất cứ điều gì
Trong tất cả các trường hợp đó, bạn sẽ cần viết một hàm hoặc phương thức trống. Một lần nữa, vấn đề là không có dòng nào sau dòng
>>> if 1 + 1 == 3:
.. pass
...
87 không phải là cú pháp Python hợp lệ>>>
>>> if 1 + 1 == 3:
.. pass
...
07Điều này không thành công vì một hàm, giống như các khối khác, phải bao gồm ít nhất một câu lệnh. Để khắc phục sự cố này, bạn có thể sử dụng
>>> if 1 + 1 == 3:
.. pass
...
3>>>
>>> if 1 + 1 == 3:
.. pass
...
08Bây giờ hàm có một câu lệnh, thậm chí một câu lệnh không làm gì, đó là cú pháp Python hợp lệ
Một ví dụ khác, hãy tưởng tượng bạn có một hàm yêu cầu một đối tượng giống như tệp ghi vào. Tuy nhiên, bạn muốn gọi hàm vì một lý do khác và muốn loại bỏ đầu ra. Bạn có thể sử dụng
>>> if 1 + 1 == 3:
.. pass
...
3 để viết một lớp loại bỏ tất cả dữ liệu>>> if 1 + 1 == 3:
.. pass
...
09Các thể hiện của lớp này hỗ trợ phương thức
>>> if 1 + 1 == 3:
.. pass
...
000 nhưng loại bỏ tất cả dữ liệu ngay lập tứcTrong cả hai ví dụ này, điều quan trọng là một phương thức hoặc chức năng tồn tại, nhưng nó không cần phải làm bất cứ điều gì. Bởi vì các khối Python phải có các câu lệnh, bạn có thể làm cho các hàm hoặc phương thức trống hợp lệ bằng cách sử dụng
>>> if 1 + 1 == 3:
.. pass
...
3Loại bỏ các quảng cáolớp trống
Trong Python, tính kế thừa ngoại lệ rất quan trọng vì nó đánh dấu ngoại lệ nào bị bắt. Ví dụ: ngoại lệ tích hợp sẵn
>>> if 1 + 1 == 3:
.. pass
...
002 là cấp độ gốc của >>> if 1 + 1 == 3:
.. pass
...
003. Ngoại lệ >>> if 1 + 1 == 3:
.. pass
...
003 được đưa ra khi khóa không tồn tại được tra cứu trong từ điển. Điều này có nghĩa là bạn có thể sử dụng >>> if 1 + 1 == 3:
.. pass
...
002 để bắt một >>> if 1 + 1 == 3:
.. pass
...
003>>>
>>> if 1 + 1 == 3:
.. pass
...
40Ngoại lệ
>>> if 1 + 1 == 3:
.. pass
...
003 bị bắt mặc dù câu lệnh >>> if 1 + 1 == 3:
.. pass
...
008 chỉ định >>> if 1 + 1 == 3:
.. pass
...
002. Điều này là do >>> if 1 + 1 == 3:
.. pass
...
003 là một phân lớp của >>> if 1 + 1 == 3:
.. pass
...
002Đôi khi bạn muốn đưa ra các ngoại lệ cụ thể trong mã của mình vì chúng có đường dẫn khôi phục cụ thể. Tuy nhiên, bạn muốn đảm bảo rằng những ngoại lệ đó kế thừa từ một ngoại lệ chung trong trường hợp ai đó bắt ngoại lệ chung. Các lớp ngoại lệ này không có hành vi hoặc dữ liệu. Chúng chỉ là điểm đánh dấu
Để thấy được tính hữu ích của hệ thống phân cấp ngoại lệ phong phú, bạn có thể xem xét việc kiểm tra quy tắc mật khẩu. Trước khi cố gắng thay đổi mật khẩu trên một trang web, bạn muốn kiểm tra cục bộ các quy tắc mà nó thực thi
- Ít nhất tám ký tự
- Ít nhất một số
- Ít nhất một ký tự đặc biệt, chẳng hạn như dấu chấm hỏi [
012], dấu chấm than [>>> if 1 + 1 == 3: .. pass ...
013], hoặc dấu chấm [>>> if 1 + 1 == 3: .. pass ...
014]>>> if 1 + 1 == 3: .. pass ...
Ghi chú. Ví dụ này hoàn toàn để minh họa ngữ nghĩa và kỹ thuật Python. Nghiên cứu đã chỉ ra rằng các quy tắc phức tạp của mật khẩu không làm tăng tính bảo mật
Để biết thêm thông tin, hãy xem hướng dẫn của Viện Tiêu chuẩn và Công nghệ Quốc gia [NIST] và nghiên cứu mà họ dựa trên
Mỗi lỗi đó nên có ngoại lệ riêng. Đoạn mã sau thực hiện các quy tắc đó
>>> if 1 + 1 == 3:
.. pass
...
41Hàm này sẽ đưa ra một ngoại lệ nếu mật khẩu không tuân theo các quy tắc đã chỉ định. Một ví dụ thực tế hơn sẽ ghi chú tất cả các quy tắc chưa được tuân theo, nhưng điều đó nằm ngoài phạm vi của hướng dẫn này
Bạn có thể sử dụng chức năng này trong trình bao bọc để in ngoại lệ theo cách hay
>>>
>>> if 1 + 1 == 3:
.. pass
...
42Trong trường hợp này,
>>> if 1 + 1 == 3:
.. pass
...
015 chỉ bắt được >>> if 1 + 1 == 3:
.. pass
...
016 vì các ngoại lệ khác của >>> if 1 + 1 == 3:
.. pass
...
017 có thể là lỗi trong chính trình kiểm tra. Nó in ra tên và giá trị của ngoại lệ, hiển thị quy tắc không được tuân theoTrong một số trường hợp, người dùng của bạn có thể không quan tâm chính xác vấn đề nào tồn tại trong đầu vào. Trong trường hợp đó, bạn sẽ chỉ muốn bắt
>>> if 1 + 1 == 3:
.. pass
...
017>>> if 1 + 1 == 3:
.. pass
...
43Trong mã này, tất cả thông tin nhập không hợp lệ đều được xử lý như nhau vì bạn không quan tâm thông tin đăng nhập có vấn đề gì
Do những trường hợp sử dụng khác nhau này,
>>> if 1 + 1 == 3:
.. pass
...
019 cần cả bốn trường hợp ngoại lệ
016>>> if 1 + 1 == 3: .. pass ...
021>>> if 1 + 1 == 3: .. pass ...
022>>> if 1 + 1 == 3: .. pass ...
023>>> if 1 + 1 == 3: .. pass ...
Mỗi ngoại lệ này mô tả một quy tắc khác bị vi phạm. Trong mã khớp một chuỗi theo các quy tắc phức tạp hơn, có thể có nhiều quy tắc khác trong số này, được sắp xếp theo một cấu trúc phức tạp
Mặc dù cần có bốn lớp khác nhau, nhưng không lớp nào có bất kỳ hành vi nào. Câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 cho phép bạn định nghĩa cả bốn lớp một cách nhanh chóngLoại bỏ các quảng cáoPhương pháp đánh dấu
Một số phương thức trong các lớp tồn tại không phải để được gọi mà để đánh dấu lớp là bằng cách nào đó được liên kết với phương thức này
Thư viện chuẩn Python có mô-đun
>>> if 1 + 1 == 3:
.. pass
...
025. Tên của mô-đun là viết tắt của lớp cơ sở trừu tượng. Mô-đun này giúp xác định các lớp không được khởi tạo mà dùng làm cơ sở chung cho một số lớp khácNếu bạn đang viết mã để phân tích các kiểu sử dụng của máy chủ web, thì bạn có thể muốn phân biệt giữa các yêu cầu đến từ người dùng đã đăng nhập và những yêu cầu đến từ các kết nối không được xác thực. Bạn có thể lập mô hình này bằng cách có một lớp cha
>>> if 1 + 1 == 3:
.. pass
...
026 có hai lớp con. >>> if 1 + 1 == 3:
.. pass
...
027 và >>> if 1 + 1 == 3:
.. pass
...
028Không có gì nên khởi tạo trực tiếp lớp
>>> if 1 + 1 == 3:
.. pass
...
026. Mỗi yêu cầu phải đến từ nguồn gốc >>> if 1 + 1 == 3:
.. pass
...
027 hoặc nguồn gốc >>> if 1 + 1 == 3:
.. pass
...
028. Đây là một triển khai tối giản>>> if 1 + 1 == 3:
.. pass
...
44Mặc dù lớp
>>> if 1 + 1 == 3:
.. pass
...
026 thực sẽ phức tạp hơn, nhưng ví dụ này cho thấy một số điều cơ bản. >>> if 1 + 1 == 3:
.. pass
...
033 sẽ không bao giờ được gọi vì tất cả các lớp con phải ghi đè lên nóBởi vì
>>> if 1 + 1 == 3:
.. pass
...
026 có một >>> if 1 + 1 == 3:
.. pass
...
035, nó không thể được khởi tạo>>>
>>> if 1 + 1 == 3:
.. pass
...
45Không thể khởi tạo các lớp có phương thức
>>> if 1 + 1 == 3:
.. pass
...
035. Điều này có nghĩa là bất kỳ đối tượng nào có lớp cha >>> if 1 + 1 == 3:
.. pass
...
026 sẽ là một thể hiện của lớp ghi đè lên lớp >>> if 1 + 1 == 3:
.. pass
...
038. Do đó, phần thân trong >>> if 1 + 1 == 3:
.. pass
...
033 không quan trọng, nhưng phương thức cần tồn tại để chỉ ra rằng tất cả các lớp con phải khởi tạo nóBởi vì nội dung phương thức không được để trống, bạn phải đặt thứ gì đó vào
>>> if 1 + 1 == 3:
.. pass
...
033. Một lần nữa, tuyên bố không làm gì cả >>> if 1 + 1 == 3:
.. pass
...
3 là một lựa chọn tốt để làm rõ rằng bạn đã đưa vào dòng này chỉ vì lý do cú phápMột cách hiện đại hơn để chỉ ra các phương thức cần thiết là sử dụng
>>> if 1 + 1 == 3:
.. pass
...
042, có sẵn trong thư viện chuẩn trong Python 3. 8 trở lên. Trong các phiên bản Python cũ hơn, nó có sẵn với các backport của >>> if 1 + 1 == 3:
.. pass
...
043Một
>>> if 1 + 1 == 3:
.. pass
...
042 khác với một lớp cơ sở trừu tượng ở chỗ nó không được liên kết rõ ràng với một lớp cụ thể. Thay vào đó, nó dựa vào khớp loại để liên kết nó tại thời điểm kiểm tra loại với >>> if 1 + 1 == 3:
.. pass
...
045Các phương thức trong một
>>> if 1 + 1 == 3:
.. pass
...
042 không bao giờ được gọi. Chúng chỉ phục vụ để đánh dấu các loại phương pháp cần thiết>>>
>>> if 1 + 1 == 3:
.. pass
...
46Trình bày cách sử dụng
>>> if 1 + 1 == 3:
.. pass
...
042 như thế này trong >>> if 1 + 1 == 3:
.. pass
...
045 không liên quan đến câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3. Nhưng điều quan trọng là phần thân của phương thức chỉ có câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3Có nhiều ví dụ hơn về các điểm đánh dấu như vậy được sử dụng bên ngoài ngôn ngữ Python và các thư viện tiêu chuẩn. Ví dụ: chúng được sử dụng trong gói
>>> if 1 + 1 == 3:
.. pass
...
051 để biểu thị các phương thức giao diện và trong >>> if 1 + 1 == 3:
.. pass
...
052 để biểu thị đầu vào cho máy tự động ở trạng thái hữu hạnTrong tất cả các trường hợp này, các lớp cần có các phương thức nhưng không bao giờ gọi chúng. Vì điều này, cơ thể không thành vấn đề. Nhưng vì phần thân không được để trống nên bạn có thể sử dụng câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 để thêm phần thânCác lựa chọn thay thế cho >>> if 1 + 1 == 3:
.. pass
...
3
>>> if 1 + 1 == 3:
.. pass
...
Câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 không phải là cách duy nhất để không làm gì trong mã của bạn. Nó thậm chí không phải là ngắn nhất, như bạn sẽ thấy sau. Nó thậm chí không phải lúc nào cũng là cách tiếp cận Pythonic tốt nhất hoặc tốt nhấtBất kỳ biểu thức nào trong Python là một câu lệnh hợp lệ và mọi hằng số là một biểu thức hợp lệ. Vì vậy, tất cả các biểu thức sau đây không làm gì cả
46>>> if 1 + 1 == 3: .. pass ...
057>>> if 1 + 1 == 3: .. pass ...
058>>> if 1 + 1 == 3: .. pass ...
059>>> if 1 + 1 == 3: .. pass ...
Bạn có thể sử dụng bất kỳ một trong những biểu thức này làm câu lệnh duy nhất trong một bộ và nó sẽ hoàn thành nhiệm vụ tương tự như
>>> if 1 + 1 == 3:
.. pass
...
3. Lý do chính để tránh sử dụng chúng dưới dạng câu nói không làm gì cả là vì chúng đơn điệu. Khi bạn sử dụng chúng, những người đọc mã của bạn sẽ không hiểu tại sao chúng lại ở đóNói chung, câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3, trong khi cần nhiều ký tự để viết hơn, chẳng hạn như, >>> if 1 + 1 == 3:
.. pass
...
058, là cách tốt nhất để thông báo với những người bảo trì trong tương lai rằng khối mã đã được cố ý để trốngLoại bỏ các quảng cáotài liệu
Có một ngoại lệ quan trọng đối với thành ngữ sử dụng
>>> if 1 + 1 == 3:
.. pass
...
3 như một tuyên bố không làm gì cả. Trong các lớp, hàm và phương thức, việc sử dụng biểu thức chuỗi hằng số sẽ khiến biểu thức được dùng làm thuộc tính >>> if 1 + 1 == 3:
.. pass
...
064 của đối tượngThuộc tính
>>> if 1 + 1 == 3:
.. pass
...
064 được sử dụng bởi >>> if 1 + 1 == 3:
.. pass
...
066 trong trình thông dịch tương tác và bởi các trình tạo tài liệu khác nhau, nhiều IDE và các nhà phát triển khác đọc mã. Một số kiểu mã nhấn mạnh vào việc có nó trong mọi lớp, chức năng hoặc phương thứcNgay cả khi một chuỗi tài liệu không bắt buộc, nó thường là một sự thay thế tốt cho câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 trong một khối trống. Bạn có thể sửa đổi một số ví dụ từ trước đó trong hướng dẫn này để sử dụng chuỗi tài liệu thay vì >>> if 1 + 1 == 3:
.. pass
...
3>>> if 1 + 1 == 3:
.. pass
...
47Trong tất cả các trường hợp này, chuỗi tài liệu làm cho mã rõ ràng hơn. Chuỗi tài liệu cũng sẽ hiển thị khi bạn sử dụng mã này trong trình thông dịch tương tác và trong IDE, làm cho nó thậm chí còn có giá trị hơn
Ghi chú. Các tài liệu trên là ngắn gọn vì có một số lớp và chức năng. Một chuỗi tài liệu dành cho sản xuất thường sẽ kỹ lưỡng hơn
Một lợi thế kỹ thuật của chuỗi tài liệu, đặc biệt đối với những chức năng hoặc phương thức không bao giờ thực thi, là chúng không bị đánh dấu là "chưa được khám phá" bởi trình kiểm tra phạm vi kiểm tra
dấu chấm lửng
Trong các tệp sơ khai mypy, cách được khuyến nghị để điền vào một khối là sử dụng dấu chấm lửng [
>>> if 1 + 1 == 3:
.. pass
...
069] làm biểu thức hằng số. Đây là một hằng số tối nghĩa có giá trị là >>> if 1 + 1 == 3:
.. pass
...
070>>>
>>> if 1 + 1 == 3:
.. pass
...
48Đối tượng đơn lẻ
>>> if 1 + 1 == 3:
.. pass
...
070, của lớp >>> if 1 + 1 == 3:
.. pass
...
072 tích hợp, là một đối tượng thực được tạo bởi biểu thức >>> if 1 + 1 == 3:
.. pass
...
069Việc sử dụng ban đầu cho
>>> if 1 + 1 == 3:
.. pass
...
070 là tạo các lát cắt đa chiều. Tuy nhiên, giờ đây nó cũng là cú pháp được đề xuất để điền vào một bộ trong một tệp sơ khai>>> if 1 + 1 == 3:
.. pass
...
49Hàm này không chỉ không làm gì mà còn nằm trong một tệp mà trình thông dịch Python không bao giờ đánh giá
Tăng một lỗi
Trong trường hợp các hàm hoặc phương thức trống vì chúng không bao giờ thực thi, đôi khi phần thân tốt nhất cho chúng là
>>> if 1 + 1 == 3:
.. pass
...
075. Mặc dù về mặt kỹ thuật, điều này làm được điều gì đó, nhưng nó vẫn là một sự thay thế hợp lệ cho câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3Sử dụng vĩnh viễn của >>> if 1 + 1 == 3:
.. pass
...
3
>>> if 1 + 1 == 3:
.. pass
...
Đôi khi việc sử dụng câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 không phải là tạm thời—nó sẽ vẫn ở phiên bản cuối cùng của mã đang chạy. Trong những trường hợp đó, không có thành ngữ thay thế hay phổ biến nào tốt hơn để điền vào một khối trống khác hơn là sử dụng >>> if 1 + 1 == 3:
.. pass
...
3Sử dụng >>> if 1 + 1 == 3:
.. pass
...
3 trong Bắt ngoại lệ
>>> if 1 + 1 == 3:
.. pass
...
Khi sử dụng
>>> if 1 + 1 == 3:
.. pass
...
081 để bắt ngoại lệ, đôi khi bạn không cần phải làm gì với ngoại lệ đó. Trong tình huống đó, bạn có thể sử dụng câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3 để tắt lỗiNếu bạn muốn đảm bảo rằng một tệp không tồn tại, thì bạn có thể sử dụng
>>> if 1 + 1 == 3:
.. pass
...
083. Hàm này sẽ báo lỗi nếu không có tệp. Tuy nhiên, tệp không có chính xác như những gì bạn muốn trong trường hợp này, vì vậy lỗi là không cần thiếtĐây là chức năng xóa tệp và không bị lỗi nếu tệp không tồn tại
>>> if 1 + 1 == 3:
.. pass
...
0Bởi vì không cần phải làm gì nếu một
>>> if 1 + 1 == 3:
.. pass
...
084 được nâng lên, bạn có thể sử dụng >>> if 1 + 1 == 3:
.. pass
...
3 để có một khối không có câu lệnh nào khácGhi chú. Điều quan trọng là phải thận trọng khi bỏ qua các ngoại lệ. Một ngoại lệ thường có nghĩa là đã xảy ra điều gì đó không mong muốn và cần phải khôi phục. Trước khi bỏ qua các ngoại lệ, hãy suy nghĩ cẩn thận về những gì có thể gây ra chúng
Lưu ý rằng câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 thường sẽ được thay thế bằng câu lệnh ghi nhật ký. Tuy nhiên, không bắt buộc phải làm điều này nếu lỗi đã được dự kiến và hiểu rõTrong trường hợp này, bạn cũng có thể sử dụng trình quản lý ngữ cảnh
>>> if 1 + 1 == 3:
.. pass
...
087 để khắc phục lỗi. Tuy nhiên, nếu bạn cần xử lý một số lỗi trong khi bỏ qua những lỗi khác, thì sẽ đơn giản hơn nếu bạn có một lớp trống >>> if 1 + 1 == 3:
.. pass
...
008 không có gì ngoại trừ câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3Ví dụ: nếu bạn muốn
>>> if 1 + 1 == 3:
.. pass
...
090 xử lý các thư mục cũng như tệp, thì bạn có thể sử dụng phương pháp này>>> if 1 + 1 == 3:
.. pass
...
1Tại đây, bạn bỏ qua
>>> if 1 + 1 == 3:
.. pass
...
084 trong khi thử lại >>> if 1 + 1 == 3:
.. pass
...
092Trong ví dụ này, thứ tự của các câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
008 không quan trọng vì >>> if 1 + 1 == 3:
.. pass
...
084 và >>> if 1 + 1 == 3:
.. pass
...
092 là anh em ruột và cả hai đều thừa kế từ >>> if 1 + 1 == 3:
.. pass
...
096. Nếu có một trường hợp xử lý >>> if 1 + 1 == 3:
.. pass
...
096 chung, có lẽ bằng cách đăng nhập và bỏ qua nó, thì thứ tự sẽ quan trọng. Trong trường hợp đó, >>> if 1 + 1 == 3:
.. pass
...
084 và tuyên bố >>> if 1 + 1 == 3:
.. pass
...
3 của nó sẽ phải đến trước >>> if 1 + 1 == 3:
.. pass
...
096Loại bỏ các quảng cáoSử dụng >>> if 1 + 1 == 3:
.. pass
...
3 trong chuỗi def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 … >>> if 1 + 1 == 3:
.. pass
...
403
>>> if 1 + 1 == 3:
.. pass
...
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
>>> if 1 + 1 == 3:
.. pass
...
Khi bạn sử dụng chuỗi dài
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 … >>> if 1 + 1 == 3:
.. pass
...
403, đôi khi bạn không cần phải làm bất cứ điều gì trong một trường hợp. Tuy nhiên, bạn không thể bỏ qua >>> if 1 + 1 == 3:
.. pass
...
403 đó vì việc thực thi sẽ tiếp tục cho đến điều kiện khácHãy tưởng tượng rằng một nhà tuyển dụng cảm thấy mệt mỏi với việc sử dụng thử thách fizz-buzz như một câu hỏi phỏng vấn và quyết định hỏi nó một cách khó hiểu. Lần này luật chơi hơi khác
- Nếu số đó chia hết cho 20, thì in ra
407>>> if 1 + 1 == 3: .. pass ...
- Ngược lại, nếu số đó chia hết cho 15 thì không in được gì
- Ngược lại, nếu số đó chia hết cho 5, thì in ra
408>>> if 1 + 1 == 3: .. pass ...
- Ngược lại, nếu số đó chia hết cho 3, thì in ra
409>>> if 1 + 1 == 3: .. pass ...
- Nếu không, in số
Người phỏng vấn tin rằng bước ngoặt mới này sẽ làm cho câu trả lời thú vị hơn
Như với tất cả các câu hỏi phỏng vấn lập trình, có nhiều cách để giải quyết thách thức này. Nhưng có một cách là sử dụng vòng lặp
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
4 với chuỗi bắt chước mô tả ở trên>>> if 1 + 1 == 3:
.. pass
...
2Chuỗi ________ 93 … ________ 2403 phản ánh logic chuyển sang tùy chọn tiếp theo chỉ khi tùy chọn trước đó không thực hiện
Trong ví dụ này, nếu bạn loại bỏ hoàn toàn mệnh đề
>>> if 1 + 1 == 3:
.. pass
...
413, thì bạn sẽ thay đổi hành vi. Thay vì không in gì cho các số chia hết cho 15, bạn sẽ in >>> if 1 + 1 == 3:
.. pass
...
408. Điều khoản là cần thiết ngay cả khi không có gì để làm trong trường hợp đóTrường hợp sử dụng này cho câu lệnh
>>> if 1 + 1 == 3:
.. pass
...
3 cho phép bạn tránh phải cấu trúc lại logic và giữ cho mã được sắp xếp theo cách phù hợp với mô tả hành viPhần kết luận
Bây giờ bạn đã hiểu câu lệnh Python
>>> if 1 + 1 == 3:
.. pass
...
3 làm gì. Bạn đã sẵn sàng sử dụng nó để cải thiện tốc độ phát triển và gỡ lỗi cũng như triển khai nó một cách khéo léo trong mã sản xuất của bạnTrong hướng dẫn này, bạn đã học
- Câu lệnh Python
3 là gì và tại sao nó hữu ích>>> if 1 + 1 == 3: .. pass ...
- Cách sử dụng câu lệnh Python
3 trong mã sản xuất>>> if 1 + 1 == 3: .. pass ...
- Cách sử dụng câu lệnh Python
3 như một công cụ hỗ trợ trong khi phát triển mã>>> if 1 + 1 == 3: .. pass ...
- Các lựa chọn thay thế cho
3 là gì và khi nào bạn nên sử dụng chúng>>> if 1 + 1 == 3: .. pass ...
Bây giờ bạn sẽ có thể viết mã tốt hơn và hiệu quả hơn bằng cách biết cách yêu cầu Python không làm gì cả
Đánh dấu là đã hoàn thành
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Moshe Zadka
Moshe đã sử dụng Python từ năm 1998. Anh ấy đã đóng góp cho CPython và là thành viên sáng lập của dự án Twisted. Anh ấy đã dạy Python ở nhiều địa điểm khác nhau từ năm 2002
» Thông tin thêm về MosheMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Geir Arne
Jim
Joanna
Gia-cốp
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi