"Những lợi ích của việc sử dụng từ khóa def cho cả trình tạo và hàm là gì?"
Mặc dù chúng khác nhau về mặt cơ học, nhưng trong thực tế khi tôi sử dụng chúng, chúng thường giống nhau về mặt khái niệm (tôi không nghĩ nhiều về việc gọi range()
vs xrange()
).
Về mặt hiểu biết chức năng là gì một cách nhanh chóng, tôi đồng ý rằng một cái gì đó bị mất khi sử dụng def
, nhưng mọi thứ không nên quá khó hiểu trong chức năng để bắt đầu.
Ngay cả một ẩn return None
có thể nhầm lẫn hành vi dự định của một chức năng sau một chút dài các điều kiện (như trong, là một return None
dự định như một hành vi cuối cùng hoặc một sự giám sát trong logic). Nhưng đó chỉ là những niềm tin của tôi về nó.
Mặc dù vậy, tôi không cảm thấy lập luận của mình đặc biệt thuyết phục vì vậy tôi sẽ chỉ trì hoãn PEP 255 :
Vấn đề: Giới thiệu một từ khóa mới khác (giả sử là "gen" hoặc "trình tạo") thay cho "def" hoặc thay đổi cú pháp để phân biệt các hàm của trình tạo với các hàm không tạo.
Con: Trong thực tế (cách bạn nghĩ về chúng), máy phát điện là các
chức năng, nhưng với sự thay đổi mà chúng có thể phục hồi được. Các cơ chế về cách chúng được thiết lập là một vấn đề kỹ thuật tương đối nhỏ và việc giới thiệu một từ khóa mới sẽ vô tình nhấn mạnh đến các cơ chế về cách các máy phát điện bắt đầu (một phần quan trọng nhưng rất nhỏ trong cuộc sống của máy phát điện).
Pro: Trong thực tế (cách bạn nghĩ về chúng), các chức năng của máy phát thực sự là các chức năng của nhà máy tạo ra các trình tạo vòng lặp như thể bằng phép thuật. Về mặt này, chúng hoàn toàn khác với các hàm không tạo, hoạt động giống như một hàm tạo hơn là một hàm, vì vậy việc sử dụng lại "def" là khó hiểu nhất. Một tuyên bố "năng suất" chôn trong cơ thể là không đủ cảnh báo rằng ngữ nghĩa là rất khác nhau.
BDFL: "def" nó vẫn còn. Không có tranh luận ở hai bên là hoàn toàn thuyết phục, vì vậy tôi đã tham khảo trực giác của nhà thiết kế ngôn ngữ của tôi. Nó cho tôi biết rằng cú pháp được đề xuất trong PEP là hoàn toàn chính xác - không quá nóng, không quá lạnh. Nhưng, giống như Oracle tại Delphi trong thần thoại Hy Lạp, nó không cho tôi biết lý do tại sao, vì vậy tôi không phản bác lại các lập luận chống lại cú pháp PEP. Điều tốt nhất tôi có thể đưa ra (ngoài việc đồng ý với các phản bác ... đã được thực hiện) là "FUD". Nếu đây là một phần của ngôn ngữ từ ngày đầu tiên, tôi rất nghi ngờ nó sẽ tạo ra trang "Python Warts" của Andrew Kuchling.