Tôi phát hiện ra điều này một cách ngẫu nhiên ngày hôm nay khi tôi nhận thấy một đoạn mã Python đã sử dụng built-in functionall
làm mã định danh biến để lưu trữ kết quả của việc hiểu danh sách và nó không gây ra lỗi, vì vậy tôi đã thử như sau :Tại sao bạn có thể gán giá trị cho các hàm dựng sẵn trong Python?
type('abc')
Out[1]: str
type('abc') == str
Out[2]: True
str = int
type('abc') == str
Out[4]: False
type('abc')
Out[5]: str
type = [1,2,3]
type('abc')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-a74a7df76db1> in <module>()
----> 1 type('abc')
TypeError: 'list' object is not callable
Hy vọng rằng, đó là câu hỏi hợp lệ khi tôi hỏi lý do hành vi này được cho phép bằng Python.
Hoặc tốt hơn, làm thế nào để đảm bảo rằng một built-in chức năng như str
thực sự str
và không nói, int
nên str(123)
sẽ không được đánh giá là int(123)
một cách tình cờ?
Bạn không thực sự phân công lại bất kỳ built-in đối tượng. Bạn đã định nghĩa các hình cầu mới che dấu các phần tích hợp sẵn. Tại sao? Bởi vì Python là linh hoạt như thế. –
Tại sao Python nên ngăn bạn đặt tên bất cứ thứ gì bạn muốn? Đó là trách nhiệm của bạn để lại tên của những người xây dựng quan trọng một mình nếu bạn muốn họ hành động bình thường. –
@MartijnPieters Điều đó thực sự khá thú vị nhưng làm thế nào để đảm bảo rằng một chức năng làm những gì tôi nghĩ rằng nó sẽ làm gì? – Vinayak