激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

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

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

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

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

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

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

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

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

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

如下函數(shù)

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

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

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

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

先用 flag[0] 是讀操作,產(chǎn)生一次變量引用,尋找到外圍作用域中 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()

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久人体 | 青青久热 | 成人福利在线免费观看 | 大学生a级毛片免费视频 | 欧美成人一区二区三区电影 | 国产精品白嫩白嫩大学美女 | 激情小说激情图片激情电影 | 手机视频在线播放 | 久久久久亚洲国产精品 | 色播一区 | 黄色毛片前黄 | 亚洲一区二区免费视频 | 亚洲91网| 毛片视频免费观看 | mmmwww| 欧美亚洲综合在线 | 欧日韩在线 | 精品亚洲免费 | 久久久久久久久久久av | 黄色毛片a级 | 国产精品视频一区二区三区四 | 免费看成年人视频在线 | 精品久久久久久久久久久αⅴ | 亚洲生活片 | 欧美特级黄色 | 亚洲性视频 | 狼网 | 欧美韩国日本在线 | 国产一区二区午夜 | 久久人人做 | av在线免费观看网 | av成人免费在线观看 | av电影免费在线看 | 久久3p视频| 久久国产午夜 | 一级黄色免费 | 精品av在线播放 | a级黄色片视频 | 视频一区 中文字幕 | 毛片大全在线观看 | 看免费毛片 |