python global
如果想在函数内部改变函数外的变量值,用global语句完成:
在不传该变量值入函数的情况下要改变它的值:
>>> a = 3
>>> def f():
... global a
... a = a-1
...
>>> f()
>>> a
2
如果不声明global将会报错未找到:
>>> a = 3
>>> def f():
... a = a-1
...
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f
UnboundLocalError: local variable 'a' referenced before assignment
如果是将该变量传参进入函数时,则该变量不变:
>>> def f(a):
... a = a-1
...
>>> f(a)
>>> a
3
>>> def f(a):
... a = a-1
... return a
...
>>> f(a)
2
>>> a
3
注意,这仅当a为数的时候,当a为list,set,dict,等可切片的时,不用声明global也会改变。
a为tuple或str时也不会改变(注意因为tuple/str对象的不支持对其中单个元素/字符赋值如:a[0] = "0" #对字符串a第一个元素改变为“0”会报错)
>>> a = (1,2,3,4)
>>> a[2] = 1 # 不可对单个改变
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> def f(a):
... a = (3,4)
... print(a)
...
>>> f(a)
(3, 4)
>>> a
(1, 2, 3, 4) ##################################### >>> a = "asd"
>>> def f(a):
... a = a + ""
... print(a)
...
>>> f(a)
asd00
>>> a
'asd'
>>> a[0] = "" # 不可对单个改变
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
对于list,set,dict,涉及到切片等操作时,则会改变:
>>> a = [1,2,3,4]
>>> def f(a):
... a[-1] = ""
... print(a)
...
>>> f(a)
[1, 2, 3, '']
>>> a
[1, 2, 3, '']
##################上面切片下面未切片
>>> a = [1,2,3,4]>>> def f(a):
... a = [3,4]
... print(a)
...
>>> f(a)
[3, 4]
>>> a
[1, 2, 3, 4]
#######################
>>> a = [1,2,3,4]
>>> def f(a):
... a.append(0)
... print(a)
...
>>> f(a)
[1, 2, 3, 4, 0]
>>> a
[1, 2, 3, 4, 0]
python global的更多相关文章
- python global vs nonlocal (2)
		
上一篇中简述了这两个关键字的基本用法: global用于在局部作用于修改或重定义全局变量 nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外) 这只是很浅的理解方式 注意python的 ...
 - [python]global与nonlocal关键字
		
在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(bui ...
 - python global和nonlocal的使用
		
◆global和nonlocal是Python的两个重要变量作用域关键字 1.global用在全局变量,应用场景: 变量定义在函数外部的时候,如果函数里面想改变这个全局变量的值,需要在当前的引用函数里 ...
 - python global 全局变量
		
http://blog.csdn.net/mldxs/article/details/8559973 __author__ = 'dell' def func(): global x print 'x ...
 - python global nonlocal
		
global: 方法之外在modual中的变量定义为全局变量.方法内的变量为局部变量. 一般情况下,全局变量可以被使用,但是不应该被修改,不然会报错. 不过一般不建议对全局变量做修改,如果有多个方法都 ...
 - Python Global和Nonlocal的用法
		
nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...
 - CentOS下用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境
		
安装 系统环境:CentOS 6.5 安装依赖 yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline- ...
 - 使用pyenv来管理python版本
		
使用pyenv可以很方便的切换python版本,而不会影响系统的python版本,对需要使用supervisor(仅支持python2)托管程序,项目使用python3开发的情况十分有用 pyenv的 ...
 - 用pyenv和virtualenv搭建单机多版本python虚拟开发环境
		
作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...
 
随机推荐
- StartCom免费ssl证书申请以及在Tomcat环境中的配置
			
提示:建议以下操作不使用谷歌浏览器(该网站的证书不识别...),可以看到我的截图中谷歌换成了ie(没装火狐)...建议该申请使用火狐 前面介绍了下自签名的ssl证书,虽然可以实现https协议访问,但 ...
 - if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
			
if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
 - Time-series Storage Layer Time Series Databases 时间序列
			
w 关于时间序列数据库的思考-CSDN.NET http://www.csdn.net/article/2015-07-13/2825192 存储和处理时间序列数据(“Time Series Da ...
 - 整理前端css/js/jq常见问题及解决方法(2)
			
移动端 手机 1.点击图片或按钮,选中状态影响到其他范围解决:html{-webkit-user-select:none}<meta name="msapplication-tap-h ...
 - discuz论坛用户资料采集器
			
discuz论坛用户资料采集器, 自动采集用户信息!
 - 《Python机器学习》笔记(六)
			
模型评估与参数调优实战 基于流水线的工作流 一个方便使用的工具:scikit-learn中的Pipline类.它使得我们可以拟合出包含任意多个处理步骤的模型,并将模型用于新数据的预测. 加载威斯康星乳 ...
 - gearman知识文章
			
一篇文章: Gearman介绍.调研.测试与原理分析 gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务.最初是2005年perl版本,2008年发布C/ ...
 - Python之常用模块(re,时间,random,os,sys,序列化模块)(Day20)
			
一.时间模块 #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time() 获取当前时间戳 在Python中表示时间的三种方式:时间戳,元组(s ...
 - iOS   CMTimeMake  和  CMTimeMakeWithSeconds  学习
			
CMTime是专门用于标识电影时间的结构体,通常用如下两个函数来创建CMTime (1)CMTimeMake CMTime CMTimeMake ( int64_t value, //表示 当前视频播 ...
 - javascript; JS版HtmlEncode方法,结果与C#中HttpUtility.HtmlEncode方法一样。
			
<script type="text/javascript"> function HTMLEncode(html) { var temp = document.crea ...