学习记录-Python的局部变量和全局变量
1 定义
- 在被调用函数内赋值的变量是局部变量
- 在所有函数之外赋值的变量是局部变量
当一个函数被调用的时候,就会创建一个局部作用域,在这个函数内的所有变量都存在于该局部作用域内(global的变量除外),该函数返回时,这个局部作用域被销毁,这个局部作用域内的局部变量随之丢失
2 作用域的重要性
- 全局作用域中的代码不能使用任何局部变量
- 局部作用域中的代码可以访问全局变量
- 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量
- 在不同的作用域中,可以使用相同的名字命名不同的变量
下面根据具体代码举例说明
2.1 全局作用域中的代码不能使用任何局部变量
def spam():
egg = 'this is in function spam'
spam()
print(egg)
在函数spam()(局部作用域)中给egg赋值,然后在全局作用域中调用函数spam()

运行后显示,egg未被定义
egg是局部变量,而print(egg)中的变量egg是全局变量,全局作用域中的代码不能使用局部作用域中的变量
这一点我理解为:在调用子函数spam()时,创建了一个局部作用域,并在局部作用域中定义了一个局部变量,当子函数调用结束后,局部作用域和内部定义的局部变量一起没销毁,因此在全局作用域中,找不到egg这个局部变量
2.2 局部作用域中的代码可以访问全局变量
def spam():
print(egg)
egg = 'Outside the function'
spam()

全局变量在声明或赋值时被创建,直到程序被终止或执行结束
如果在egg赋值前调用函数
def spam():
print(egg)
spam()
egg = 'Outside the function'

这时候会显示变量未被定义
2.3 不同局部作用域中的变量不能相互调用
def spam():
print(egg)
def init():
egg = 'this is in init funcion'
init()
spam()

2.4 在不同的作用域中,可以使用相同的名字命名不同的变量
def spam():
egg = 'this is in spam function'
print(egg)
def init():
egg = 'this is in init funcion'
print(egg)
#egg = 'Out side function'
#print(egg)
init()
spam()

两个子函数中都定义了变量egg,但在打印时,互不影响
3 全局变量与局部变量同名
在上面说到,可以在局部作用域中调用全局变量,并且在给出的例子中,我们的子函数中只有一个print操作,但如果一个变量既在全局作用域中定义,又在局部作用域中定义,那么会出现什么样的打印结果
def spam():
egg = 'this is in spam function'
print(egg)
def init():
egg = 'this is in init funcion'
print(egg)
egg = 'Out side function'
print(egg)
init()
spam()

这里我的理解是:在局部作用域要对一个变量进行操作,Python会先在当前局部作用域查找有没有声明这个变量,如果有,就优先使用当前局部作用域中的变量,如果当前局部作用域作用域中没有,才会去全局作用域中寻找
4 global
global允许在局部作用域中声明全局变量
def spam():
global egg
egg = 'In spam function'
spam()
print(egg)

通过使用global语句在局部作用域中声明了一个全局变量egg,当函数spam()调用结束后变量egg并未随之销毁
5 全局变量和局部变量的优先级
在上面的例子中说过,如果在全局变量和局部变量同名,那么局部作用域中会优先处理在当前作用域中声明的的变量
用下面的例子进一步说明这个问题
def spam():
print(egg)
egg = 'In spam function'
egg = 'Out side function'
spam()

