name = "A"

def test():
    name = "B"
    def test2():
        global name        # global 指的是拿到的是全局的变量,直接改变全局变量
        name = "C"
    test2()
    print("1",name)      # ===>首先使用局部变量

print("2",name)        # ===>此处使用全局变量
test()                          # ===>此处使用局部变量 并将全局变量重新赋值
print("3",name)          # ===>此处使用全局变量(上一步的函数已经将全局变量对应的值修改)
2 A
1 B
3 C
def test():
    name = "B"
    def test2():
        nonlocal name        # nonlocal 指的是拿到的是上一层(作用域)的变量
        name = "C"
    test2()
    print("1",name)      # ===>首先使用局部变量

print("2",name)        # ===>此处使用全局变量
test()                          # ===>将局部变量重新赋值 并使用局部变量
print("3",name)
2 A
1 C
3 A

  小结:

  • python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量
  • global name 用来声明name是全局变量 然后可对name赋值进行修改
  • nonlocal name 用来声明name是上一层变量 然后可对name赋值进行修改

最新文章

  1. java 22 - 16 多线程之生产者和消费者的问题
  2. 用jQuery解析复杂的xml结构文件
  3. WPF中的DataTemplate
  4. bzoj1079: [SCOI2008]着色方案
  5. Kruskal算法构造最小生成树
  6. http发送post请求
  7. tp5引入第三方类库
  8. 网络基础一 交换机 路由器 OSI7层模型
  9. Java 接口基础详解
  10. <<精通iOS开发>>第14章例子代码小缺陷的修复
  11. Python设计模式 - UML - 交互概述图(Interaction Overview Diagram)
  12. 安装PyQt5时缺少designer.exe的解决办法
  13. vue分页组件二次封装---每页请求特定数据
  14. (贪心) nyoj1036-非洲小孩
  15. 使用shell脚本定时采集日志数据到hdfs分布式文件系统
  16. node.js 笔记
  17. Python3基础 list reverse 反转列表
  18. [Writeup]奇怪的单点音
  19. 通过网址request到response经历的过程
  20. 高性能JavaScript(算法和流程控制)

热门文章

  1. UVa 10250 The Other Two Trees
  2. 戏(细)说Executor框架线程池任务执行全过程(上)
  3. ubuntu搭建DNS
  4. MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一
  5. oraclede chuangjian yu dajian(zhuan)
  6. 使用了BeanUtils的简单操作
  7. 20160203.CCPP体系详解(0013天)
  8. 20160122.CCPP详解体系(0001天)
  9. *ecshop 限制文章帮助文章显示条数
  10. (六)6.8 Neurons Networks implements of PCA ZCA and whitening