Computer >> Máy Tính >  >> Lập trình >> Python

Các lỗi lập trình phổ biến hoặc 'gotchas' trong Python là gì?


Dưới đây là một số lỗi / lỗi lập trình python phổ biến nhất mà các lập trình viên mắc phải:

Tra cứu tên phạm vi: Python tuân theo các quy tắc xác định phạm vi theo thứ tự LEGB (Cục bộ, Bao bọc, Toàn cầu, Tích hợp). Vì python không có ràng buộc kiểu nghiêm ngặt, nên các lập trình viên có thể liên kết lại một biến phạm vi bên ngoài với một giá trị khác có thể được sử dụng trong phạm vi bên ngoài sau này nhưng hiện được thay thế bằng một số giá trị khác.

Không phân biệt giữa is và =: Đây là một toán tử trong python kiểm tra nếu cả hai đối tượng tham chiếu đến cùng một địa chỉ bộ nhớ. Toán tử ==thực thi hàm __eq__ có thể kiểm tra sự bình đẳng khác nhau cho các lớp khác nhau.

Sửa đổi danh sách trong khi lặp qua nó:Nếu bạn xóa các phần tử khỏi danh sách trong khi lặp qua nó, bạn sẽ gặp phải IndexError. Điều này là do danh sách giảm kích thước trong khi bạn không giảm chỉ mục với nó.

Liên kết đóng cửa - Hãy xem xét đoạn mã sau -

Ví dụ

listLambdas = [lambda x : i + x for i in range(5)]
for lam in listLambdas:
   print(lam(10))

Đầu ra

Điều này sẽ cung cấp đầu ra -

14
14
14
14
14

Bạn bị sốc? Điều này là do ràng buộc trong đóng cửa. Tất cả các lambdas trong danh sách này THAM KHẢO đến biến i, tức là khi nó thay đổi, các lambdas này bắt đầu tham chiếu đến giá trị mới.

Xung đột tên với tích hợp sẵn: Tại một thời điểm nào đó, bạn phải tạo một biến được gọi là tổng. Lưu ý rằng bạn đã chỉ định lại một tham chiếu đến hàm sum trong trường hợp này. Điều này có vẻ tầm thường đối với những thứ như thế này nhưng có thể gây ra một số vấn đề nghiêm trọng khi các gói được đặt tên theo cách như vậy. Điều này có thể dẫn đến các gói khác nhập các lớp của bạn thay vì các lớp tiêu chuẩn.

Triển khai không trực quan cho toán tử: Python cung cấp một cách để nạp chồng các hàm toán tử cho các lớp. Thường xuyên hơn không, mọi người có xu hướng triển khai các toán tử này theo cách không phổ biến và cuối cùng tạo ra các API phức tạp và không trực quan.