精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python中令人頭疼的變量作用域問題,終于弄清楚了

開發 后端
學習Python變量過程中,曾經為變量混亂的作用域問題頭疼不已,全局變量、局部變量、自由變量傻傻分不清,今天來跟大家分享 Python變量作用域 的知識點。

 我們經常聽說Python函數訪問局部變量、全局變量;在定義裝飾器的時候,還會使用自由變量。這些不同的變量是如何賦值、初始化、查找及修改的呢?各自的作用細則又是什么樣的呢?本篇嘗試解答這個問題。

[[398262]]

Python中的變量名可以指代變量、函數、類、對象等。一般來說,每個對象都有一個變量名指向,更準確說是 綁定。

作用域的必要性

為啥變量要有作用域呢?

我們在Python里遇到的內置、局部、全局及自由變量,就是說變量的作用域。

語言區分作用域,是為了復用變量名。引入作用域,相當于給變量劃分了各自的“隔離區”,在不同”隔離區“里,查找變量變得很容易。

正是因為有了作用域,我們在函數內才可以隨意使用變量名,而不擔心其與全局變量、其他函數中的變量沖突——因為這兩個作用域是分割的。

BASIC語言只有全局變量,你能想象嗎?你在一個函數里命名的循環變量i,很可能跟全局變量沖突。寫起程序來,舉步維艱。且會導致很多修改、檢索問題,維護很困難。

Python變量定義的時間和空間

Python 有哪些作用域呢?

Python是動態類型語言,變量是在定義的時候賦值的。這句話的意思我們分以下幾個方面來理解:

  • a = 1 賦值時定義變量
  • from tools import cubie 導入時定義變量 cubie
  • def fun():pass 定義函數,綁定變量fun
  • def fun(name=None):pass 定義變量name為函數fun的形式變量(也是局部變量),同時定義函數,綁定便令fun
  • class Car:pass 定義類,綁定類名Car

以上,我們弄清了變量定義的時刻,下面來看變量的作用域,也就是變量的活動空間怎么規定出來的。

變量作用域取決于其 定義位置。

  • 定義在函數內部的變量、定義在函數聲明中的形式參數,視為局部變量。
  • 定義在 .py 文件內的,且函數、類之外的變量,視為全局變量。
  • 定義在函數中,嵌套函數外,且被嵌套函數引用的變量,視為自由變量。
  • 定義在builtin中的變量,視為內置變量。

面對如此復雜的四種變量作用域,用一個例子來說明它們的訪問規則。

LEGB規則

