前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之全局与局部变量

Python之全局与局部变量

作者头像
py3study
发布2020-01-14 12:16:56
4560
发布2020-01-14 12:16:56
举报
文章被收录于专栏:python3python3python3
'''
命名空间 : 每次在python解释器启动之后,就会在内存开辟一块内存空间,每当遇到一个变量时,就会在命名空间中,记录下变量名和值之间的关系,也即记录变量对应的值在内存空间中的
           地址;当一个函数时,会在命名空间中记录下函数名以及函数的地址;
内置命名空间 : 解释器启动伊始开辟声明内置函数的内存空间;
局部命名空间 : 在函数内部,为变量或函数开辟的命名空间;
作用域 : 函数或变量的生命周期;
查看全局作用域中的所有内容 : globals()
查看局部作用域中的所有内容 : locals()
函数的嵌套 : 也即支持在一个函数内部可以定义另一个函数
慎用 :
    当需要在局部作用域内,对全局变量进行操作时,需以global关键字声明,要直接对全局变量进行操作,这里的全局,包括绝对全局和相对全局,也即可以对所有大于当前作用域的所有
    作用域内的所有变量进行声明
    当需要对大于当前作用域,但又并非全局作用域内的变量进行操作时,需以nonlocal关键字声明该变量;
重点(神坑) : 定义函数时,在同一个代码块内,多次调用同一个函数,默认值参数对应的内存空间始终不变,对默认值参数进行修改也始终是在默认值参数对应内存空间上进行修改;
    案例(从指针的角度理解) :
    def test(value, lst = []) :
    lst.append(value)
    print(lst)
    return lst
    lst1 = test("a")    #第一次调用test函数,在lst所在内存空间写入值a,打印a,并返回lst的地址
    lst2 = test("b", [])    #第二次调用test函数,由于我们这次没有使用lst的默认值,而是手动赋值,因此会为lst形参开辟一块新的内存空间,并写入值b,打印b,
                             返回新开辟的内存空间的地址;
    lst3 = test("c")    #第三次调用test函数,由于再次使用了lst的默认值,所以会在lst默认开辟的内存空间内写入c,也即["a", "c"],打印["a", "c"],并返回其地址;
    print(lst1)     #lst1接收到的为test函数为lst默认开辟的内存空间的地址,而默认的内存空间存的是["a", "c"],因此打印结果为["a", "c"]
    print(lst2)     #lst2接收的是为实参新开辟的内存空间的地址,存的值为["b"],因此打印结果为["b"]
    print(lst3)     #lst2接收到的为为默认形参lst开辟的内存空间的地址,存的值为["a", "c"],因此打印结果为["a", "c"]
    结果 :
   ['a']
   ['b']
   ['a', 'c']
   ['a', 'c']
   ['b']
   ['a', 'c']
'''
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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