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. 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 >>> if 1 + 1 == 3:
.. pass
...
3 của Python 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
3 của Python 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>>>
>>> for x in [1, 2, 3]:
.. y = x + 1
.. print[x, y]
...
1 2
2 3
3 4
Sau 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
Trong 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 gì cả, nên 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:
...
File "", line 2
^
IndentationError: expected an indented block
Ngay 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, thì 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 trong đó
>>> 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 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 người 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 idx % 15 == 0:
pass # Fizz-Buzz
elif idx % 3 == 0:
pass # Fizz
elif idx % 5 == 0:
pass # Buzz
else:
pass # Idx
4 trước khi có thể kiểm tra đầu ra để tìm lỗi riêng lẻ. Tuy nhiên, nếu if idx % 15 == 0:
pass # Fizz-Buzz
elif idx % 3 == 0:
pass # Fizz
elif idx % 5 == 0:
pass # Buzz
else:
pass # Idx
4 không tồn tại ở một dạng nào đó, thì bạn sẽ gặp lỗiCó thể nhận xét cuộc gọi tới
if idx % 15 == 0:
pass # Fizz-Buzz
elif idx % 3 == 0:
pass # Fizz
elif idx % 5 == 0:
pass # Buzz
else:
pass # Idx
4, nhưng sau đó bạn phải nhớ bỏ ghi chú cuộc gọi sau khi xác nhận rằng if idx % 15 == 0:
pass # Fizz-Buzz
elif idx % 3 == 0:
pass # Fizz
elif idx % 5 == 0:
pass # Buzz
else:
pass # Idx
7 hoạt động tốt. Thay vào đó, bạn có thể nhanh chóng triển khai if idx % 15 == 0:
pass # Fizz-Buzz
elif idx % 3 == 0:
pass # Fizz
elif idx % 5 == 0:
pass # Buzz
else:
pass # Idx
4 bằng câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3def save_to_file[data, fname]:
pass # TODO: fill this later
Chức năng này không làm bất cứ điều gì, nhưng nó cho phép bạn kiểm tra
if idx % 15 == 0:
pass # Fizz-Buzz
elif idx % 3 == 0:
pass # Fizz
elif idx % 5 == 0:
pass # Buzz
else:
pass # Idx
7 mà không có 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 idx % 15 == 0:
pass # Fizz-Buzz
elif idx % 3 == 0:
pass # Fizz
elif idx % 5 == 0:
pass # Buzz
else:
pass # Idx
Cấ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 trong đó cần có 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 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 def fizz_buzz[idx]:
if idx % 15 == 0:
print["fizz-buzz"]
elif idx % 3 == 0:
print["fizz"]
elif idx % 5 == 0:
print["buzz"]
else:
print[idx]
4 bởi vì bất kỳ số nào chia hết cho def fizz_buzz[idx]:
if idx % 15 == 0:
print["fizz-buzz"]
elif idx % 3 == 0:
print["fizz"]
elif idx % 5 == 0:
print["buzz"]
else:
print[idx]
4 cũng sẽ chia hết cho def fizz_buzz[idx]:
if idx % 15 == 0:
print["fizz-buzz"]
elif idx % 3 == 0:
print["fizz"]
elif idx % 5 == 0:
print["buzz"]
else:
print[idx]
6 và def fizz_buzz[idx]:
if idx % 15 == 0:
print["fizz-buzz"]
elif idx % 3 == 0:
print["fizz"]
elif idx % 5 == 0:
print["buzz"]
else:
print[idx]
7. 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 tìm ra logic cốt lõi của vấn đề, bạn có thể quyết định xem mình sẽ
def fizz_buzz[idx]:
if idx % 15 == 0:
print["fizz-buzz"]
elif idx % 3 == 0:
print["fizz"]
elif idx % 5 == 0:
print["buzz"]
else:
print[idx]
8 trực tiếp trong mã hay khôngdef fizz_buzz[idx]:
if idx % 15 == 0:
print["fizz-buzz"]
elif idx % 3 == 0:
print["fizz"]
elif idx % 5 == 0:
print["buzz"]
else:
print[idx]
Hà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
def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
Chứ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 hơn trong việc 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. Nếu bạn cần viết một lớp để thực hiện điều 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
def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
1, 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àngclass Candy:
pass
Đ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ó một điều kiện
def get_and_save_middle[data, fname]:
middle = data[len[data]//3:2*len[data]//3]
save_to_file[middle, fname]
return middle
3 … def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
3, thì có thể hữu ích khi nhận xét một trong các nhánh>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
0Trong ví dụ này,
def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
4 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 def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
4Ví 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à
def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
6 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
1Trong 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
2Giờ đâ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ó mục đích 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
3Mã này gọi
def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
9 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
4Vì 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
5Đâ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 ngắt 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à def fizz_buzz[idx]:
if idx % 15 == 0:
return "fizz-buzz"
elif idx % 3 == 0:
return "fizz"
elif idx % 5 == 0:
return "buzz"
else:
return str[idx]
6 để 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 lợi thế của chức năng đó bằng cách sử dụng câu lệnh không làm gì cả
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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
6Bằng cách kiểm tra palindromes với
class Candy:
pass
5, 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
class Candy:
pass
7 không phải là cú pháp Python hợp lệ>>>
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
7Đ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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
8Bâ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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
9Các thể hiện của lớp này hỗ trợ phương thức
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
00 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 __________3
Loạ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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
02 là cấp độ gốc của >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
03. Một ngoại lệ >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
03 được đưa ra khi một 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
02 để bắt một >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
03>>>
>>> if 1 + 1 == 3:
...
File "", line 2
^
IndentationError: expected an indented block
0Ngoại lệ
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
03 bị bắt mặc dù câu lệnh >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
08 chỉ định >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
02. Điều này là do >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
03 là một lớp con của >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
02Đô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 [_______20_______12], dấu chấm than [
13] hoặc dấu chấm [>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
14]>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
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 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:
...
File "", line 2
^
IndentationError: expected an indented block
1Hà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:
...
File "", line 2
^
IndentationError: expected an indented block
2Trong trường hợp này,
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
15 chỉ bắt được >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
16 vì các ngoại lệ khác của >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
17 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
17>>> if 1 + 1 == 3:
...
File "", line 2
^
IndentationError: expected an indented block
3Trong 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
19 cần cả bốn ngoại lệ
16>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
21>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
22>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
23>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
25. 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
26 có hai lớp con. >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
27 và >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
28Không có gì nên khởi tạo trực tiếp lớp
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
26. Mỗi yêu cầu phải đến từ nguồn gốc >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
27 hoặc nguồn gốc >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
28. Đây là một triển khai tối giản>>> if 1 + 1 == 3:
...
File "", line 2
^
IndentationError: expected an indented block
4Trong khi một lớp
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
26 thực sẽ phức tạp hơn, ví dụ này cho thấy một số điều cơ bản. >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
33 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
26 có một >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
35, nó không thể được khởi tạo>>>
>>> if 1 + 1 == 3:
...
File "", line 2
^
IndentationError: expected an indented block
5Không thể khởi tạo các lớp có phương thức
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
35. Điều này có nghĩa là bất kỳ đối tượng nào có lớp cha >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
26 sẽ là một thể hiện của lớp ghi đè >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
38. Do đó, phần thân trong >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
33 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 thể để trống, bạn phải đặt thứ gì đó vào
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
33. 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
42, 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 >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
43Một
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
42 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ó vào thời điểm đó với >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
45Các phương thức trong một
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
42 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:
...
File "", line 2
^
IndentationError: expected an indented block
6Trình bày cách sử dụng
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
42 như thế này trong >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
45 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
51 để biểu thị các phương thức giao diện và trong >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
52 để 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 thể để 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ả
6def fizz_buzz[idx]: if idx % 15 == 0: return "fizz-buzz" elif idx % 3 == 0: return "fizz" elif idx % 5 == 0: return "buzz" else: return str[idx]
57>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
58>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
59>>> if 1 + 1 == 2: .. print["math is ok"] .. pass .. print["but this is to be expected"] ... math is ok but this is to be expected
Bạn có thể sử dụng bất kỳ biểu thức nào trong số 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
58, 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ố tình để 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 sử dụng làm đối tượngThuộc tính
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
64 được sử dụng bởi >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
66 trong trình thông dịch tương tác và bởi nhiều, 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:
...
File "", line 2
^
IndentationError: expected an indented block
7Trong 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á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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
69] như một 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
70>>>
>>> if 1 + 1 == 3:
...
File "", line 2
^
IndentationError: expected an indented block
8Đối tượng đơn lẻ
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
70, của lớp >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
72 dựng sẵn, là một đối tượng thực được tạo bởi biểu thức >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
69Việc sử dụng ban đầu cho
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
70 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:
...
File "", line 2
^
IndentationError: expected an indented block
9Hà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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
75. Mặc dù về mặt kỹ thuật, điều này thực sự 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ế nào tốt hơn hoặc phổ biến 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
81 để bắt mộ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 chắc chắn rằng một tệp không tồn tại, thì bạn có thể sử dụng
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
83. 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
84 đượ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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
87 để 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ì đơn giản hơn là có một lớp >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
08 trống 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
90 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
...
1Ở đây, bạn bỏ qua
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
84 trong khi thử lại >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
92Trong ví dụ này, thứ tự của các câu lệnh
>>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
08 không quan trọng vì >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
84 và >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
92 là anh em ruột và cả hai đều thừa kế từ >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
96. Nếu có một trường hợp xử lý >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
96 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 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
84 và câu lệnh >>> if 1 + 1 == 3:
.. pass
...
3 của nó sẽ phải đến trước >>> if 1 + 1 == 2:
.. print["math is ok"]
.. pass
.. print["but this is to be expected"]
...
math is ok
but this is to be expected
96Loạ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:
...
File "", line 2
^
IndentationError: expected an indented block
03
>>> 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:
...
File "", line 2
^
IndentationError: expected an indented block
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:
...
File "", line 2
^
IndentationError: expected an indented block
03, đô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:
...
File "", line 2
^
IndentationError: expected an indented block
03 đó vì việc thực hiện 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
07>>> if 1 + 1 == 3: ... File "", line 2 ^ IndentationError: expected an indented block
- 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
08>>> if 1 + 1 == 3: ... File "", line 2 ^ IndentationError: expected an indented block
- Ngược lại, nếu số đó chia hết cho 3, thì in ra
09>>> if 1 + 1 == 3: ... File "", line 2 ^ IndentationError: expected an indented block
- 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
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:
...
File "", line 2
^
IndentationError: expected an indented block
03 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ệnTrong ví dụ này, nếu bạn loại bỏ hoàn toàn mệnh đề
>>> if 1 + 1 == 3:
...
File "", line 2
^
IndentationError: expected an indented block
13, 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:
...
File "", line 2
^
IndentationError: expected an indented block
08. Đ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
3 của Python 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 »
Chuyên gia 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. 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