Python小白学习之路(十一)—【局部变量和全局变量】【关键字global】【关键字nonlocal】
写在前面:
几乎有一周没有更新学习笔记了吧
上周一周身体都不怎么舒服
然后还得写开题报告
然后还得看文献
天天就是写写写写写写~~~~~~改改改改改改~~~~~~~~~
今天又开始学习了
希望之前的没忘记
其实今天更新的笔记是上周看的视频
可能忘得差不多了
又重新看的
我这脑子,笨死啦 加油吧!小伙郭
最近在看绝望的主妇,感觉很好看!(每次看美剧美名其曰学英语,~~~~然而,只有自己懂)
一、局部变量和全局变量
全局变量
- 在程序的一开始顶头定义的变量
- 作用域是整个程序(全局作用域)
局部变量
- 子程序中定义的变量
- 作用域是定义该变量的子程序(局部作用域)
#当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
规定关于全局变量和局部变量的命名规则:
- 全局变量全部大写
- 局部变量全部小写
二、关键字global(代指全局变量)
1.如果函数的内容无关键字global, 有声明局部变量,优先读取局部变量
NAME = ['xhg','alex']
def namelist():
NAME = 'gg'
print(NAME)
namelist()
print(NAME) #执行结果
gg
['xhg', 'alex']
#如果函数的内容中无global关键字,优先读取局部变量,只能读取全局变量,无法对全局变量重新赋值,
但是全局变量是可变对象类型,可以对内部元素进行操作
NAME = ['xhg','alex']
def namelist():
NAME.append('gg')
print(NAME)
namelist()
print(NAME) #执行结果
['xhg', 'alex', 'gg']
['xhg', 'alex', 'gg']
回顾一下关于可变不可变
- 可变:列表、字典
- 不可变:字符串、数字、元祖
2.如果函数的内容无关键字global, 无声明局部变量,读取全局变量
NAME = ['xhg','alex']
def namelist():
print(NAME)
namelist() #执行结果
['xhg', 'alex']
3.如果函数的内容有关键字global,无声明局部变量,读取全局变量
NAME = ['xhg','alex']
def namelist():
global NAME
print(NAME)
namelist()
print(NAME) #执行结果
GG
GG
4.如果函数的内容有关键字global, 有声明局部变量,读取全局变量,并可进行重新赋值
#错误示例
NAME = ['xhg','alex']
def namelist():
NAME = 'GG'
global NAME
print(NAME)
namelist()
print(NAME)
#报错,如果想要使用关键字global,需在程序一开始说明
NAME = ['xhg','alex']
def namelist():
global NAME
NAME = 'GG'
print(NAME)
namelist()
print(NAME) #执行结果
GG
GG
总结:
如果函数的内容中无global关键字,
- 优先读取局部变量,只能读取全局变量,无法对全局变量重新赋值,
- 但是对于可变对象,可以对内部元素进行操作
如果函数中有global关键字,
- 变量本质上就是全局的那个变量,可读取可赋值
三、关键字nonlocal(代指上一级变量)
通过程序,来看看nonlocal与global的区别
name = 'xhg'
def name1():
name = 'aa'
def name2():
global name
name = 'bb'
name2()
print(name)
print(name)
name1()
print(name) #执行结果
xhg
aa
bb
name = 'xhg'
def name1():
name = 'aa'
def name2():
nonlocal name
name = 'bb'
name2()
print(name)
print(name)
name1()
print(name) #执行结果
xhg
bb
xhg
通过上面两段代码,发现关键字global改变的是全局变量name = ‘xhg’,关键字nonlocal改变的是上一级变量name = ‘aa’。
Python小白学习之路(十一)—【局部变量和全局变量】【关键字global】【关键字nonlocal】的更多相关文章
- Python小白学习之路(二十一)—【迭代器】
迭代器 1.迭代器协议 对象必须提供一个 next 方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 2.可迭代对象 实现了迭代 ...
- Python小白学习之路(二)—【Pycharm安装与配置】【创建项目】【运算符】【数据类型】
写在前面: 第二天的学习,感觉比昨天学习相对轻松一些,但是对于我这个编程语言功底很弱的人来说,还是稍稍微有些.....哈尔滨的天气一天天冷了下来,还飘着小雨,不过还是挺有意境的.充实而又忙碌的生活,让 ...
- Python小白学习之路(二十四)—【装饰器】
装饰器 一.装饰器的本质 装饰器的本质就是函数,功能就是为其他函数添加附加功能. 利用装饰器给其他函数添加附加功能时的原则: 1.不能修改被修饰函数的源代码 2.不能修改被修饰函数的调用 ...
- Python小白学习之路(二十)—【打开文件的模式二】【文件的其他操作】
打开文件的模式(二) 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码.图片文件的jgp格 ...
- Python小白学习之路(十八)—【内置函数三】
一.对象操作 help() 功能:返回目标对象的帮助信息 举例: print(help(input)) #执行结果 Help on built-in function input in module ...
- Python小白学习之路(十五)—【map()函数】【filter()函数】【reduce()函数】
一.map()函数 map()是 Python 内置的高阶函数 有两个参数,第一个是接收一个函数 f(匿名函数或者自定义函数都OK啦):第二个参数是一个 可迭代对象 功能是通过把函数 f 依次作用在 ...
- Python小白学习之路(十四)—【作用域】【匿名函数】【编程方法论】【高阶函数】
吧啦吧啦内心戏 在没有具体学作用域之前,我在之前的学习笔记中就有提到 我开始以为是自己自创的词儿 没想到这个词早已经存在(手动捂脸) 真是个无知的小火锅(不知者无罪) 我发现自己最擅长做的事情,就是给 ...
- Python小白学习之路(十)—【函数】【函数返回值】【函数参数】
写在前面: 昨天早睡之后,感觉今天已经恢复了百分之八十的样子 又是活力满满的小伙郭 今日份鸡汤: 我始终相信,在这个世界上,一定有另一个自己,在做着我不敢做的事,在过着我想过的生活.-------宫崎 ...
- Python小白学习之路(九)—【字符串格式化】【百分号方式】【format方式】
写在前面: 最近的事情好像有很多.李咏的离去,让我觉得很突然,仿佛印象中就是主持节目的他,看着他和哈文的爱情,很是感动.离去,没有什么抱怨,只是遗憾. 总会感慨,时光的流逝. 好像真的很快,转眼间,我 ...
随机推荐
- shift + 空格 快捷键 使输入法 在全角和半角直接切换。。 但是全角输入一个 空格 ,会造成jsp页面 无法正常解析。。比如 无法获得参数。。
shift + 空格 快捷键 使输入法 在全角和半角直接切换.. 但是全角输入一个 空格 ,会造成jsp页面 无法正常解析....比如 无法获得参数.. 如 <form action=" ...
- 2018.10.14 loj#6012. 「网络流 24 题」分配问题(费用流)
传送门 费用流水题. 依然是照着题意模拟建边就行了. 为了练板子又重新写了一遍费用流. 代码: #include<bits/stdc++.h> #define N 305 #define ...
- 2018.09.23 关键网线(tarjan)
描述 给出一个无向连通图,即在任一个点对间存在路径.有的点提供服务a, 有的点提供服务b .同一个点可能有两种服务类型.每个点必须与提供2种服务的点连通.如果一个边断掉,就可能出现有些点不能被服务到, ...
- UVa 210 Concurrency Simulator (双端队列+模拟)
题意:给定n个程序,每种程序有五种操作,分别为 var = constant(赋值),print var (打印), lock, unlock,end. 变量用小写字母表示,初始化为0,为程序所公有( ...
- 用Git将项目发布在GitHub里
转载自http://blog.csdn.net/u011572517/article/details/50537407,个人加了一些注意事项和解释. githud是一个程序员以后成长都会使用到的,先不 ...
- web大文件上传(web应用---SSH框架)
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- Android线程和线程Handler基础一览
线程概览 线程是任何多任务系统的基石.可以被认为是一个主进程的多个子进程.这样做的目的就是了增加应用的性能. 应用主线程 当一个Android应用被打开的时候,系统会默认开辟一个线程.这个线程就被叫做 ...
- 201709019工作日记--sleep、wait、notify的使用详解
1. sleep()和wait()的区分 (1)这两个方法来自不同的类分别是,sleep来自Thread类,wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在 ...
- mac下svn无法上传.a文件的问题
Xcode自带的svn和Versions以及一些其它工具都默认ignore".a"文件. 解决办法有两个: 方法一:使用命令行添加文件([转]原文在这) 1.打开终端,输入cd,空 ...
- 3D UI场景中,把XY平面的尺寸映射为屏幕像素的数学模型推导
概述及目录(版权所有,请勿转载,欢迎读者提出错误) 之前用kanzi的3D UI引擎和cocos-2d的时候都有遇到过这个问题,就如何把3D场景中的XY平面的尺寸映射为与屏幕像素一一对应的,即XY平面 ...