如果想在函数内部改变函数外的变量值,用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的更多相关文章

  1. python global vs nonlocal (2)

    上一篇中简述了这两个关键字的基本用法: global用于在局部作用于修改或重定义全局变量 nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外) 这只是很浅的理解方式 注意python的 ...

  2. [python]global与nonlocal关键字

    在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(bui ...

  3. python global和nonlocal的使用

    ◆global和nonlocal是Python的两个重要变量作用域关键字 1.global用在全局变量,应用场景: 变量定义在函数外部的时候,如果函数里面想改变这个全局变量的值,需要在当前的引用函数里 ...

  4. python global 全局变量

    http://blog.csdn.net/mldxs/article/details/8559973 __author__ = 'dell' def func(): global x print 'x ...

  5. python global nonlocal

    global: 方法之外在modual中的变量定义为全局变量.方法内的变量为局部变量. 一般情况下,全局变量可以被使用,但是不应该被修改,不然会报错. 不过一般不建议对全局变量做修改,如果有多个方法都 ...

  6. Python Global和Nonlocal的用法

    nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...

  7. CentOS下用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境

    安装 系统环境:CentOS 6.5 安装依赖 yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline- ...

  8. 使用pyenv来管理python版本

    使用pyenv可以很方便的切换python版本,而不会影响系统的python版本,对需要使用supervisor(仅支持python2)托管程序,项目使用python3开发的情况十分有用 pyenv的 ...

  9. 用pyenv和virtualenv搭建单机多版本python虚拟开发环境

    作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...

随机推荐

  1. java内部类详细介绍

    0.内部类与一般类有所不同,它是放在外部类的内部即可作为外部类的成员变量,也可放在方法内部作为局部变量,既然是变量,那么它可以用 private static 修饰符修饰,而外部类则不能,这也是内部类 ...

  2. Socket_leaks open socket #5024 left in connection

    open socket left in connection http://mailman.nginx.org/pipermail/nginx/2012-September/035627.html D ...

  3. sqlbulk的问题

    今天在bulk的时候遇到一个很“奇怪”的问题 无论怎样修改传入的值,也会报类型转换的错误.后来 在此文中找到了正解 bbs.csdn.net/topics/390430064 SqlBulkCopy不 ...

  4. Vue父组件调用子组件的方法

    vue中如果父组件想调用子组件的方法,可以在子组件中加上ref,然后通过this.$refs.ref.method调用,例如: 父组件: <template> <div @click ...

  5. MySQL事务隔离级别,锁(转)

    add by zhj: 本文针对的是MySQL的InnoDB存储引擎,不适用于MySQL的其它存储引擎和其它数据库 原文:MySQL数据库事务隔离级别(Transaction Isolation Le ...

  6. OC、C#与JAVA语法特点一些异同(差集&交集)

    C#对JAVA: 1.扩展方法 2.部分类 3.动态对象 4.匿名返回类型 5.表达式树 6.Linq 7.没有函数指针,委托,事件的直接提供方式 8.JAVA接口不规定以I开头,这个很烂的思想! J ...

  7. Windows系统Python 安装第三方模块时,提示pip版本有问题

    如果按照提示输入python -m pip install --upgrade pip 还不行, 那么执行easy_install --upgrade pip 即可 参考:https://stacko ...

  8. git发布代码到github

    git是什么? 1.git主要是用于对版本进行管理的一个系统. 2.时刻保持数据完整性:SHA-1计算 3.文件的三种状态 已提交,已修改,已暂存 对应文件流转的三个工作区域:本地仓库,Git的工作目 ...

  9. 常用mysql导入导出数据的命令

    To export 导出指定db_name的数据: $ mysqldump -u [uname] -p[pass] db_name > db_backup.sql 导出整个库的数据: $ mys ...

  10. 【转】Python爬虫_示例

    爬虫项目:爬取汽车之家新闻资讯   # requests+Beautifulsoup爬取汽车之家新闻 import requests from bs4 import BeautifulSoup res ...