python中全局变量和局部变量的使用
变量根据作用域不同可以分为全局变量和局部变量
1、函数内部的变量没有global声明时,就是一个局部变量,只能在函数内部被使用。
2、全局变量在函数外部声明,作用域为声明之后的代码,如果在声明前被调用,则会报错,如下:
def showglobal():print(a)showglobal()
a= "我是全局变量"
print(a)
运行结果:
Traceback (most recent call last):File "C:/Users/10270/Desktop/py_test/test_10_4.py", line 41, in <module>showglobal()File "C:/Users/10270/Desktop/py_test/test_10_4.py", line 37, in showglobalprint(a)
NameError: name 'a' is not defined
全局变量在函数内部也可以被声明,使用global,注意的是,声明时不能够赋值,声明之后才能赋值,声明之后不仅可以在函数内部使用,还能在函数外部使用,如下:
def showglobal():global aa = "我是函数内部声明的全局变量"print(a)showglobal()
print(a)
运行结果:
我是函数内部声明的全局变量
我是函数内部声明的全局变量
如果在声明之前使用会报错,如下:
def showglobal():global aa = "我是函数内部声明的全局变量"print(a)print(a)
showglobal()
运行结果:
Traceback (most recent call last):File "C:/Users/10270/Desktop/py_test/test_10_4.py", line 41, in <module>print(a)
NameError: name 'a' is not defined
3、变量名称一样声明全局变量和局部变量,使用的时候局部变量的优先级高于全局变量,也就是就近原则。
a = "我是全局变量"
def showglobal():a = "我是局部变量"print(a)print(a)
showglobal()
运行结果:
我是全局变量
我是局部变量
需要注意如下这段代码:
a = 3
def showglobal():a = a*3print(a)print(a)
showglobal()
你以为是不是会输出3和9,代码在执行到showglobal()的时候就报错了:
3
Traceback (most recent call last):File "C:/Users/10270/Desktop/py_test/test_10_4.py", line 41, in <module>showglobal()File "C:/Users/10270/Desktop/py_test/test_10_4.py", line 37, in showglobala = a*3
UnboundLocalError: local variable 'a' referenced before assignment
原因就是上面那个就近原则,a = a*3,这里python认为函数内部声明了一个局部变量a ,然后赋值符号右侧就直接拿这个局部变量来进行运算了。而局部变量还没有被赋值。
4、nonlocal声明的变量,一般是在函数嵌套函数内部声明的,声明之后,则可以使用外函数的变量,且可以修改变量的值;
def test():def test2():global g_varibleg_varible = '全局变量:global varible'print("内部函数调用:", g_varible)def test1():nonlocal g_varibleg_varible = '内部函数对外部函数局部变量进行了修改:nonlocal 'print("内部函数调用:",g_varible)test2()test1()g_varible = 'global varible'test()
print( g_varible)
运行结果:
内部函数调用: 全局变量:global varible
内部函数调用: 内部函数对外部函数局部变量进行了修改:nonlocal varible
全局变量:global varible
以上,不管是声明了global还是声明了nonlocal,该变量值修改,都会导致原变量值被修改,它们使用的是同一个引用,也就是使用的是内存中相同地址块的数据.
5、还有一个变量在类中的应用,这个时候就没有局部变量和全局变量的概念了
类中直接定义的变量叫做类属性,属于类,对象可以引用,引用的方法有self.变量名或者直接使用类名.变量名。
python中全局变量和局部变量的使用相关推荐
- python中全局变量和局部变量关键字_Python中全局变量和局部变量的理解与区别
前言 学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念 但是与其他编程语言又有所不同 全局变量与局部变量两者的本质区别就是在于作用 ...
- python 中全局变量、局部变量、静态变量,实例变量的区别和理解
python 中全局变量.局部变量.静态变量,实例变量的区别和理解 在python中一个XXX.py 文件可能有多个类所以要严格区分这些变量 全局变量: 在这个模块内也就是在整个.py 文件里,并且在 ...
- python中全局变量和局部变量详解
写在最前面: python中全局变量和局部变量的最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问. !!! 我们先来看一个最简单的例子,事实上这并不是一个真正的全局变量,只是在类中的一个 ...
- python中全局变量和局部变量关键字_Python中都全局变量和局部变量
Python中都全局变量和局部变量 Python中都全局变量和局部变量 定义 全局变量:函数体之外定义的变量 局部变量:函数体之内定义的变量 下述代码中,t是全局变量,m是局部变量 t = 1 def ...
- python中全局变量和局部变量详解_Python全局变量与局部变量详解
Python全局变量与局部变量详解#Python中的变量:全局变量和局部变量 #在很多语言中,在声明全局变量的时候,都喜欢把全局变量的名称定义为大写 #定义学生人数为100 STUDENT_NUMBE ...
- [转载] python中全局变量和局部变量解析
参考链接: Python中的全局变量和局部变量 python函数中可以访问全局变量但是不能给全局变量赋值,除非进行显式声明global a 比如定义了全局变量 a 在函数my_fun()中可以直接访 ...
- python中全局变量和局部变量的区别_Python全局变量与局部变量区别及用法分析
本文实例讲述了Python全局变量与局部变量区别及用法.分享给大家供大家参考,具体如下: 对于很多初学的同学,对全局和局部变量容易混淆,看看下面给大家的讲解相信都应该明白两者的区别了. 定义: 全局变 ...
- python 局部变量 占内存吗_Python中全局变量和局部变量的理解与区别
前言 学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念 但是与其他编程语言又有所不同 全局变量与局部变量两者的本质区别就是在于作用 ...
- 关于python的全局变量和局部变量、以下描述错误的是_Python:全局变量与局部变量的问题...
在Python中,如果处理不好变量使用的关系,就很容易出现: UnboundLocalError: local variable 'n' referenced before assignment 这种 ...
最新文章
- 深度解析两种信用评估模型
- 前端er怎样操作剪切复制以及禁止复制+破解等
- makefile 打印变量_[Makefile] 缩进与空格--记录踩过的坑
- IE8给你选择的理由
- IOS UIPageController
- uvc摄像头代码解析1
- 2018年1月问答系统综述
- 解决vbox挂载VBoxGuestAdditions失败
- 6.1色彩的概念和对比和调和
- hdu 6080-度度熊保护村庄
- Markdown实用小技巧: 个个用着都很爽
- ERROR ITMS-90022 ERROR ITMS-90096
- 贴片电阻的封装、功率
- 一.pandas的导入读取
- 增设区域分销商:APC渠道变革拒绝“扁平化”
- PMP章节练习(第六章:项目进度管理)
- qt连接mysql数据库 mac_Mac系统下Qt 4.8编译连接数据库(Oracle,MySql)
- error: #109: expression preceding parentheses of apparent call must have (pointer-to-) function typ
- 洛谷题目AC代码总结(未完成,日更题目中)
- Verilog HDL 小练习(四)状态机
热门文章
- springboot+poi导出百万级数据避免OOM内存溢出
- Excel数据分析从入门到精通(十三)28个图表之趋势分析+转化分析
- c++ 哥德巴赫猜想
- html+css+js实现自动敲文字效果
- jmeter(十七):查看测试结果
- SpringBoot启动报错Error creating bean with name 'projectingArgumentResolverBeanPostProcessor'
- 如何在Ubuntu中添加和删除用户
- 更改进程名,prctl(PR_SET_NAME)应该在图形界面之前调用
- Unity中弧度和角度的相互转换
- 哈夫曼树(Huffman树) 学习日记 + 例题(ch1701 bzoj4198)