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) 阅读上述代 ...
随机推荐
- jmeter报告分析工具
一直以来做性能测试都是用jmeter和LR,当然还有一些自己写测试脚本,LR不用说,分析结果那个组件杠杠的!但是jmeter毕竟是开源的,所以分析查看结果不像LR那样自带图形神马的,虽然可以自己写脚本 ...
- 利用GitLab自动同步软件仓库
利用GitLab自动同步GitHub.Gitee.Bitbucket软件仓库 我在码云的账号:userName密码:password项目地址:https://gitee.com/Bytom/bytom ...
- [Java] 父类和子类拥有同名的成员变量(fields)的情况
首先,需要明确的是,无论是通过casting,还是通过将子类对象的reference赋值给父类变量,都无法改变该reference所指对象的真实类型.但当该reference的类型是父类时,将无法调用 ...
- asp.net core 系列之Startup
这篇文章简单记录 ASP.NET Core中 ,startup类的一些使用. 一.前言 在 Startup类中,一般有两个方法: ConfigureServices 方法: 用来配置应用的 servi ...
- Confluence安装、汉化及jira整合
今天上午装了一下Confluence,刚开始装的时候成功了,成功后进入数据库配置阶段,本人想把jira和confluence整合一起用,刚开始提示数据库连接问题,后来一直问题提示Connection ...
- springboot 集成完整的swagger2
springboot 在集成swagger中会不会遇到各种问题: 1.swagger 进行接口鉴权(比如设置header的token,接口进行拦截处理). 2.swagger 进行实体属性解析(po ...
- Scala 学习之路(七)—— 常用集合类型之 Map & Tuple
一.映射(Map) 1.1 构造Map // 初始化一个空map val scores01 = new HashMap[String, Int] // 从指定的值初始化Map(方式一) val sco ...
- Storm 学习之路(五)—— Storm编程模型详解
一.简介 下图为Strom的运行流程图,在开发Storm流处理程序时,我们需要采用内置或自定义实现spout(数据源)和bolt(处理单元),并通过TopologyBuilder将它们之间进行关联,形 ...
- JS中 【“逻辑运算”,“面试题:作用域问题”,“dom对象”】这些问题的意见见解
1.逻辑运算 || && ! ||:遇到第一个为true的值就中止并返回 &&:遇到第一个为false的值就中止并返回,如果没有false值,就返回最后一个不是fa ...
- 【Spring源码解析】—— 策略模式在Spring中的应用
一. 什么是策略模式 策略模式的定义/含义:策略本身就是为了实现某一个目标而采取的一种工作方式,因此只要能够达成目标,则采取哪一种策略都可以:因此多种实际的策略之间是相互平行的. 注意 ...