Nó sẽ không hoạt động.
Điều bạn đang cố gắng làm là, về cơ bản, không gian tên của người gọi.
Hãy thử điều này:
print "0", locals()
def foo(): pass
print "1", locals()
del foo
print "2", locals()
Lưu ý rằng
- người dân địa phương dict tại 0 và 2 giống hệt nhau, và lúc 1 gần - ngoại trừ nó có nhiệm vụ bổ sung của
foo
.
del
là một tuyên bố và không phải là một chức năng
Nếu bạn làm del
trong một chức năng delete_function()
, về cơ bản các nhiệm vụ trong phạm vi chức năng của bạn sẽ được xóa (đó là không hiệu quả bởi vì hàm được chấm dứt ngay lập tức), trong khi người gọi giữ nhiệm vụ.
Nói chính xác, del
không xóa đối tượng, mà chỉ đơn thuần chỉ định từ tên đến đối tượng. Các đối tượng bị xóa "tự động" (rác được thu thập) ngay sau khi chúng không được tham chiếu nữa.
COULD hoạt động những gì bạn cố gắng thực hiện bằng cách kiểm tra khung ngăn xếp và chuyển tên sẽ bị xóa dưới dạng chuỗi, nhưng nó sẽ là PITA.
Có lẽ bạn thử
del locals()['foo']
hoặc
locals()['foo'] = 42
? Nhưng tôi nghĩ rằng nó không phải là guarantteed rằng nó thực sự sửa đổi từ điển địa phương thực sự, nó cũng có thể hoạt động trên một bản sao và do đó ở lại effectless ...
vấn đề bạn hy vọng sẽ giải quyết với kỹ thuật này là gì? – SingleNegationElimination
Thật vậy. Tại sao, vì tình yêu của mã, tại sao? – Macke
Nếu bạn phải làm điều này, có thể có điều gì đó sai với việc triển khai của bạn. –