這篇文章主要介紹了python global關鍵字的用法詳解,文中經過示例代碼介紹的很是詳細,對你們的學習或者工做具備必定的參考學習價值,須要的朋友能夠參考下:python
想要更好的瞭解global關鍵字,首先要熟悉python的全局變量與局部變量的概念。global關鍵字的做用是能夠申明一個局部變量爲全局變量,下面看一下實例閉包
1、變量做用域的說明ide
一、局部變量函數
1 def a(): 2 ## 菊部變量 - ,- 3 local = 1 4 print(local) 5 ## 全局沒法使用,只有本身可用 6 print(lobal)
二、全局變量工具
1 global_str = '123' 2 def a(): 3 ## 全菊變量 - ,- 4 print(global_str) 5 ## 全菊變量你們均可以用 6 print(global_str)
三、內置做用域學習
系統內固定模塊裏定義的變量,如預約義在builtin 模塊內的變量。這裏不介紹了。開發工具
四、嵌套做用域ui
用的也比較少,主要是用在閉包中,看栗子code
在學習過程當中有什麼不懂得能夠加個人 python學習交流扣扣qun,784-758-214 羣裏有不錯的學習視頻教程、開發工具與電子書籍。 與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容 1 def out(): 2 ## 函數內變量,但對於下級函數就是全局變量,對於外部來講就是局部變量 3 en = 1 4 def inside(): 5 print(en) 6 return en 7 return inside() 8 out()
2、global關鍵字做用視頻
一、在函數間global關鍵字的做用
1 def out(): 2 ## global關鍵字做用 3 global en 4 en = 1 5 ## 調用other能夠打印en,去掉global會報錯。 6 other() 7 print(out.__globals__) 8 def other(): 9 print(en) 10 out()
二、在類中也是同樣,很少說,怕越多越亂,類中能夠用self。
三、其餘文件導入,若是定義好了以後從其餘文件導入了呢?會發生什麼,看一下栗子,a文件仍爲上面栗子中代碼
1 from report.a import * 2 out() 3 print(out.__globals__['en'])
結果:
1 1 2 1
還好還好,沒有報錯。
四、那麼問題來了,若是要在另外一個文件中繼續定義函數,是否是也能夠繼續使用a文件中的global申明的全局變量呢?
1 from report.a import out 2 def b(): 3 print(out.__globals__['en']) 4 ## 直接飆紅了。 -,- 5 print(en) 6 b()
果真報錯了:
1 Traceback (most recent call last): 2 File "/Users/dangfuli/Documents/PycharmProjects/asp/report/b.py", line 9, in <module> 3 b() 4 File "/Users/dangfuli/Documents/PycharmProjects/asp/report/b.py", line 6, in b 5 print(out.__globals__['en']) 6 KeyError: 'en'
也就是說,導入包的話,global定義的全局變量沒有被加到globals裏面。
五、上面好多地方都用到了,func.globals,這個運行一下,看個實例
1 def out(): 2 ## global關鍵字做用 3 global en 4 en = 1 5 other() 6 print(out.__globals__) 7 ## 調用other能夠打印en 8 9 def other(): 10 print(en) 11 12 out() 13 14 ## 返回結果 15 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10306a7b8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/xxx/Documents/PycharmProjects/xxx/report/a.py', '__cached__': None, 'out': <function out at 0x101fcee18>, 'other': <function other at 0x1033f8c80>, 'en': 1}
能夠看到,當前的函數用global以後,en變量就被加到了globals裏面
下面看看導入到其餘地方去的
1 # a.py 2 def out(): 3 ## global關鍵字做用 4 global en 5 en = 1 6 other() 7 print(out.__globals__['en']) 8 ## 調用other能夠打印en 9 10 def other(): 11 print(en) 12 #############上面是a文件,下面是b文件############# 13 14 # b.py 15 from report.a import out 16 17 def b(): 18 ## globals裏面沒有en那個全局變量 19 out() 20 print(b.__globals__['en']) 21 22 b()
看一下結果:
1 1 2 Traceback (most recent call last): 3 File "/Users/xxx/Documents/PycharmProjects/xxx/report/b.py", line 8, in <module> 4 b() 5 File "/Users/xxx/Documents/PycharmProjects/xxx/report/b.py", line 6, in b 6 print(b.__globals__['en']) 7 KeyError: 'en'
能夠看到,導入的a文件正常運行,b文件打印en的時候就報錯了。
以上就是本文的所有內容,但願對你們的學習有所幫助,以爲文章還能夠的話不妨點個贊,有任何意見或者見解歡迎你們評論!