我与python约个会:13.1 函数中的变量
来源:互联网 发布:网络潮语大全2016霸气 编辑:程序博客网 时间:2024/06/08 01:11
1. 函数中的变量
在函数中,我们可以看到也进行了变量的使用,那函数中的变量和函数外的变量到底有什么区别呢?
1.1. 全局变量的定义
声明在函数外面的变量,可以在文档的任意地方使用这个变量,我们称为全局变量
关于全局变量,使用方式如下
# 定义在函数外部的变量name = "tom"# 直接使用全局变量print(tom)# if代码块中使用全局变量print(tom)# 函数中使用全局变量def test(): print(tom) # tom
1.2. 函数中使用全局变量
上面代码的输出结果,都是tom,表示全局变量一旦声明赋值,在任何地方都可以使用
但是如果我们要在函数中修改变量的值,就会出现如下的问题
name = "tom"def test(): name = "jerry" print(name) # jerrytest()print (name) # tom# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *# 运行上述程序,我们会发现,即时函数执行了,在函数中name输出jerry# 但是,在函数外部,我们重新打印name的值,发现name的值还是tom# # 此时:函数中的name是局部变量,函数外部的name是全局变量# 如此诡异的情况,也是python为了避免出现开发人员在操作函数的过程中# 如果不明确是否使用全局变量的情况下,无意中覆盖全局变量的值## 所以,在函数中使用全局变量,必须显示的声明使用哪个全局变量# 语法是:global 变量名# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *name = "tom"def test(): global name name = "jerry" print(name) # jerrytest()print(name) # jerry
1.3. 函数中的变量隔离
如果函数中没有通过global引入全局变量,但是在函数中又使用了和全局变量相同的名称
此时就会出现问题
name = "tom"def test(): # 这里只是想使用一下全局变量的值 print(name) # n行代码之后,又声明了局部变量name # 此时一旦声明了局部变量,上面打印的代码就会出现错误 name = "jerry" test()执行结果:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in testUnboundLocalError: local variable 'name' referenced before assignment
上面的错误,主要是变量提升引起的错误,首先描述一下错误出现的条件
1.如果函数中没有声明和全局变量名称一致的局部变量,函数中直接使用全局
变量的值,不会出现错误
2.如果函数中,一旦在任意位置定义了和全局变量名称一致的局部变量,函数中
在局部变量声明定义之前使用这个名称的变量,就会出现上述错误这是因为,在函数中,一旦声明变量并且赋值一个局部变量,函数中又没有通过
global引入同名的全局变量,此时在函数中只会存在局部变量~不允许使用全局变量
此时如果在同名的局部变量声明赋值之前使用这个变量,就会出现错误。
1.2. 局部变量
声明在函数内部的变量,只能在函数内部使用,函数执行结束这个变量就会被回收,我们称为局部变量。局部变量只是在函数中可以使用,出了函数这个变量就不认识了
def test(): name = "tom" # 这是一个test函数中的局部变量test()print(name) # 执行结果Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'name' is not defined # 出现错误,name没有定义
通常情况下,函数内部声明赋值的变量和函数的参数都会当成局部变量进行处理
全局变量和局部变量:
几乎所有的编程语言中都有全局变量和局部变量的区分,同时我们在开发过程中,也需要尽量避免频繁使用全局变量
原因之一全局变量一经使用就常驻内存,如果全局变量中数据过于庞大就会导致内存溢出程序崩溃的情况
原因之二是全局变量在使用的过程中容易造成变量的全局污染,因为在项目开发过程中通常是多个人协同开发多个Python文件然后整合到一起,此时就有可能会因为全局变量重名造成变量的值覆盖的情况出现。
- 我与python约个会:13.1 函数中的变量
- python中的闭包函数与自由变量
- Python中的变量有作用域或命名空间及locals()与globals()函数
- Python函数与变量作用域
- python中的局部变量与全局变量
- Python中的全局变量与局部变量
- python中的变量可变与不可变
- python中的全局变量与局部变量
- 我与python约个会:13编程进阶~函数
- 我与python约个会:14编程进阶~函数的参数
- python中的@与__call__()函数
- Makefile 语法中的自动化变量与函数
- 我与python约个会:10.程序编程基础4~变量&运算符
- Python 中的range()函数与array()函数
- Python 中的range()函数与array()函数
- python中的iter()函数与next()函数
- Python 中的range()函数与array()函数
- Python 中的range()函数与array()函数
- 机器学习认识
- java中new和newInstance的区别
- spyder--no module named caffe解决办法
- 静态代理和动态代理
- 分享ssd固态硬盘分区装系统全过程!
- 我与python约个会:13.1 函数中的变量
- $.ajax()方法详解
- 待续
- makefile经典教程
- [py]py输入判断-字典
- next数组
- CentOS 安装和配置 Mantis / Linux下修改Mysql的用户(root)的密码
- 通俗易懂的贪吃蛇游戏
- 多线程面试题