【Python基础】当变量有值时,为什么会出现UnboundLocalError?
?先來看兩段代碼。
#?代碼段一 x?=?10def?bar():print(x)bar() # 輸出 10 #?代碼段二 x?=?10def?foo():print(x)x?+=?1foo() # 輸出 Traceback (most recent call last):... UnboundLocalError:?local?variable?'x'?referenced?before?assignment????可以看到,第一段代碼能夠正常工作,然而第二段似乎有些令人意外,為什么呢?
????這是因?yàn)樵趯?duì)作用域中的變量進(jìn)行賦值時(shí),該變量將成為該作用域的局部變量,并隱藏外部作用域中相同命名的變量。我們來看第二段中的代碼,foo函數(shù)中的最后一個(gè)語句給x分配了一個(gè)新值,編譯器會(huì)將其識(shí)別為局部變量。因此,前面的print(x)嘗試打印未初始化的局部變量時(shí)就會(huì)導(dǎo)致錯(cuò)誤。那想實(shí)現(xiàn)在函數(shù)內(nèi)修改函數(shù)外部同名變量的功能,應(yīng)該怎么辦呢?
????我們可以通過將x聲明為全局來訪問外部作用域中的變量:
????
? ? 通過global關(guān)鍵字的顯式聲明,就可以在函數(shù)作用域內(nèi)訪問外部作用域中的同名變量并進(jìn)行值的修改。當(dāng)然我們也可以通過nonlocal關(guān)鍵字在嵌套作用域中執(zhí)行類似的操作:
獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:
https://t.zsxq.com/y7uvZF6
本站qq群704220115。
加入微信群請(qǐng)掃碼:
總結(jié)
以上是生活随笔為你收集整理的【Python基础】当变量有值时,为什么会出现UnboundLocalError?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】CS224N课程笔记|词向量I
- 下一篇: 【机器学习基础】用Python画出几种常