先看一段**
class
car():
def__init__
(self,name):
self.name = name
def__repr__
(self):
return self.name
if __name__ == '__main__':
import weakref
cars = (1)
weak = weakref.weakvaluedictionary()
for i in cars: (2)
weak[i.name] = i
print(list(weak.keys()))
del cars (3)
print(list(weak.keys()))
**的輸出
['bj', 'bm', 'dz']
['dz']
(1)建立了乙個car物件的集合
(2)將car物件的name屬性作為鍵,car物件作為值,建立了乙個對映,這個對映的值是弱引用
(3)刪除cars引用
正常來講刪除掉乙個物件的所有引用(不包括弱引用)後,這個物件將會被銷毀,然而在這裡我們通過弱引用發現 『dz』 這個物件並沒有被銷毀,這是因為 for 迴圈中那個 i 是全域性變數,他仍然保持這對 『dz』 這個物件的乙個引用,因此 『dz』 並沒有被銷毀。
再看一段**
def
func
():if
true:
a = 12
print(a)
if __name__ == '__main__':
func()
來看控制台輸出
12
在func函式中if外的**可以訪問if內的變數,說明if內的作用域和if外是同乙個作用域,在上面for中也是一樣的,這說明if for 等語句內部的作用域和外部的作用域是相同的。 python中變數作用域
塊級作用域 if true a 10 變數沒有塊級作用域 print a 區域性作用域 只能在某一時刻才能使用 全域性作用域 num 20 def show 全域性變數在函式內部使用時,不能更改,num 10是你自己定義的變數 num 10 print num show print num 若更改需...
Python中變數作用域
在def中定義的變數都是區域性變數 def foo a 200print a def fooo a a 300print a fooo foo 執行得到 unboundlocalerror local variable a referenced before assignment也就是說在函式foo...
python中函式作用域
在python中,乙個函式就是乙個作用域 name xiaoming defchange name name sthu print 在change name裡的name name change name 呼叫函式 print 在外面的name name 執行結果如下 在change name裡的na...