Là người dùng chứ không phải (người thiết kế) của Python, có ba lý do khiến tôi hài lòng với quyết định này:
Chủ yếu, nó đọc tốt hơn. Tất nhiên tôi phải có ý thức quyết định giới thiệu một biến mới khi viết , nhưng mã được đọc thường xuyên hơn nhiều so với nó được viết. Rất nhiều mã đơn giản theo nghĩa là điều khiển luồng và lồng không ảnh hưởng đến ý nghĩa và sự tồn tại của các biến. Khi tôi đọc
it = Snark()
message = "A letter, not signed"
if random.random() > 0.5:
hunt(it)
message += " (by the Knave)"
return [it, message]
sau đó tôi thường không thực sự quan tâm (nếu có) đề cập đến cái tên đầu tiên giới thiệu nó, tôi chỉ quan tâm rằng nó ở đó và những gì xảy ra với nó.
Lưu ý rằng một phần đáng kể của mã giả sử dụng cùng một quy ước (không khai báo, giới thiệu ngầm thông qua gán) và Python thường được mô tả là mã giả thực thi, chỉ nửa đùa nửa thật. Bốn ký tự bổ sung cho mỗi biến cục bộ, đối với đôi mắt hư hỏng của tôi, cảm thấy như sự lộn xộn đáng kể trong bối cảnh của Python, đặc biệt là khi nó không cảm thấy như nó thêm bất kỳ giá trị nào (xem bên dưới); điều này sẽ được giảm bớt bởi một :=
nhà điều hành như trong Go.
Thứ hai, tôi chưa gặp phải một lỗi đánh máy (do tính năng cụ thể này) mà cũng không hiển thị theo cách rõ ràng khác. Có thể tôi sẽ thay đổi suy nghĩ của mình trong một vài năm nữa khi tôi gặp phải một số lỗi thuộc loại này, nhưng cho đến nay, đó là cách, trong danh sách những điều gây ra lỗi. Có rất nhiều câu hỏi về UnboundLocalError
và thật khó để giải thích cho người mới bắt đầu, nhưng tần suất và mức độ phổ biến của những câu hỏi đó, so với các vấn đề khác (tham số mặc định có thể thay đổi, ngữ nghĩa tham chiếu, biến so với biến đối tượng) cho thấy đây là một vấn đề hiếm gặp.
Cuối cùng, ý định ... xin lỗi nhưng tôi thực sự không thể hiểu điều này. Khi đọc và viết Python, nó luôn hoàn toàn rõ ràng: Những gì bạn gán cho mục đích là cục bộ, trừ khi được tuyên bố rõ ràng và rõ ràng khác. Không có câu hỏi về nó. Hơn nữa, vì (ít nhất là trong Python) một biến là cục bộ cho toàn bộ hàm hoặc hoàn toàn không , nên bạn không thể có mã phức tạp sử dụng biến cục bộ trong một nhánh và biến toàn cục trong một nhánh khác. Bạn thấy một cái tên được gán cho? Bạn ngay lập tức biết nó luôn luôn là địa phương ngay từ đầu. Chà, trừ khi mã bị phá vỡ theo một cách rất đặc biệt (và sẽ ném sự sợ hãi UnboundLocalError
trong thời gian chạy, khi vào những trường hợp đó).