四個作用域遵循LEGB規則,讓我們用一個例子來說明。

 

  1. import builtins 
  2.  
  3. builtins.b = 'builtins' 
  4. g = 'global' 
  5.  
  6. def outer(o1,o2='o2'): 
  7.     e = 'enclose' 
  8.     def inner(i1,i2='i2'): 
  9.         print(i1,i2,o1,o2,e,g,b) 
  10.     return inner  
  11.  
  12. fun = outer('o1')  
  13. fun('i1'

其輸出為 i1 i2 o1 o2 enclose global builtins

可見,在outer函數的嵌套函數inner中的輸出語句 print(i1,i2,o1,o2,e,g,b) 是本程序的重點。其具體執行情況如下:

  • print i1和i2,毫無疑問的局部變量。
  • print o1和o2,本地作用域沒有,向上查找到outer函數形參。形參也為局部變量,所以該變量實際定義在outer函數內,inner這個內嵌函數外,而inner內部引用了這個變量,所以視為自由變量。
  • print e,本地作用域沒有,類似上例,視為自由變量。
  • print g,本地作用域沒有,自由變量作用域(閉包)沒有,一直上溯到全局作用局找到。
  • print b,本地作用域沒有,自由變量作用域(閉包)沒有,全局作用局沒有,一致上溯到內置變量空間找到。

至此,LEGB規則呼之欲出:在本地空間尋找不到的變量,逐級向上級尋找。這里的LEGB分別指代Local,Enclose,Global和Builtin。

在函數中讀取和賦值全局變量,在內嵌函數中讀取和賦值自由變量,會有一些不同的地方。

nonlocal 和 global

對變量名的賦值和引用,是兩種不同的情況:

  • 賦值:創建一個變量或者修改。
  • 引用:檢索其值。

以上兩者的差別,會導致我們在函數中:

  • 賦值一個
  1. 全局變量:等于創建一個局部變量。
  2. 自由變量:等于創建一個局部變量。
  • 引用:正常檢索其值。

我們修改上例中的inner函數為如下形式:

 

  1. def inner(i1,i2='i2'): 
  2.     e = 'enclose' 
  3.     g = 'inner global' 
  4.     print(i1,i2,o1,o2,e,g,b) 

在嵌套函數內,重新定義了g變量,其他語言一般理解這是重新賦值全局變量。但是我們看上條規則:在函數中,賦值一個全局變量時,等于創建一個局部變量。就是說此時的g已經是局部變量了——在程序最后的 print(g) 語句輸出 global,而不是修改后的 inner global 也驗證了以上規則。

完整代碼如下:

 

  1. import builtins 
  2.  
  3. builtins.b = 'builtins' 
  4. g = 'global' 
  5.  
  6. def outer(o1,o2='o2'): 
  7.     e = 'enclose' 
  8.     g = 'inner global' 
  9.     def inner(i1,i2='i2'): 
  10.         print(i1,i2,o1,o2,e,g,b) 
  11.     return inner  
  12.  
  13. fun = outer('o1')  
  14. fun('i1'
  15.  
  16. print(g) 

輸出結果如下:

 

  1. i1 i2 o1 o2 enclose inner global builtins 
  2. global 

不重新賦值,只是使用全局變量和自由變量,則沒有問題。

自由變量也是類似的情況。

為了解決局部作用域中賦值全局變量和自由變量導致的變成局部變量問題,Python引入關鍵字 global 和 nonlocal 。

 

  1. def inner(i1,i2='i2'): 
  2.     global g 
  3.     nonlocal e 
  4.     g = 'inner global' 
  5.     e = 'inner enclose' 

此時的賦值,則分別是對全局變量和自由變量的操作,而非新建局部變量。

完整代碼如下:

 

  1. import builtins 
  2.  
  3. builtins.b = 'builtins' 
  4. g = 'global' 
  5.  
  6. def outer(o1,o2='o2'): 
  7.     e = 'enclose' 
  8.     def inner(i1,i2='i2'): 
  9.         global g 
  10.         nonlocal e 
  11.         g = 'inner global' 
  12.         e = 'inner enclose' 
  13.         print(i1,i2,o1,o2,e,g,b) 
  14.     return inner  
  15.  
  16. fun = outer('o1')  
  17. fun('i1'
  18.  
  19. print(g) 

輸出結果如下:

 

  1. i1 i2 o1 o2 inner enclose inner global builtins 
  2. inner global 

總結

  • Python的作用域分為四種,分別是局部、全局、自由和內置;
  • 定義變量的位置決定了變量的作用域;
  • 作用域的查找遵守LEGB規則;
  • 為了在局部作用域中修改全局變量和自由變量,引入了 global 關鍵字和 nonlocal 關鍵字。

 

責任編輯:華軒 來源: Python數據之道
相關推薦

2017-10-20 12:00:36

Python全局解釋器鎖GIL

2017-03-31 15:30:09

2020-02-18 16:48:48

大腦CPU包裝

2020-11-17 08:32:22

存儲器鏈接

2023-04-19 09:05:44

2010-04-08 13:17:39

IT管理系統遷移賽門鐵克

2022-04-07 08:37:05

鏈表技巧單鏈表

2012-05-28 10:06:05

項目開發項目管理開發

2017-07-14 14:52:25

MySQLAborted告警案例分析

2021-03-11 15:49:44

人工智能深度學習

2022-05-30 08:05:11

架構

2021-03-19 14:12:24

2010-11-16 09:07:32

2024-01-12 08:26:16

Linux磁盤文件系統

2022-05-19 12:14:22

分布式開發框架

2017-09-26 10:36:52

云端部署內部

2022-03-11 07:59:09

容器代碼元素

2018-10-25 09:26:07

VLANVXLAN網絡

2017-10-28 23:00:52

多云混合云云計算

2020-12-16 11:09:27

JavaScript語言開發
點贊
收藏

51CTO技術棧公眾號

亚洲欧美日韩成人| 国产精品久久久久久久裸模| 欧美激情视频三区| 亚洲乱码国产乱码精品精大量| yellow字幕网在线| 久久免费看少妇高潮| 国产欧美日韩最新| 久久久久久久久久久久久久久久久 | 久久综合久色欧美综合狠狠| 国产精品嫩草影院一区二区| 久久久久国产精品夜夜夜夜夜| 婷婷国产精品| 欧美一区二区三区成人| 日韩精品一区二区三区久久| 黄色的网站在线观看| proumb性欧美在线观看| 国产欧美中文字幕| 青青青国产在线| 欧美fxxxxxx另类| 亚洲欧洲xxxx| 少妇精品无码一区二区| 欧美暴力调教| 悠悠色在线精品| 亚洲欧美久久234| 亚洲aaa在线观看| 国产精品一二三在| 国产精品久久久久秋霞鲁丝| 国产女同在线观看| 欧美精品大片| 久青草国产97香蕉在线视频| 精品成人无码一区二区三区| 高潮久久久久久久久久久久久久| 欧美美女直播网站| 黄色一级一级片| 黄频免费在线观看| 一区二区三区在线高清| 一区二区三区四区五区精品| 久草福利在线视频| 97精品超碰一区二区三区| 97影院在线午夜| 国产欧美日韩综合精品一区二区三区| 日韩成人免费电影| 国产91精品在线播放| 欧美bbbbbbbbbbbb精品| 激情成人综合| 欧美激情视频免费观看| 激情视频在线播放| 欧美精品一级| 九九综合九九综合| 欧美精品久久久久性色| 欧美成人高清| 欧美国产激情18| 午夜免费激情视频| 欧美.www| 久久久噜噜噜久久中文字免| 久久免费视频精品| 韩国在线一区| 韩日精品中文字幕| 女人十八岁毛片| 亚洲综合好骚| 国产不卡视频在线| 男人天堂视频在线| 日韩国产高清影视| 国产精品高潮呻吟久久av黑人| 麻豆精品久久久久久久99蜜桃| 亚洲综合二区| 国产精品久久二区| 国产又大又黑又粗| 国产精品亚洲一区二区三区妖精| 99理论电影网| 天天射天天操天天干| 26uuu精品一区二区| 欧美极品一区二区| 成人免费在线电影| 亚洲人成在线播放网站岛国| 成年丰满熟妇午夜免费视频| xxxcom在线观看| 日韩欧美国产骚| 91蝌蚪视频在线观看| 欧美亚洲福利| 欧美一区二区精品在线| 视频免费在线观看| 在线日韩一区| 色黄久久久久久| 亚洲av鲁丝一区二区三区| 亚洲黄色视屏| 国产精品福利在线观看| 国产成人麻豆精品午夜在线| www.欧美日韩| 亚洲欧美久久久久一区二区三区| 超碰在线caoporen| 精品二区三区线观看| 在线亚洲人成电影网站色www| 91精品国产综合久久久久久久久| 国产熟女精品视频| 成人午夜av在线| 欧美亚洲另类久久综合| av大大超碰在线| 欧美日韩在线影院| www.日本xxxx| www.久久东京| 中文字幕欧美专区| 久久国产在线视频| 视频一区欧美日韩| 99国产超薄丝袜足j在线观看| 污污视频在线观看网站| 国产精品日产欧美久久久久| 性高湖久久久久久久久aaaaa| 黄色成人免费网| 日韩无一区二区| a天堂中文字幕| 亚洲无吗在线| 国产欧美一区二区三区视频| 日色在线视频| 亚洲精品免费一二三区| 国产一二三四在线视频| 9l视频自拍九色9l视频成人| 色综久久综合桃花网| 国产精品美女毛片真酒店| 久久精品国产999大香线蕉| 激情视频一区二区| 91亚洲天堂| av电影院在线看| 婷婷一区二区三区| 日本中文字幕在线不卡| 国产一区二区电影在线观看| 国外成人在线播放| 97人妻精品一区二区三区动漫| 久久亚洲综合色一区二区三区| av网站大全免费| 亚洲老司机网| 中文字幕在线精品| 天堂中文字幕在线观看| 成人av动漫在线| 日韩在线视频在线| 91精品一久久香蕉国产线看观看| 在线播放日韩欧美| 免费看日批视频| 2022国产精品视频| 97国产在线播放| 巨人精品**| 国模私拍视频一区| 黄色福利在线观看| 亚洲高清视频在线| 欧美熟妇精品一区二区| 欧美精品播放| 国产 高清 精品 在线 a| 亚洲资源一区| 日韩三级视频在线观看| 在线观看成人毛片| 国产精品乡下勾搭老头1| 狠狠精品干练久久久无码中文字幕| 少妇精品视频在线观看| 久久精品国产99国产精品澳门| 国产91精品入口17c| www天堂在线| 伊人性伊人情综合网| 亚洲一区视频在线| 久草在在线视频| 精品一区不卡| 国产精品久久久久久久久久尿| 国产精品久久久久一区二区国产| 色av成人天堂桃色av| 国产精品免费无码| 久久成人羞羞网站| 国产又粗又爽又黄的视频| 精品国模一区二区三区欧美| 欧美大片免费观看在线观看网站推荐| 亚洲精品字幕在线观看| 天天影视网天天综合色在线播放| 法国伦理少妇愉情| 免费人成精品欧美精品 | 成人在线一区| 成人久久精品视频| 久久亚洲资源| 亚洲精品久久久一区二区三区| 最近免费中文字幕大全免费版视频| 国产亚洲一区二区三区| 色一情一区二区三区| 欧美三级特黄| 欧美极品视频一区二区三区| 日韩欧美激情| 午夜精品蜜臀一区二区三区免费| 欧美精品久久久久久久久久丰满| 欧美日本在线视频| 精品人妻在线播放| 国产亚洲精品aa午夜观看| 精品综合久久久久| 99国产精品久久久久久久| 日韩免费毛片| 波多野结衣一区二区三区免费视频| 911国产网站尤物在线观看| 国产又粗又猛又爽又黄av| 亚洲美女尤物影院| 一区二区三区无码高清视频| 国产视频在线观看免费| 欧美日韩在线视频观看| 999精品在线视频| 91最新地址在线播放| jizz18女人| 国产一区二区三区久久| 中国成人在线视频| 台湾色综合娱乐中文网| 91影视免费在线观看| 中文字幕资源网在线观看免费| 少妇av一区二区三区| 天堂网在线资源| 欧美日韩精品电影| 亚洲免费黄色网址| 亚洲黄色尤物视频| 大吊一区二区三区| 91亚洲精华国产精华精华液| xxxx在线免费观看| 久久婷婷av| www.射射射| 欧美成人久久| 一区二区三视频| 欧美猛男男男激情videos| 国产成人免费电影| 亚洲网站免费| 国产精品九九九| 日本在线啊啊| 久久久视频精品| 国产在线观看a| 欲色天天网综合久久| 飘雪影院手机免费高清版在线观看| 日韩欧美专区在线| 国产一区二区三区视频免费观看| 色香色香欲天天天影视综合网| 日本特黄一级片| 亚洲一级电影视频| 青青青在线免费观看| 国产精品久久久久久久岛一牛影视 | www.五月婷婷.com| 欧美日韩国产色| 国产午夜小视频| 一区二区三区在线视频免费观看| 国产极品视频在线观看| 久久久久九九视频| 成年人网站免费在线观看| 91亚洲永久精品| 国产美女视频免费观看下载软件| 国产成人免费av在线| 亚洲一二三av| 国产一区久久久| 男女污污视频网站| 国产做a爰片久久毛片| 日本不卡一区在线| 久久国产精品免费| 一本一道久久a久久综合蜜桃| 毛片av中文字幕一区二区| 在线观看的毛片| 久久成人综合网| 久久综合桃花网| 国产成人精品在线看| 日本wwwwwww| 99精品欧美一区二区蜜桃免费 | 精品久久久中文字幕| 欧美日韩视频在线一区二区观看视频| 香蕉久久夜色精品国产使用方法| 久久99精品国产一区二区三区| 日韩最新在线| 日韩三级在线播放| 国产精品久久久久久久| 喜爱夜蒲2在线| 亚洲精品激情| 激情六月丁香婷婷| 日韩不卡在线观看日韩不卡视频| 天堂av在线网站| 国产乱子伦一区二区三区国色天香| 欧美色图校园春色| 北条麻妃一区二区三区| www.色多多| 国产精品第一页第二页第三页| 国产suv精品一区二区68| 一区二区三区久久| 69视频免费在线观看| 欧美三级蜜桃2在线观看| av加勒比在线| 日韩av综合中文字幕| 国产youjizz在线| 欧美超级乱淫片喷水| 黄色激情在线播放| 国产在线999| 久久亚洲道色| 亚洲制服中文| 亚洲欧洲视频| 午夜免费看视频| av中文字幕一区| 天堂av免费在线| 天天综合色天天| 国产视频在线观看视频| 亚洲乱码一区av黑人高潮| 黄色网页在线看| 欧美在线视频免费播放| 国产精品视频一区二区三区综合| 国产在线精品一区| 91久久久精品国产| 亚洲国产精品久久久久爰色欲| 美女一区二区久久| 日本精品一二三区| 国产精品国产三级国产| 91蜜桃视频在线观看| 欧美精品粉嫩高潮一区二区| 亚洲欧美自偷自拍| 久久99国产精品久久久久久久久| 日产精品一区| 国产一区二区黄色| 亚洲欧洲日韩| 91热这里只有精品| 99久久久久免费精品国产| 无码人妻精品中文字幕 | 99久久久久久久| 亚洲天堂男人天堂女人天堂| 欧美男男video| 成人免费视频网址| 国产欧美日韩精品一区二区免费| av片在线免费| 国产麻豆精品视频| av片在线免费看| 91九色最新地址| 天堂v视频永久在线播放| 九九热精品在线| 日韩毛片网站| 亚洲精品高清视频| 久久高清免费观看| 亚洲天堂成人av| 亚洲成人免费电影| 99久久精品免费看国产交换| 这里只有精品久久| 久久久一本精品| 欧美第一黄网| 老鸭窝毛片一区二区三区| 中文字幕天堂av| 夜夜嗨av一区二区三区中文字幕| 在线播放一级片| 中文字幕日韩欧美在线视频| 日韩成人av电影| 欧美三级华人主播| 免费看的黄色欧美网站| 亚洲精品乱码久久久久久不卡| 亚洲一区二区三区在线看| a级片在线播放| 欧美成人在线免费视频| 久久在线观看| 日本免费成人网| 国产成人在线视频网站| 麻豆影视在线播放| 日韩精品一区二区三区三区免费| 色女人在线视频| 动漫精品视频| 日韩视频一区二区三区在线播放免费观看 | 日韩免费黄色片| 亚洲精品按摩视频| 波多野结衣视频在线观看| 成人久久电影| 91精品国产综合久久久蜜臀图片| 正在播放亚洲| 国产女人18毛片18精品| 国产精品日韩| 91黄色国产视频| 日本久久一二三四| 国产视频1区2区3区| 国产精品高潮呻吟| 国产免费黄色大片| 欧美大片免费观看| 欧美一区 二区| 中文字幕在线观看第三页| 国产精品天美传媒沈樵| 国产毛片久久久久| 欧美激情三级免费| 蜜桃精品wwwmitaows| 一区二区成人网| 一区二区三区在线观看欧美| 头脑特工队2在线播放| 国产精品久久久久77777| 亚洲国产精品成人| 小毛片在线观看| 91精品福利在线| 亚洲性图自拍| 日本视频精品一区| 国产一区二区三区四区五区美女| 动漫精品一区一码二码三码四码| 亚洲伦理中文字幕| www.欧美视频| 欧美色图另类小说| 中文字幕欧美一区| 日韩在线观看视频一区二区三区| 日韩免费中文字幕| 午夜久久99| 国产又粗又猛又爽又黄av | 久久久国产视频91| 秋霞综合在线视频| 91小视频在线播放| 欧美性猛交xxxx乱大交极品| 巨大荫蒂视频欧美另类大| 精品日本一区二区三区| 激情五月激情综合网| 综合网在线观看| 久久男人av资源网站|