一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python 如何訪問外圍作用域中的變量

Python 如何訪問外圍作用域中的變量

2020-09-06 12:05腳本之家 Python

這篇文章主要介紹了Python 如何訪問外圍作用域中的變量的相關資料,需要的朋友可以參考下

在表達式中引用變量時,Python 會按照如下的順序遍歷各個作用域,尋找該變量:

  1. 當前函數作用域
  2. 任何外圍作用域(比如包含當前函數的其他函數)
  3. global 作用域,即代碼所在的模塊的作用域

如果上述作用域內都找不到變量,就會報 NameError 異常。

但是對變量賦值時,規則會有所不同。

  1. 如果當前作用域變量已存在,那么其值會被替換。
  2. 如果不存在,則會視為在當前作用域定義新變量,而不是向外圍作用域中尋找。

如下函數

?
1
2
3
4
5
6
7
8
def function():
  flag = True
  def helper():
    flag = False
  helper()
  print flag
 
function()

由于 helper 中變量是賦值,這里 flag 輸出仍為 True。習慣了 c 語言之類靜態類型語言,這種設計起初會感到困惑,但其可以有效地防止局部變量污染函數外的環境。

需求總是多樣的,一定有程序員想在賦值時訪問外圍作用域。如果是 Python2,他可以這么做

?
1
2
3
4
5
6
7
8
def function():
  flag = [True]
  def helper():
    flag[0] = False
  helper()
  print flag
 
function()

先用 flag[0] 是讀操作,產生一次變量引用,尋找到外圍作用域中 flag,這時候再賦值 flag[0] = False 便不會新定義變量了。

如果是 Python3,則可以使用 nonlocal 關鍵字。

?
1
2
3
4
5
6
7
8
9
def function():
  flag = True
  def helper():
    nonlocal flag
    flag = False
  helper()
  print flag
 
function()

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩国产精品综合 | 亚洲国产成人久久午夜 | 4455在线| 亚洲AV蜜桃永久无码精品无码网 | 毛片影院 | 日韩毛片免费线上观看 | 国外欧美一区另类中文字幕 | 四虎成人免费观看在线网址 | 国产精品天天影视久久综合网 | 日韩先锋| 日本一区二区免费在线 | 修修视频在线观看 | 免费看全黄特黄毛片 | 欧美又大又粗又爽视频 | 男女乱淫真视频播放网站 | 高清在线免费 | 99精品久久精品一区二区 | 果冻传媒在线视频观看免费 | 国产成人免费片在线观看 | 国产精品美女久久久久 | 97国产蝌蚪视频在线观看 | 风间由美在线播放 | 日本免费一区二区三区四区五六区 | 九九九九在线精品免费视频 | 91制片厂果冻星空传媒3xg | 亚洲男人的天堂网 | 91制片厂制作果冻传媒八夷 | 青青青在线视频 | 青草午夜精品视频在线观看 | 色婷婷在线播放 | 午夜AV内射一区二区三区红桃视 | 国产一级视频在线观看 | 成人在线观看一区 | 91国在线观看 | 日韩在线1 | 亚洲男1069gay男猛男 | 擦逼视频 | 天天爱天天做天天爽天天躁 | 国产精品天天在线 | 欧美日韩久久中文字幕 | 日韩精品一区二区三区毛片 |