?局部變量和全局變量是面試熱點
通常小白在寫代碼時碉输,只知道引用變量來應對一些基礎的編碼問題跟继,當面試官問及局部變量和全局變量的具體細節(jié)時,就會一臉懵逼蛙婴,傻傻分不清楚粗井!其實想要徹底了解局部變量和全局變量的關系,本質是大家需要明白何為作用域街图!這篇文章會帶大家徹底搞懂這三者之的唇齒相依的關聯(lián)浇衬!Python中,程序的變量并不是在哪個位置都可以訪問的餐济,訪問權限決定于這個變量是在哪里賦值的耘擂。變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python的作用域一共有4種絮姆,分別是:
L(Local):最內層醉冤,包含局部變量,比如一個函數(shù)/方法內部篙悯。
E(Enclosing):包含了非局部也非全局的變量蚁阳。比如兩個嵌套函數(shù),一個函數(shù)(或類) A 里面又包含了一個函數(shù) B 鸽照,那么對于 B 中的名稱來說 A 中的作用域就為非局部螺捐。
G(Global):當前腳本的最外層,比如當前模塊的全局變量矮燎。
B(Built-in): 包含了內建的變量/關鍵字等定血。,最后被搜索诞外。
Python中只有模塊(module)澜沟,類(class)以及函數(shù)(def、lambda)才會引入新的作用域峡谊。
局部作用域與全局作用域
定義在函數(shù)內部的變量擁有一個局部作用域茫虽,定義在函數(shù)外的擁有全局作用域铝条。局部變量只能在其被聲明的函數(shù)內部訪問,而全局變量可以在整個程序范圍內訪問席噩。例如:
內建作用域
我們在模塊中的任意位置都可以使用內置變量,例如:
類的作用域
類分為類變量和實例變量贤壁,類變量定義在方法外悼枢,實例變量定義在方法內。類變量和實例變量的作用域解釋說明如下圖:
類變量是所有對象共有脾拆,其中一個對象將它值改變馒索,其他對象得到的就是改變后的結果;而實例變量則屬于對象私有名船,某一個對象將其值改變绰上,不影響其他對象。如下圖所示:
執(zhí)行代碼渠驼,運行結果如下:
可以看到代碼中 B.c_b=456 影響了實例b2中的類變量結果(從123變?yōu)?56)蜈块;而在init方法中,最后一句self.my_var=1 目的是對實例方法進行重新賦值迷扇,但是他并未影響b2中my_var的輸出(還是0)原創(chuàng)不易百揭,如果文章幫到了你,歡迎轉發(fā)蜓席,讓更多的朋友受益器一!
?