1.在函数内定义的局部变量只在该函数内可见,当函数运行结束后,在其内部定义的所有局部变量将被自动删除而不可访问。在函数内部使用global定义的全局变量当函数结束以后任然存在并且可以访问
2.如果在函数内部修改一个定义在函数外的变量值,必须使用global明确声明,否则会自动创建新的局部变量。在函数内部通过global关键字类声明或定义全局变量,分为两种情况
方式一的理解
(1)一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将修改的结果反映到函数之外,可以在函数内用关键字global明确声明要使用已定义的同名全局变量
(2)在函数内部直接使用global关键字将一个变量声明为全局变量,如果在函数外没有定义该全局变量,在调用这个函数之后,会自动创建新的全局变量
方式二的理解
(1)在函数内如果只引用某个变量的值而没有为其赋新值,该变量为(隐式的)全局变量
(2)如果在函数内某条代码有为变量赋值的操作,该变量就被认为是(隐式的)局部变量,除非在函数内赋值操作 之前显示地用关键字global进行声明
例如:局部变量和全局变量

>>> def demo():#声明或创建全局变量,必须在使用x之前执行global xx=3#修改全局变量的值y=4#局部变量print(x,y)>>> x=5#在函数外部定义了全局变量x
>>> demo()#本次调用修改了全局变量x
3 4
>>> x
3
>>> y#局部变量在函数运行结束之后自动删除,不再存在
Traceback (most recent call last):File "<pyshell#9>", line 1, in <module>y
NameError: name 'y' is not defined
>>> del x#删除了全局变量
>>> x
Traceback (most recent call last):File "<pyshell#11>", line 1, in <module>x
NameError: name 'x' is not defined
>>> demo()#本次调用了全局变量
3 4

注意:如果在某个作用域内有为变量赋值的操作,那么该变量将被认为是该作用域内的局部变量

>>> x=10#全局变量
>>> def demo():#以下语句会发生异常,因为x变量现在还不存在print(x)x=x+1#赋值语句,x将被认为是该作用域内的局部变量print(x)>>> demo()
Traceback (most recent call last):File "<pyshell#19>", line 1, in <module>demo()File "<pyshell#18>", line 2, in demoprint(x)
UnboundLocalError: local variable 'x' referenced before assignment
>>>

注意:如果局部变量与全局变量具有相同的名字,那么该局部变量会在自己的作用域内暂时隐藏同名的全局变量

>>> def demo():x=3#创建了局部变量,并自动隐藏了同名的全局变量print(x)>>> x=5#创建全局变量
>>> x
5
>>> demo()
3
>>> x#函数调用结束之后,不影响全局变量x的值
5
>>>

以上内容来自《python程序设计基础》

关于python中的作用域问题相关推荐

  1. python中变量作用域

    python中变量作用域采取以下规则: 1.python能够改变变量作用域的代码段是def.class.lamda. 2.if/elif/else.try/except/finally.for/whi ...

  2. python中的作用域以及内置函数globals()-全局变量、locals()-局部变量

    在python中,函数会创建一个自己的作用域,也称为为命名空间.这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 通过内置函数globals()返回的是python解释器能知道的变 ...

  3. Python中变量作用域问题

    我们经常听说Python函数访问局部变量.全局变量:在定义装饰器的时候,还会使用自由变量.这些不同的变量是如何赋值.初始化.查找及修改的呢?各自的作用细则又是什么样的呢?本篇尝试解答这个问题. Pyt ...

  4. python中的作用域_python作用域

    局部和全局作用域 在被调用函数内赋值的变元和变量,处于该函数的"局部作用域".在所有函数之外赋值的变量,属于"全局作用域".处于局部作用域的变量,被称为&quo ...

  5. Python 中的作用域

    Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定.当 Python 遇到一个变量的话 它会按照这的顺序进行搜索: 本地作用域(Local)->当前作用域被嵌入的本地作用域(En ...

  6. python中函数作用域_Python中的函数作用域

    在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...

  7. python中的作用域以及优先级_Python中的作用域规则详解

    Python是静态作用域语言,尽管它自身是一个动态语言.也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的. 接下 ...

  8. python中的作用域_python 模块的作用域

    作用域:变量,函数 Public(公开):可以直接被引用,如:abc, PI, test() ,类似__xxx__这样的特殊变量 .联想:C语言中, 当模块的某个东西希望外部能够引用,就在前面添加ex ...

  9. python内置作用域_python中的作用域

    python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:glo ...

最新文章

  1. linux命令行模式连接网络,centos命令行模式连接无线网络的过程
  2. 上传图片和导出文件测试用例
  3. 08 ORA系列:ORA-01861 文字与格式字符串不匹配
  4. 成本费用跨年取得发票的财务、税务处理
  5. wxWidgets:wxPropertyGrid概述
  6. CentOS 配置软raid
  7. ML in Action 决策树
  8. 类及其组成所使用的常见修饰符
  9. Express app.get 进行路由 Route 设置
  10. wh计算公式_“笔记本”电池里的mAh和Wh有啥区别
  11. python中对象的概念是什么_python面向对象编程的基本概念
  12. 基于Ubuntu系统搭建以太坊go-ethereum源码的开发环境
  13. MySQL学习笔记( 整理中)
  14. MLP手写数字识别实现
  15. nuxt使用videojs播放flv格式视频
  16. python,练习乌龟吃鱼
  17. Win10 重装后没有微软账户登录选项怎么办?
  18. 简析时间复杂度和空间复杂度
  19. Linux 用户管理 4 之密码管理
  20. 诗经 - 小雅 - 天保

热门文章

  1. k8s概念入门之kubelet-针对1.1.版本阅读
  2. golang垃圾回收概述
  3. Emmet语法(快速生成HTML结构语法、快速生成CSS样式语法)
  4. 文件列表出现分页按钮
  5. TCP连接管理【三次握手-四次挥手】
  6. 网络工程师_记录的一些真题_2016下半年上午
  7. 如何用 OpenCV、Python 和深度学习实现面部识别?
  8. 深度神经网络是否过拟合?
  9. PyTorch训练加速17种技巧
  10. windows10+Python3-如何安装numpy和matplotlib包