python之全局变量与局部变量
全局变量:
- 在书写中顶格开始;
- 一旦定义完毕在整个文件生效;
- 在函数内如果定义了同名全局变量名,会“覆盖”掉全局变量;
- 在函数中同名的变量,当在函数退出后消失,全局的同名变量恢复;
- 如果在函数中想修改外部的全局变量加global关键字;
局部变量
- 在函数、过程中定义的变量
- 只在函数、过程中有效;
#在函数中修改外部的全局变量
name="abc" def test1():
global name
print("修改前:",name)
name="ZZZ"
print("修改后:",name) test()
可变&不可变的全局变量:
- 函数中直接引用外部不可变的全局变量时,是只读的;
- 如果引用的外部全局变量是可变类型(列表、字典),则可以对内部元素进行操作;
- 如果想修改不可变类型的,就要加global关键字;
- 如果在函数中定义了同名的局部变量同时又global关键字引用了外部的全局变量,则报错
- (个人意见)不要同时引用,变量名那么多,为什么硬要把自己搞的那么复杂,代码可读性那么差
注意,变量名定义规范:
- 全局变量名一律大写;
- 局部变量名一律小写;
#引用外部全局变量
name="abc" def test1():
print("name是:",name) test1()
#操作外部可变类型的变量
name=["abc","ZZZ"]
def test1():
name.append("CCC") #当全局变量是可变类型时,无需加global关键字,要谨慎这种操作
print(name) test1()
返回结果:
['abc', 'ZZZ', 'CCC']
#修改外部可变类型的全局变量
name=["abc","ZZZ"]
def test1():
name.append("CCC")
name[0]="KKK"
print(name) test1()
返回结果:
['KKK', 'ZZZ', 'CCC']
#内部定义之后同时引用外部全局变量,会报错
name=["abc","ZZZ"]
def test1():
name=[1,2,3]
global name
print(name) test1()
返回结果:
SyntaxWarning: name 'name' is assigned to before global declaration
global name
[1, 2, 3]
函数嵌套中引用外部全局变量,同时定义同名内部变量,要注意这期间的变化;
下面的global引用的是最外层的全局变量,而非上层函数内的变量
例如:
name="python" def test1():
name="Java"
def test2():
global name
name="C++"
test2()
print(name) #注意这里的name仍旧是test1函数里的name print(name)
test1()
print(name)
返回结果:
python
Java
C++
nonlocal关键字:
- 指定上一级变量;
- 非引用全局变量;
例如:
name="python" def test1():
name="Java"
def test2():
nonlocal name #引用上一级函数内的name
name="C++" #修改上一级函数中的name
test2()
print(name) print(name)
test1()
print(name)
返回结果:
python
C++
python
python之全局变量与局部变量的更多相关文章
- python中全局变量和局部变量的一个小坑
python 中全局变量和局部变量在使用过程中的一个容易出错的地方 什么是全局变量 python中,在函数外部声明的变量可以叫做全局变量. x = 10 def fn1(): pass fn1() 什 ...
- python之全局变量和局部变量
一.定义 1.全局变量 定义在函数外部一级代码的变量,叫全局变量,全局能用. 2.局部变量 定义在函数内的变量,只能在局部生效 二.用法 1.在函数内部可以引用全局变量,如果全局和局部都有一个变量na ...
- python中全局变量和局部变量
例1: a = 100 #定义全局变量a def test1(): print(a) #此处a为全局变量 def test2(a):#此处a为局部变量 print(a)#此处a为局部变量 test1( ...
- python函数 全局变量和局部变量
li1=[1,2,3,4,5] str1='abc' def func1(): li1=[7,8,9] str1='efg' print(str1) func1() print(li1)#输出的结果为 ...
- Python之路 day3 全局变量、局部变量
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...
- python函数的 全局变量与局部变量
一.函数的全局变量 1.什么是全局变量 顶着头开始写,没有任何缩进,在py文件的任何位置都能调用 #!/usr/bin/env python # _*_ coding:utf8 _*_ name=&q ...
- python开发_python中的变量:全局变量和局部变量
如果你在为python中的变量:全局变量和局部变量头疼,我想这篇blog会给你帮助 运行效果: 代码部分: #Python中的变量:全局变量和局部变量 #在很多语言中,在声明全局变量的时候,都喜欢把全 ...
- Python之路Python全局变量与局部变量、函数多层嵌套、函数递归
Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...
- python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块
---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...
随机推荐
- pdf.js的使用
下载地址: files.cnblogs.com/zycjwdss/mypdf.zip 把下载后的zip解压,放到web服务器根目录下,打开pdf.html,把这一句取消注释: //window.pd ...
- 在 Linux 系统中读取 GBK 编码的文档
Linux 系统中,默认使用 UTF-8 编码.有时,我们下载的一些文件(比如 TXT 电子书,中文字幕等)使用了 GBK 编码,这样,当我们读取这些文件时,就会看到乱码.一般来说,有两种解决办法. ...
- ObjectARX2012+ObjectARX Wizards2012+AutoCAD2012+MVS2008 环境配置
1 版本选择 ObjectARX本身采用的MVS编译平台,因此选择ObjectARX的编译平台作为二次开发的平台,兼容性最好,当然别的平台也不是一定不可以.目前已知的对应关系如下: R15 -- ...
- 判断文件是否存在,不要用if exist和if not exist,因为他们会受到文件是否隐藏的影响,改用dir /a 命令代替
@echo off & setlocal enabledelayedexpansionrem 判断文件是否存在,不要用if exist和if not exist,因为他们会受到文件是否隐藏的影 ...
- 事务回滚 SET XACT_ABORT ON
USE tempdb IF OBJECT_ID ('dbo.test') IS NOT NULL DROP TABLE dbo.test GO CREATE TABLE dbo.test ( id I ...
- vs2008 点击"转到定义"为什么是"未定义符号"
1.有可能是VA未安装正确,但是我遇到的情况是我的VA安装正确的. 2.我的解决办法:删掉工程的.ncb文件后重新编译即可:以前也遇到过断点打不上去的事情,也是删掉.ncb后重新编译就可以了. 附带一 ...
- runAllManagedModulesForAllRequests
https://weblog.west-wind.com/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-i ...
- spring 2.5.6 错误:Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
在运行一个第三方公司交付的项目的时候, 出现: Caused by: java.lang.IllegalStateException: Context namespace element 'annot ...
- time模块的学习
time模块不在python35\lib的安装目录下,是因为该模块是用C语言编写,内置到python解释器中.各种时间格式相互转换关系: import time,datetime # print(ti ...
- js 手写 Promise
/* * pending:初始化成功 * fulfilled:成功 * rejected:失败 * */ function Promise(cback){ this.status = 'pending ...