Python 函数内变量的作用域
Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域.
全局作用域(global):即在模块层次中定义的变量,每一个模块都是一个全局作用域。也就是说,在模块文件顶层声明的变量具有全局作用域,从外部开来,模块的全局变量就是一个模块对象的属性。
全局变量可以在函数内部访问,不能修改,修改想要修改可以用globa来装饰变量
注意:全局作用域的作用范围仅限于单个模块文件内.
>>> x = 1 #定义一个变量
>>> def fun():
y=3
print (x,y) #定义一个函数,这个函数会调用变量x >>> fun() #调用函数
1 3
>>> def fun():
y=3
x+=1 #这个函数会修改变量x
print (x,y) >>> fun() #此时调用函数时就会报错。
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
fun()
File "<pyshell#84>", line 3, in fun
x+=1
UnboundLocalError: local variable 'x' referenced before assignment
>>> def fun():
y=3
global x #声明这个 x 变量为全局变量,相当于授权。
x+=1 #这个函数会修改变量x
print (x,y) >>> fun() #成功调用函数
2 3
>>>
>>> y #函数中的y是无法访问的,因为y是局部变量
Traceback (most recent call last):
File "<pyshell#89>", line 1, in <module>
y
NameError: name 'y' is not defined
>>> def fun():
global y #给局部变量y授权,类似出国签证。
y=3
global x
x+=1
print (x,y) >>> fun() #调用函数
3 3
>>> y #可以访问变量y
3
>>>
nonlocal函数:当里层局部,需要修改外层局部变量时,需要使用nonlocal。这个和全局变量不同,无法在函数体以外调用。
>>> def fun(): #这个函数里面内嵌一个函数
q =1
print('局部变量:',q)
def fun1():
w=2
print('内嵌函数局部外层变量:',q) #调用上一级函数的局部变量
print('内嵌函数局部里层变量:',w)
fun1() #执行函数fun()时会自动调用函数fun1() >>> fun() #查看结果,调用函数fun()时会自动调用函数fun1()。
局部变量: 1
内嵌函数局部外层变量: 1
内嵌函数局部里层变量: 2
>>> def fun():
q =1
print('局部变量:',q)
def fun1():
w=2
q+=1 #调用上一级函数的局部变量q,并且修改这个 变量。
print('内嵌函数局部外层变量:',q)
print('内嵌函数局部里层变量:',w)
fun1() >>> fun() #因为此时局部变量q不能被内嵌函数调用,目前还没有没有授权
局部变量: 1
Traceback (most recent call last):
File "<pyshell#109>", line 1, in <module>
fun()
File "<pyshell#108>", line 9, in fun
fun1()
File "<pyshell#108>", line 6, in fun1
q+=1
UnboundLocalError: local variable 'q' referenced before assignment
>>> def fun():
q =1
print('局部变量:',q)
def fun1():
w=2
nonlocal q #使用nonlocal授权,允许内嵌函数fun1()可以调用变量q
q+=1
print('内嵌函数局部外层变量:',q)
print('内嵌函数局部里层变量:',w)
fun1() >>> fun()
局部变量: 1
内嵌函数局部外层变量: 2
内嵌函数局部里层变量: 2
>>>
>>> q #因为这个局部变量q,只是在内嵌函数fun1()里面使用了nonlocal 进行了授权,所以在fun1()以外时无法调用的。
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
q
NameError: name 'q' is not defined
Python 函数内变量的作用域的更多相关文章
- Python中的变量和作用域详解
Python中的变量和作用域详解 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部 ...
- JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】
一.闭包(Closure)模糊概述 之前总觉得闭包(Closure)很抽象而且难理解,百度一下"闭包"名词,百度的解释是:“闭包是指可以包含自由(未绑定到特定对象)变量的代 ...
- python函数对变量的作用及遵循的原则
1.全局变量和局部变量 全局变量:指在函数之外定义的变量,一般没有缩进,在程序执行的全过程有效 局部变量:指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在 例如: n=1 #n是全局 ...
- Python入门笔记(22):Python函数(5):变量作用域与闭包
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...
- python 函数及变量作用域及装饰器decorator @详解
一.函数及变量的作用 在python程序中,函数都会创建一个新的作用域,又称为命名空间,当函数遇到变量时,Python就会到该函数的命名空间来寻找变量,因为Python一切都是对象,而在命名空间中 ...
- Python学习(21):Python函数(5):变量作用域与闭包
转自 http://www.cnblogs.com/BeginMan/p/3179040.html 一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除, ...
- Python【知识点】傻傻的函数内变量
问题的由来 有个学生问我一个问题关于函数内部变量的我们来一起看下代码: Code1 x = 50 def func(): print(x) global x print("x修改前的值:&q ...
- python 函数指动态形参,作用域
函数的动态形参, 作用域 一 动态形参 如果我们需要给⼀一个函数传参, ⽽而参数⼜又是不确定的. 或者我给⼀一个 函数传很多参数, 我的形参就要写很多, 很⿇麻烦, 怎么办呢. 我们可以考虑使⽤用动态 ...
- python中对变量的作用域LEGB、闭包、装饰器基本理解
一.作用域 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域.python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量 ...
随机推荐
- 浮动ip原理及简单实现
原理:https://blog.csdn.net/readiay/article/details/53538085 简单实现:https://www.cnblogs.com/victorwu/p/70 ...
- js: 字符集
用js生成字符集 一般网页制作中需要一些向上向下的小箭头,用图片非常不合算(一个页面发起多个http请求.css.文件大小等方面考虑) 所以用一些字符集的字符图形,效果很好 下面是用js生成字符集,以 ...
- journalctl
systemd 提供了自己的日志系统(logging system),称为 journal.使用 systemd 日志,无需额外安装日志服务(syslog).读取日志的命令: # journalctl ...
- PHP 服务 php-fpm 的一些常见配置
< 操作系统 Centos7,PHP版本7.2.7 > 已下所有配置涉及到时间单位均使用 => 秒(s) 分 (m) 时 (h) 天(d) [ 以下为全局配置 ] 01,关于,进程文 ...
- leetcode540
这道题目的要求,Note: Your solution should run in O(log n) time and O(1) space. 因此应该用二分查找的方式,代码如下: class Sol ...
- filter map reduce函数的使用
#filter("处理逻辑","可迭代对象") 把可迭代对象依次处理逻辑处理,如果值为真就返回值,值为假就不返回; li = ['testA','yerA',' ...
- Centos代理上网设置
原文链接:http://m.blog.csdn.net/article/details?id=51851677 一.centos自带界面设置代理 1. 界面设置 squid默认代理端口3128. 2 ...
- 深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播
卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别 分类 相似图像搜索 ...
- 在page cache中的页,如果当时没有进程read或者write,引用计数到底该为多少
在一次偶然的机会,在研究如何降低pagecache占用的过程中,走查了 invalidate_mapping_pages的代码: 通过调用 __pagevec_lookup 在radix树中收集一部分 ...
- Windows查看指定端口是否占用和查看进程
Winodows上查看指定端口号的使用情况和占用进程以及终止所占用端口进程进程用到.下面主要描述如何操作. 1.查看所有端口占用情况 C:\Users\Administrator>netstat ...