python课堂整理10---局部变量与全局变量
一、局部变量与全局变量
1. 没有缩进,顶头写的变量为全局变量
2. 在子程序里定义的变量为局部变量
3. 只有函数能把变量私有化
name = 'lhf' #全局变量
def change_name():
name = '大帅比' #局部变量 只在这一段函数里生效
print(name) #先从当前作用域找name,找不到再往外层找 change_name()
print(name)

二、修改全局变量
1. global 总是把最外层的全局变量拿来用
NAME = 'lhf'
def change_name():
global NAME #声明全局变量,把最外层的全局变量NAME 拿来用
NAME = "dabai" #修改全局变量
print(NAME)
print(NAME)
change_name()
print(NAME)

2. 如果函数内部变量前无 global 关键字,优先读取局部变量,无局部变量再读取全局变量
对于可变变量,可以对内部元素进行操作,但无法对变量本身重新赋值 name = ' fff '
- 有声明局部变量
NAME = [1, 2]
def test():
NAME = '自己' #又新定义了一个局部变量
print('我爱', NAME)
test()
print(NAME)

- 无声明局部变量
NAME = [1, 2]
def test():
NAME.append('你') #对可变的全局变量进行内部修改
print('我爱', NAME[2])
test()
print(NAME)

- 有global 且声明了局部变量
NAME = [1, 2]
def test():
global NAME
NAME = '自己'
print('我爱',NAME)
test()
print(NAME)
错误示例:函数内既有局部变量,又有全局变量,名字重复,所以调用失败
NAME = [1, 2]
def test():
NAME = '自己'
global NAME
print('我爱',NAME)
test()
print(NAME)

所以 我们把全局变量的变量名用大写 局部变量的变量名用小写
三、有函数的程序执行顺序

python 的代码从上往下执行,但遇到函数,并不执行,而是只编译,调用函数时才回去执行。
name = '大白' def cuoai():
name = 'liu'
def pianai():
global name
name = 'wen'
pianai()
print(name)
print(name)
cuoai()
print(name)

四、nonlocal 指代上一级变量,跟global 用法一样
name = '大白' def cuoai():
name = 'liu'
def pianai():
nonlocal name
name = 'wen'
pianai()
print(name)
print(name)
cuoai()
print(name)

python课堂整理10---局部变量与全局变量的更多相关文章
- python世界里的局部变量和全局变量: 潜规则太重要了!!!
python世界里的局部变量和全局变量: 潜规则太重要了!!! 先上代码: def fun(): def test_global(): ''' 内层和外层都需要声明为global, 才能彻底打通变量名 ...
- python课堂整理16---内置函数
1. abs :求绝对值 print(abs(-1)) 2. all()传入一个可迭代对象,对该对象进行bool值运算,若都为True 就返回True,有一个为假,就返回False print(all ...
- python学习-day15:局部变量与全局变量、嵌套函数、递归
一.全局变量与局部变量 在子程序中定义的变量称为局部变量, 在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序.当全局变量与局部变量同名时:在定义局部 ...
- python课堂整理19----迭代器和生成器
一.概念 • 迭代器协议: 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,以终止迭代(只能往后走,不能往前退) • 协议是一种约定,pyt ...
- python课堂整理18---文件操作(下)
一.b模式,字节方式(二进制的单位),rb wb ab f = open('test.py', 'rb', encoding = 'utf-8') 报错,因为用了b模式,就不能再指定编码格式了,已经指 ...
- python课堂整理4---列表的魔法
一.list 类, 列表 li = [1, 12, 9, "age", ["大白", "小黑"], "alex"] ...
- python课堂整理1
1.变量 变量只能由字母.数字.下划线组成 特例:1.变量不能用数字开头 2.不能是python的关键字 3.最好不要和python内置的东西重复 让变量名有意义 些 python3的关键字 ...
- python课堂整理20----生产者消费者模型
一.实现功能:店铺生产包子,消费者来吃 import time def producter(): ret = [] for i in range(10): time.sleep(0.1) ret.ap ...
- python课堂整理13---函数的作用域及匿名函数
name = 'alex' def foo(): name = 'jinling' def bar(): print(name) return bar a = foo() print(a) 阅读上述代 ...
随机推荐
- Linux精要
Linux入门精要 Linux历史 1970年: linux元年,起始开发者为 Kenneth Lane Thompson 和 Dernis Ritchie, 现在知道为啥很多计算机是用1970年1月 ...
- 【Linux】linux中删除指定日期之前的文件
要删除系统中就的备份文件,就需要使用命令了: #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; 假如在一个目录中保留最近30 ...
- SYN1618型 高精度天文时间同步系统
SYN1618型 高精度天文时间同步系统 产品概述 SYN1618型 高精度天文时间同步系统是由西安同步电子科技有限公司精心设计.自行研发生产的一款高精度的时频频率标准设备,接收GPS.GLON ...
- DNS之缓存服务器部署流程
环境介绍 [root@dns ~]# cat /etc/centos-releaseCentOS release 6.6 (Final)[root@dns ~]# ifconfig eth0|sed ...
- 深入理解计算机系统 BombLab 实验报告
又快有一个月没写博客了,最近在看<深入理解计算机系统>这本书,目前看完了第三章,看完这章,对程序的机器级表示算是有了一个入门,也对 C 语言里函数栈帧有了一个初步的理解. 为了加深对书本内 ...
- Spring Boot:整合Swagger文档
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- JAVA复习笔记03(完)
31.类中可定义接口 一个定义接口的java文件中最多有1个Public的接口 32.TreeMap 按照键值升序排序 LinkedHashMap 按照插入顺序排序 Map的操作: Map<in ...
- 高并发架构系列:Redis缓存和MySQL数据一致性方案详解
一.需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景, ...
- linux c库函数大全
Linux C函数库参考手册 [转自ChinaUnix]第1章字符测试函数isalnum(测试字符是否为英文字母或数字)isalpha(测试字符是否为英文字母)isascii(测试字符是否为ASCI ...
- HDU 4444:Walk(思维建图+BFS)***
http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给出一个起点一个终点,给出n个矩形的两个对立顶点,问最少需要拐多少次弯可以从起点到达终点,如果不能输 ...