一、局部变量与全局变量

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---局部变量与全局变量的更多相关文章

  1. python世界里的局部变量和全局变量: 潜规则太重要了!!!

    python世界里的局部变量和全局变量: 潜规则太重要了!!! 先上代码: def fun(): def test_global(): ''' 内层和外层都需要声明为global, 才能彻底打通变量名 ...

  2. python课堂整理16---内置函数

    1. abs :求绝对值 print(abs(-1)) 2. all()传入一个可迭代对象,对该对象进行bool值运算,若都为True 就返回True,有一个为假,就返回False print(all ...

  3. python学习-day15:局部变量与全局变量、嵌套函数、递归

    一.全局变量与局部变量 在子程序中定义的变量称为局部变量, 在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序.当全局变量与局部变量同名时:在定义局部 ...

  4. python课堂整理19----迭代器和生成器

    一.概念 • 迭代器协议: 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,以终止迭代(只能往后走,不能往前退) • 协议是一种约定,pyt ...

  5. python课堂整理18---文件操作(下)

    一.b模式,字节方式(二进制的单位),rb wb ab f = open('test.py', 'rb', encoding = 'utf-8') 报错,因为用了b模式,就不能再指定编码格式了,已经指 ...

  6. python课堂整理4---列表的魔法

    一.list   类, 列表 li = [1, 12, 9, "age", ["大白", "小黑"], "alex"] ...

  7. python课堂整理1

      1.变量 变量只能由字母.数字.下划线组成 特例:1.变量不能用数字开头    2.不能是python的关键字 3.最好不要和python内置的东西重复 让变量名有意义 些 python3的关键字 ...

  8. python课堂整理20----生产者消费者模型

    一.实现功能:店铺生产包子,消费者来吃 import time def producter(): ret = [] for i in range(10): time.sleep(0.1) ret.ap ...

  9. python课堂整理13---函数的作用域及匿名函数

    name = 'alex' def foo(): name = 'jinling' def bar(): print(name) return bar a = foo() print(a) 阅读上述代 ...

随机推荐

  1. SqlServer 动态SQL(存储过程)中Like 传入参数无正确返回值的问题

    最近在做项目时,以动态Sql进行Like语句查询时发现应该返回的结果却一直返回空,后来发现是写法错误: 错误SQL: DECLARE @0 varchar(20) SET @0 = 'XA-LZ' S ...

  2. Silverlight ItemsControl详细解析+解惑

    Silverlight最强大的地方就在于定义控件了,Silverlight提供了非常灵活和高效的控件定义方式,几乎可以实现任何复杂的控件实现,对于快速开发应用程序有着重要的意义.在Silverligh ...

  3. 获取原生DOM,diy脚手架,vue-clide使用,element-ui的使用

    一.获取原生DOM的方式 给标签或者属性添加ref属性 //1.添加属性 <div ref='shy'><div> <Home ref='home'></Ho ...

  4. Android native进程间通信实例-binder篇之——简单的单工通信

    网上找了很多binder相关文章,大部分都是在跟踪binder实现源代码,然后再把框架代码贴出来,看着实在费力. 这篇文章从实际出发,直接用一个案例下手,后续想了解binder相关原理的话,可以参考& ...

  5. niaobulashi-一个基于springboot shrio的权限管理系统

    github项目地址:https://github.com/niaobulashi/niaobulashi springboot学习地址:http://www.ityouknow.com/spring ...

  6. 移动IM开发指南2:心跳指令详解

    <移动IM开发指南>系列文章将会介绍一个IM APP的方方面面,包括技术选型.登陆优化等.此外,本文作者会结合他在网易云信多年iOS IM SDK开发的经验,深度分析实际开发中的各种常见问 ...

  7. spring 5.x 系列第6篇 —— 整合 mybatis + druid 连接池 (代码配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 项目目录结构 1.创建maven工程,除了Spring基本依赖外,还需要导 ...

  8. C盘内存杀手:IDEA缓存文件!

    软件虽然装在D盘,C盘仍然还有一个文件夹 里面有两个文件夹: config 目录是 IntelliJ IDEA 个性化化配置目录,或者说是整个 IDE 设置目录.也是我个人认为最重要的目录,没有之一, ...

  9. 【过时】项目转Maven后出现的问题记录

    上图,文字后补充 1.过程 创建一个新的web项目,项目名称与原项目名称一致.注意勾选“添加mvn支持(红框部分)”,勾选后运行目标服务器会变为none,这里无法进行添加. 2.项目创建完成后,会报错 ...

  10. 第六章 Fisco Bcos 多服务器分布式部署

    想了解相关区块链开发,技术提问,请加QQ群:538327407 前提概要 前面几章,我们通过单机部署,在单台服务器上搭建四个节点,完成Fisco Bcos 底层搭建,并完成相关合约开发.sdk 开发. ...