全局变量和局部变量

  定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

  局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2; # total在这里是局部变量.
#在函数中 如果对一个和全局变量名相同的变量进行=value的时候,默认是定义一个变量
#只不过这个变量的名字和全局变量的名字相同罢了
print ("函数内是局部变量 : ", total)
return total; #调用sum函数
sum( 10, 20 );
print ("函数外是全局变量 : ", total)

以上实例输出结果:

函数内是局部变量 : 30

函数外是全局变量 : 0

global 和 nonlocal关键字

global

  当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

以下实例修改全局变量 num:

num = 1
def fun1():
global num # 使用global用来对一个全局变量的声明,那么这个函数中的num就不是定义一个局部变量,而是
#对全局变量进行修改
print(num)
num = 123
print(num)
fun1()

以上实例输出结果:

1

123

列表是当全局变量的

如下面的例子

nums = [11,22,33]
infor = {"name":"wang"} def test():
#for num in nums:
# print(num) nums.append(44)
infor['age'] = 18 def test2():
print(nums)
print(infor) test() #[11, 22, 33, 44]
test2() #{'name': 'wang', 'age': 18}

nonlocal

  如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()

以上实例输出结果:

100

100

另外有一种特殊情况,假设下面这段代码被运行:

a = 10
def test():
a = a + 1
print(a)
test()

以上程序执行,报错信息如下:

Traceback (most recent call last):
File "test.py", line 7, in <module>
test()
File "test.py", line 5, in test
a = a + 1
UnboundLocalError: local variable 'a' referenced before assignment

  错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改

Python全局变量和局部变量的更多相关文章

  1. Python之路Python全局变量与局部变量、函数多层嵌套、函数递归

    Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...

  2. day15 Python全局变量和局部变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序. 当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变 ...

  3. Python之路(第六篇)Python全局变量与局部变量、函数多层嵌套、函数递归

    一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序. 全局变量没有任何缩进,在任何位置都可 ...

  4. Python 全局变量和局部变量,global 和 nonlocal关键字

    全局变量和局部变量    全局变量:定义在函数外的变量    局部变量:定义在函数内部变量    获取变量值时候先获取当前作用域变量名称和变量值,如果没找到到上一层作用域招变量的值,在没有就报错,先获 ...

  5. python 全局变量与局部变量

    一.引用 使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字.如: #! /usr/bin/python a = 1 b = [2, 3] def func(): if ...

  6. python 全局变量与局部变量 垃圾回收机制

    掌握L.E.G.B(作用域) 掌握局部作用域修改全局变量 步骤- 1.命名空间和作用域 命名空间:变量名称与值的映射关系作用域:变量作用的区域,即范围. 注意:class/def/模块会产生作用域:分 ...

  7. PYTHON 全局变量和局部变量

    #局部变量,只能调用函数体内的变量 def fun(): a = 234 print(a) #全局变量,在函数体外声明,在函数体内都可调用 b = 'gyc' def fun(): a = 234 p ...

  8. Python全局变量和局部变量相关知识点

    知识点一: #在函数外面定义的变量叫全局变量 num = 100 def AAA(): ''' 如果在函数中直接修改全局变量,那么会产生异常 如果真的需要修改,可以在函数中进行声明(前面加入globa ...

  9. Python—全局变量、局部变量、匿名函数

    局部变量和全局变量 college1 = 'JMU' #全局变量 def change_name(name): college1 = 'LiGong' #局部变量,此函数是其作用域 # global ...

随机推荐

  1. loj Snakes 的 Naïve Graph 【数论】

    题目链接 loj 题解 感谢珂神的指导orz 观察式子\(i \times j \equiv 1 \pmod m\),显然\(i,j\)是模\(m\)意义下成对的逆元,只需统计模\(m\)意义下存在逆 ...

  2. PHP获取IP地址的方法,防止伪造IP地址注入攻击

    PHP获取IP地址的方法 /** * 获取客户端IP地址 * <br />来源:ThinkPHP * <br />"X-FORWARDED-FOR" 是代理 ...

  3. INSTALL_FAILED_TEST_ONLY: installPackageLI. 问题解决

    FAQ: Installation failed with message Failed to finalize session : INSTALL_FAILED_TEST_ONLY: install ...

  4. HDU 1711 Number Sequence (字符串匹配,KMP算法)

    HDU 1711 Number Sequence (字符串匹配,KMP算法) Description Given two sequences of numbers : a1, a2, ...... , ...

  5. Jenkins(一)---我理解的jenkins是这样的

    1.齿轮 如果将 java / maven / ant / git / tomcat / jenkins 等等软件比喻为齿轮:如下图 两个软件在一起可以驱动另外一个软件:如下图 如果把这些软件要集成在 ...

  6. eclipse 安装 activiti-designer-5.18.0,亲测成功

    转: eclipse 安装 activiti-designer-5.18.0,亲测成功 2018年06月02日 15:50:05 ldw4033 阅读数:2826   版权声明:本文为博主原创文章,未 ...

  7. 转载OPENCV学习随笔

    转载自 亦轩Dhc http://www.cnblogs.com/daihengchen/p/5492729.html 学习笔记:使用opencv做双目测距(相机标定+立体匹配+测距).   最近在做 ...

  8. 利用ansible来做kubernetes 1.10.3集群高可用的一键部署

    请读者务必保持环境一致 安装过程中需要下载所需系统包,请务必使所有节点连上互联网. 本次安装的集群节点信息 实验环境:VMware的虚拟机 IP地址 主机名 CPU 内存 192.168.77.133 ...

  9. linux命令总结之ls命令

    ls命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件,下面我们就来一起看看ls的用法 英文全名:List即列表的意思,当我们学习某种东西的时候要做到知其所 ...

  10. 「Vue」自定义指令

    #全局自定义指令1.使用Vue.directive()定义全局的指令 v-focus2.参数1 指令的名称,在定义的时候,指令的名称前面不需要加v-前缀3.但是在调用的时候必须在指令名称前 加上v-前 ...