Đây là tên tạm thời được sử dụng trong danh sách hiểu bởi Python 2.6 trở về trước. Python 2.7 và Python 3.x đã sửa lỗi này: danh sách được tạo không còn khả dụng cho đến khi tạo xong.
Hoặc ngắn gọn là chi tiết triển khai mà không ai phải dựa vào.
Ở đây bạn có thể thấy rằng Python 2,7 lá locals()
không thay đổi trong khi Python 2.6 tạo ra một live ngắn tạm thời:
Python 2.7.2 (default, Jan 5 2012, 16:24:09)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo():
t = [list(locals().keys()) for x in range(1) ]
print(locals())
print(t[0])
>>> foo()
{'x': 0, 't': [['x']]}
['x']
>>>
Python 2.6.7 (r267:88850, Jan 5 2012, 16:18:48)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo():
t = [list(locals().keys()) for x in range(1) ]
print(locals())
print(t[0])
>>> foo()
{'x': 0, 't': [['_[1]', 'x']]}
['_[1]', 'x']
>>>
Python 3.x giới thiệu một đoạn ngắn mới tạm danh sách comprehensions sống gọi .0
. Đừng bị cám dỗ để sử dụng nó cho bất cứ điều gì. Ngoài ra, toàn bộ danh sách hiểu được chạy trong một không gian tên riêng biệt nên các biến vòng lặp không thể truy cập được ngoài vòng lặp:
Python 3.2 (r32:88445, Jan 5 2012, 16:29:57)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo():
t = [list(locals().keys()) for x in range(1) ]
print(locals())
print(t[0])
>>> foo()
{'t': [['.0', 'x']]}
['.0', 'x']
Không chỉ là nó một cách chi tiết thi hành ác, nó đã được gỡ bỏ bằng Python 2.7. Không sử dụng nó. – Duncan