一、局部变量与全局变量

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. 对shell脚本进行加密

    用shell脚本对系统进行自动化维护,简单,便捷而且可移植性好.但shell脚本是可读写的,很有可能会泄露敏感信息,如用户名,密码,路径,IP等.同样,在shell脚本运行时会也泄露敏感信息.请问如何 ...

  2. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

  3. Python|网页转PDF,PDF转图片爬取校园课表~

    import pdfkit import requests from bs4 import BeautifulSoup from PIL import Image from pdf2image imp ...

  4. MySQL8.0 DDL原子性特性

    1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发 ...

  5. Java 8 并发编程

    Java 1.5前 并发实现 Java Green Thread java 1.2 前的线程受os内核限制, 线程=进程, 绿色线程是JVM调度, 用来模拟多线程环境. 不需要本地线程支持. Java ...

  6. PATB 1028. 人口普查(20)

    1028. 人口普查(20) 注意特判合理人数为0,否则格式错误.很暴力的sort排序找出最大最小. 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Stan ...

  7. SSH不能连接并提示REMOTE HOST IDENTIFICATION HAS CHANGED

    ssh连接报错: 解决: vi /root/.ssh/known_hosts 找到要连接的主机的ip,把它的那行所有信息删除(就是一行)

  8. Python入门(一) 异常处理

    异常处理 捕捉异常可以使用try/except语句. try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理. 以下是语法: try: <语句> # ...

  9. 深入理解Java虚拟机笔记——虚拟机类加载机制

    目录 概述 动态加载和动态连接 类加载的时机 类的生命周期 被动引用 例子一(调用子类继承父类的字段) 例子二(数组) 例子三(静态常量) 类加载的过程 加载 验证 准备 解析 符号引用 直接引用 初 ...

  10. HDU 3938:Portal(并查集+离线处理)

    http://acm.hdu.edu.cn/showproblem.php?pid=3938 Portal Problem Description   ZLGG found a magic theor ...