关于python中的作用域问题
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中的作用域问题相关推荐
- python中变量作用域
python中变量作用域采取以下规则: 1.python能够改变变量作用域的代码段是def.class.lamda. 2.if/elif/else.try/except/finally.for/whi ...
- python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
在python中,函数会创建一个自己的作用域,也称为为命名空间.这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 通过内置函数globals()返回的是python解释器能知道的变 ...
- Python中变量作用域问题
我们经常听说Python函数访问局部变量.全局变量:在定义装饰器的时候,还会使用自由变量.这些不同的变量是如何赋值.初始化.查找及修改的呢?各自的作用细则又是什么样的呢?本篇尝试解答这个问题. Pyt ...
- python中的作用域_python作用域
局部和全局作用域 在被调用函数内赋值的变元和变量,处于该函数的"局部作用域".在所有函数之外赋值的变量,属于"全局作用域".处于局部作用域的变量,被称为&quo ...
- Python 中的作用域
Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定.当 Python 遇到一个变量的话 它会按照这的顺序进行搜索: 本地作用域(Local)->当前作用域被嵌入的本地作用域(En ...
- python中函数作用域_Python中的函数作用域
在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...
- python中的作用域以及优先级_Python中的作用域规则详解
Python是静态作用域语言,尽管它自身是一个动态语言.也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的. 接下 ...
- python中的作用域_python 模块的作用域
作用域:变量,函数 Public(公开):可以直接被引用,如:abc, PI, test() ,类似__xxx__这样的特殊变量 .联想:C语言中, 当模块的某个东西希望外部能够引用,就在前面添加ex ...
- python内置作用域_python中的作用域
python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:glo ...
最新文章
- linux命令行模式连接网络,centos命令行模式连接无线网络的过程
- 上传图片和导出文件测试用例
- 08 ORA系列:ORA-01861 文字与格式字符串不匹配
- 成本费用跨年取得发票的财务、税务处理
- wxWidgets:wxPropertyGrid概述
- CentOS 配置软raid
- ML in Action 决策树
- 类及其组成所使用的常见修饰符
- Express app.get 进行路由 Route 设置
- wh计算公式_“笔记本”电池里的mAh和Wh有啥区别
- python中对象的概念是什么_python面向对象编程的基本概念
- 基于Ubuntu系统搭建以太坊go-ethereum源码的开发环境
- MySQL学习笔记( 整理中)
- MLP手写数字识别实现
- nuxt使用videojs播放flv格式视频
- python,练习乌龟吃鱼
- Win10 重装后没有微软账户登录选项怎么办?
- 简析时间复杂度和空间复杂度
- Linux 用户管理 4 之密码管理
- 诗经 - 小雅 - 天保