报错显示局部变量在赋值前被引用,就像前面所说,当在局部作用域中处理一个变量时,Python会先查看这个变量是否在局部作用域中进行声明,然后在会在全局作用域中查找这个变量的声明
参考内容
《Python编程快速上手》
学习记录-Python的局部变量和全局变量的更多相关文章
- python的局部变量,全局变量,类变量,实例变量
定义: a.全局变量:在模块内.在所有函数外面.在class外面,这就是全局变量. b.局部变量:在函数内.在class的方法内(未加self修饰的),这就是局部变量. c. 静态变量:在class内 ...
- PYTHON 函数局部变量和全局变量
有这样一段PYTHON代码,从事C语言开发的人都知道,如果定义了全局变量,而函数内没有定义同名的函数变量的话,那么在函数内对该变量的赋值就是对全局变量空间数值的修改, 然后在PYTHON中却不尽相同, ...
- 【Python】PYTHON 函数局部变量和全局变量
有这样一段PYTHON代码,从事C语言开发的人都知道,如果定义了全局变量,而函数内没有定义同名的函数变量的话,那么在函数内对该变量的赋值就是对全局变量空间数值的修改, 然后在PYTHON中却不尽相同, ...
- python基础--局部变量与全局变量
#全局变量作用于全局或整个程序中,程序执行完毕后销毁,局部变量作用在当前函数中,调用函数执行完毕及销毁 #如果函数的内容无global关键字,优先读取同名局部变量,如果没有同名局部变量,只能读取同名全 ...
- python - 基础局部变量和全局变量
python中全局变量和局部变量的最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问 首先我们来看下什么是全局变量和局部变量 全局变量:在函数之外定义的变量,所有函数内可以调用这个全局变量 ...
- python的局部变量和全局变量
#coding=utf-8#全局变量与局部变量 #作用域def func(): i=8#print i# print object# j=9# print j #局部变量def func(a): i= ...
- python中局部变量和全局变量
局部变量,就是在函数内部定义的变量 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响 局部变量的作用,为了临时保存数据需要在函数 在函数外边定义的变量叫做全局变量 全局变量能够在所有 ...
- python基础局部变量、全局变量
局部变量的作用域只作用与当前函数块(或代码块)中,对函数块(或代码块)之外的重名变量,没有任何影响. 在函数块(或代码块)中,局部变量可用通过global关键字声明变量来改变在函数块(或代码块)之外对 ...
- 初识python: 局部变量、全局变量
定义: 全局变量:在函数一开始定义的变量(全局范围内都可以使用) 局部变量:在函数中定义的变量(只能在函数中使用) 局部变量,例: #局部变量 def chang_name(name): print( ...
随机推荐
- Redis 5 种基本数据结构(String、List、Hash、Set、Sorted Set)详解 | JavaGuide
首发于:Redis 5 种基本数据结构详解 - JavaGuide 相关文章:Redis常见面试题总结(上) . Redis 5 种基本数据结构(String.List.Hash.Set.Sorted ...
- linux常见命令chgrp/chown/chmod
linux文件权限有读(r-4)写(w-2)执行(x-1) linux文件的所有方式有拥有者(user),属组(group),其他人(others) 改变文件属组命令 -- chgrp 修改/data ...
- 关于canvas的图片获取及python处理
获取canvas图片的对应base64的uri(echart图.v-chart图 canvas元素.toDataURL()获取对应canvas的base64 uri的链接 前端处理生成的uri,可以生 ...
- scrollTop实例
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- SQL 注入复习总结
一.介绍 1.什么是SQL注入? sql 注入是一种将 sql 代码添加到输入参数中,传递到 sql 服务器解析并执行的一种攻击手法. 2.SQL注入的原理 SQL 是操作数据库数据的结构化查询语言, ...
- Python基础之数据类型和变量
数据类型 计算机顾名思义就是可以做数学机器,可以处理各种数值,计算机还能处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据是需要定义不同的数据类型的,在Python中,能够直接处理的数据 ...
- 我在叽里呱啦折腾 DolphinScheduler 的日子
作者简介:wade,叽里呱啦攻城狮一枚,曾就职于苏宁,同花顺等,9个月大粿粿的爸爸. 前言 "工欲善其事,必先利其器" 在 2019 年进行数仓建设时,选择一款易用.方便.高效的调 ...
- centos/windows服务器,Mysql数据库表结构损坏-已解决
[问题原因]服务器突然断电 [故障报告]数据库表结构损坏 [解决思路]进入强制恢复模式,备份库表及数据重建 故障发现 周末公司断电,周一启动数据库就直接报错了 查看日志 上面标记的log,明确表示是非 ...
- Docker 拉取Nginx镜像 和运行
Docker 镜像拉取 docker pull [OPTIONS] NAME[:TAG|@DIGEST] 镜像拉取命令 OPTIONS说明: -a :拉取所有 tagged 镜像 --disable- ...
- html网页乱码原因以及解决办法
一.乱码造成原因 1.如果网页源代码是gbk编写的,而内容中的文字是utf-8的,那么,此时打开浏览器就会出现HTML乱码.反之也会出现乱码. 2.HTML网页编码是gbk,但是程序从程序库中调出呈现 ...