日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python函数教程:global 和 nonlocal的详细用法

發(fā)布時(shí)間:2025/3/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python函数教程:global 和 nonlocal的详细用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

global 方法

我們來(lái)看下面這段代碼:

b = 100 def func():b = b + 1return b print(func())

這段代碼看上去中規(guī)中矩,似乎沒(méi)有什么問(wèn)題,但是程序運(yùn)行后確報(bào)錯(cuò)。

這是因?yàn)樵?Python 中,不允許直接在局部空間修改全局變量。b = b + 1 是一個(gè)沖突的語(yǔ)句:等式右邊的 b 是要調(diào)用一個(gè)全部變量,而等號(hào)右邊卻是要定義一個(gè)局部變量。

如果將 b 視作一個(gè)全局變量依然不合適。在函數(shù)中修改全局變量會(huì)對(duì)其他調(diào)用相同變量的函數(shù)造成影響,除非萬(wàn)不得已或者十分確定的情況下,不建議在函數(shù)中修改全局變量。

當(dāng)我們確定需要在函數(shù)中修改全局變量時(shí),可以通過(guò) global 方法來(lái)實(shí)現(xiàn):

b = 100 def func():global bb = b + 1return b print(func())

輸出的結(jié)果為:

101

如果 global 聲明的變量在全局空間中不存在,將會(huì)在全局空間中新建一個(gè)變量:

def func():global aa = 10a = a + 12print(a) func() print(a)

輸出的結(jié)果為:

22 22

nonlocal 方法

對(duì)于回環(huán)嵌套的函數(shù)來(lái)說(shuō),也會(huì)有類似的問(wèn)題。當(dāng)嘗試使用內(nèi)層函數(shù)修改外層函數(shù)的變量時(shí)會(huì)報(bào)錯(cuò):

a = 15 def func():a = 10def foo():a = a + 1foo()print(a) func() print(a)

類似地,也不建議在內(nèi)層函數(shù)中修改外層函數(shù)的變量。如果一定要修改的話,可以使用 nonlocal 方法:

a = 15 def func():a = 10def foo():nonlocal aa = a + 1foo()print(a) func() print(a)

輸出的結(jié)果為:

11 15

nonlocal 方法只修改離它最近的一層函數(shù)的變量,如果這一層沒(méi)有就往上一層查找,只能在局部查找。另外,外層函數(shù)不能調(diào)用內(nèi)層函數(shù)的變量,即便用 nonlocal 方法也不行。如果外層所有函數(shù)中都沒(méi)有聲明的變量,即便全局空間中有也不行,而且 nonlocal 不能創(chuàng)建變量。如果找不到,就會(huì)報(bào)錯(cuò):

a = 15 def func():def foo():nonlocal aa = a + 1foo() func() print(a)

其實(shí)想來(lái)這個(gè)設(shè)定也是合理的:如果外面套了很多層函數(shù),這個(gè)變量該在哪一層創(chuàng)建呢?

global 和 nonlocal方法總結(jié)

global 只修改全局空間中存在的變量

  • 在局部空間中可以使用全局中的變量,但是不能修改。如果要強(qiáng)制修改,需要使用 global 聲明
  • 當(dāng)變量在全局存在時(shí),global 就是聲明我要修改全局的變量
  • 當(dāng)變量在全局中不存在時(shí),global 則是聲明要在全局創(chuàng)建一個(gè)變量

nonlocal 只修改局部空間中的變量,最多只能到達(dá)最外層函數(shù)

  • 在內(nèi)層函數(shù)中可以使用外層函數(shù)中的變量,但是不能修改。如果要強(qiáng)制修改,需要使用 nonlocal 聲明
  • 只修改離 nonlocal 最近的一層,如果這一層沒(méi)有就往上一層查找,不能找到全局中
  • nonlocal 不能創(chuàng)建變量,如果其聲明的變量在外層函數(shù)中找不到,即便全局空間中有,也會(huì)報(bào)錯(cuò)

