写在前面:
几乎有一周没有更新学习笔记了吧
上周一周身体都不怎么舒服
然后还得写开题报告
然后还得看文献
天天就是写写写写写写~~~~~~改改改改改改~~~~~~~~~
今天又开始学习了
希望之前的没忘记
其实今天更新的笔记是上周看的视频
可能忘得差不多了
又重新看的
我这脑子,笨死啦 加油吧!小伙郭
最近在看绝望的主妇,感觉很好看!(每次看美剧美名其曰学英语,~~~~然而,只有自己懂)
一、局部变量和全局变量
全局变量
- 在程序的一开始顶头定义的变量
- 作用域是整个程序(全局作用域)
局部变量
- 子程序中定义的变量
- 作用域是定义该变量的子程序(局部作用域)
#当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
规定关于全局变量和局部变量的命名规则:
- 全局变量全部大写
- 局部变量全部小写
二、关键字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’。