python中if for 作用域問題

2021-08-07 20:39:39 字數 1094 閱讀 2042

先看一段**

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...