對(duì)函數(shù)的傳參有一點(diǎn)補(bǔ)充,傳參的時(shí)候相當(dāng)于在當(dāng)前函數(shù)體中進(jìn)行了賦值操作:

''' 學(xué)習(xí)中遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(a):# 相當(dāng)于在func函數(shù)體中寫了這么一個(gè) a = 100 操作print(locals()) func(100)

最后來(lái)一道思考題,請(qǐng)確定下列函數(shù)輸出的結(jié)果:

a = 10 def func():a = 5def foo():a = 3def f():nonlocal aa = a + 1def aa():a = 1def b():global aa = a + 1print(a)b()print(a)aa()print(a)f()print(a)foo()print(a) func() print(a)

總結(jié)

以上是生活随笔為你收集整理的python函数教程:global 和 nonlocal的详细用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色在线观看网址 | 亚欧美在线 | 国产亚洲综合av | 国产午夜精品一区二区理论影院 | 在线精品福利 | 国产精品美女久久久久图片 | 欧美成人精品一区二区三区在线观看 | 欧美性猛交ⅹxx乱大交 | 老司机激情影院 | 肉丝袜脚交视频一区二区 | 2019国产精品 | 国产成人综合精品 | 又黄又爽一区二区三区 | 久久国产精品国产精品 | 999免费| 亚洲综合色吧 | 伊人一区二区三区四区 | 免费成人av在线播放 | 九九热播视频 | 日批视频在线看 | 国产成人在线观看免费网站 | 91国内精品久久久 | 在线污视频| 性生活网址 | 青青久久av北条麻妃黑人 | 国产精品99久久 | 欧美黄色免费视频 | 蜜桃av噜噜一区二区三区网址 | 国产成年视频 | 欧色丰满女同hd | 无套爆插 | 日韩精品一区二区免费视频 | 久久99精品久久久久久园产越南 | 国产白拍| 久草超碰在线 | 黄色av日韩 | 亚洲欧洲一区二区在线观看 | 久久久亚洲国产 | 哺乳喂奶一二三区乳 | 日老女人视频 | 欧美午夜精品久久久久久浪潮 | 在线观看福利网站 | 亚洲成人中文字幕 | 日本一本高清 | 欧美另类视频在线 | 精品久久蜜桃 | 中文精品在线观看 | 国产色区 | 水蜜桃亚洲精品 | 激情六月 | 亚洲妇熟xx妇色黄蜜桃 | 精品国产91 | 欧美黄色短片 | 日韩爱爱爱 | 成年丰满熟妇午夜免费视频 | 337p嫩模大胆色肉噜噜噜 | 国产又粗又长 | 日韩人妻无码精品久久久不卡 | 欧美亚洲国产成人 | 日韩精品在线视频 | 日韩黄色免费电影 | 蜜臀av性久久久久蜜臀aⅴ | jul023被夫上司连续侵犯 | www.色悠悠 | 日韩久久精品电影 | 午夜久久电影 | 九色影视 | 福利视频免费观看 | 天天干天天色天天 | 中文字幕网伦射乱中文 | 在线亚洲成人 | 欧美在线观看一区二区三区 | 日本天堂在线观看 | 一区二区三区精品 | 欧美在线性视频 | 18岁毛片| av成人天堂 | 强睡邻居人妻中文字幕 | 国产稀缺精品盗摄盗拍 | 女人张开腿让男人插 | 青娱乐91视频| 欧美黄色大片在线观看 | 黑人高潮一区二区三区在线看 | 干一干操一操 | 日本高清免费看 | 亚欧美| 善良的女朋友在线观看 | 色老板最新地址 | 人民的名义第二部 | 日韩欧美国产亚洲 | 天堂福利在线 | 台湾无码一区二区 | 性av网| 91精品综合久久久久久 | 国产欧美精品一区二区三区app | 欧美一极片 | 91在线视频观看 | 高清欧美性猛交xxxx黑人猛交 | 天堂网2020 |