前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的global和nonl

python中的global和nonl

作者头像
py3study
发布2020-01-02 15:23:28
5570
发布2020-01-02 15:23:28
举报
文章被收录于专栏:python3python3

声明: 这篇文章很大程度上借鉴了Global, Local and nonlocal Variables

local变量

与其它的编程语言相同,在函数中声明的变量都是local变量。作用域仅限于函数中,从函数外是访问不到的。

代码语言:javascript
复制
In [1]: def f():
            s = 'local val'
            print('read s from interval:', s)

In [2]: print(s)
NameError: name 's' is not defined

In [3]: f()
read s from interval: local val

global变量

在源文件中(非函数或类)声明的变量默认是global变量。

  • 在函数中可以随意读取global变量,这一点不多说,不管是函数声明在前,还是global变量声明在前
  • 涉及到修改global变量的时候,要特别注意了: 如果在函数体中未使用global声明这个变量,那么函数体中修改的是local变量的值,global变量并未更新。
代码语言:javascript
复制
In [4]: s = 'global val'

In [6]: def f():
   ...:     s = 'change global val'
   ...:     print('change global val', s)
   ...:     

In [7]: f()
change global val change global val

In [8]: s
Out[8]: 'global val'

正确的做法应该是:

代码语言:javascript
复制
In [4]: s = 'global val'

In [6]: def f():
   ...:     global s
   ...:     s = 'change global val'
   ...:     print('change global val', s)
   ...:     

In [7]: f()
change global val change global val

In [8]: s
Out[8]: 'change global val change global val'

nonlocal变量

nonlocalpython3引入的,只能用于嵌套函数中。在嵌套函数中使用nonlocal声明变量,可以修改外层函数中的变量。

代码语言:javascript
复制
In [11]: def outer():
    ...:     s = 'outer val'
    ...:     def inner():
    ...:         nonlocal s
    ...:         s = 'inner val'
    ...:         print('change outer s',s)
    ...:     print('before inner(), s=', s)
    ...:     inner()
    ...:     print('after inner(), s=', s)
    ...:     

In [12]: outer()
before inner(), s= outer val
change outer s inner val
after inner(), s= inner val
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • local变量
  • global变量
  • nonlocal变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档