IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python局部变量与全局变量 -> 正文阅读

[Python知识库]python局部变量与全局变量

局部变量

定义
  1. 局部变量是在函数内部定义的变量,只能在函数内部使用,或者说,局部变量只能在其被初始化的那个函数内使用。
  2. 函数执行完成后,函数内部的局部变量,会被系统回收
  3. 不同的函数,可以定义相同的名字的局部变量,但是彼此之间不会产生影响
创建局部变量

通常,我们在函数的内部声明一个变量以创建一个局部变量

#创建局部变量
def f():
    #局部变量s
    s = 100
    print(s)
使用局部变量

局部变量只能在作用域内使用,函数内部定义的局部变量只能在函数内使用,不能在函数外使用:
在这里插入图片描述

不同函数内部的相同名称的局部变量

不同函数内部的相同名称的局部变量互不影响,因为他们只是名字相同:

def f1():
    score = 100
    print(score)
def f2():
    score = 1000
    print(score)

在这里插入图片描述

全局变量

全局变量,顾名思义,就是全局都可以使用的变量。一般定义在函数之外,并且可以在整个程序中访问:即任何函数的里面或者外部。

#全局变量
score = 1010

#函数内部使用全局变量
def f():
    #函数内部没有定义score,但是可以直接用到外部的score
    print('内部%s'%score)

#调用函数f
f()
#函数外部使用全局变量
print('外部%s'%score)

在这里插入图片描述

函数内部存在一个与全局变量同名的局部变量

现在,如果有一个函数内部存在着一个和全局变量同名的局部变量,他们会怎样互相影响?如果我们在函数内部改变这个局部变量,会影响全局变量吗?

#函数内部的局部变量score
def f():
    score = 100
    print(score)
#全局变量
score = 1

在这里插入图片描述
在这里插入图片描述
所以全局变量与局部变量同名时,函数内部使用的是自己的(局部变量),外部使用的是全局的。实际上,函数内部score=100,这是一个变量的创建语句。

但是有一个问题就是,在函数内部只能访问全局变量,不能修改全局变量:

#全局变量
score = 100

#函数内访问全局变量
def f1():
    print(score)
    
#函数内修改全局变量
def f2():
    score = score + 1
    print(score)

在这里插入图片描述
这种情况下,需要使用global关键字

关键字global

在Python中,global关键字允许您在当前作用域之外修改变量

  • global被用来在一个非全局范围(比如函数内就是非全局范围)创建一个全局变量。
  • global关键字常常被用在函数内,这时我们想要修改或者赋值一个函数外的变量(全局变量)。函数内部访问/输出全局变量不需要使用global

Python中global关键字的基本规则是:

  • 当我们在函数内部创建变量时,默认情况下它是局部的。除非使用global显示的声明。
  • 当我们在函数外部定义变量时,默认情况下它是全局的。您不必使用global关键字。
  • 我们使用global关键字在函数内部使用全局变量。
函数内访问全局变量
#全局变量
a,b = 10,20

def f():
    #函数内访问全局变量不需要global
    c = a + b #对a,b全局变量的访问,c则是局部变量
    print(c)

#调用f()
f()

在这里插入图片描述

函数内部修改全局变量

但是这时候函数内部不能修改这个全局变量,这就需要使用到global关键字:

score = 100

def f():
	#score在函数内并没有创建,表示使用的是全局score,会报错
    score = score + 10
    print(score)

f()

在这里插入图片描述
因为是在函数内部修改score 变量,python会假设我们已经有了一个局部变量score,但是它并没有找到创建score的语句,所以会报错。为了告诉python,我们使用的是外部的score,需要使用global关键字。

使用global关键字之后

score = 100

def f():
    #使用global 
    global score
    score += 100
    print(score)
f()

在这里插入图片描述

原因解释如下:
在这里插入图片描述
在这里插入图片描述
使用之后
在这里插入图片描述

看几个例子:

python 不像C/C++java那样,可以在使用变量之前,声明类型,以及变量名,同时又没有赋值给变量,python中变量的创建于赋值是一起的,a = 10,就可以认为是对变量的定义,不过定义的时候给了值。

def f():
    print(s)
    
    s = 100
    print(s)

#全局变量
s = 1
print(s)
f()	#这里会报错

函数外有一个全局变量s

函数f()内:print(s),python首先会认为s是一个局部变量,但是函数内没有s的创建语句,就会往函数外找,找到了全局的s,由于函数内只是对s的访问,可以直接用,python 在f()函数内就直接用了全局的s

下面的s=100,python会认为是对全局s的修改,但是没有使用global ,所以要报错。python不会将它理解为函数内重新创建的一个跟全局同名的局部变量,因为上一句代码已经默认函数内使用的是全局的s,所以现在函数f()内的s都会是全局的s。修改全局s,没有使用global,自然会报错。

分割线----------------------------------------------------------------------------------------------------

再看下面这个:

def f1():
    s = s+1
    print(s)

s = -1
f1()#这里出错

#函数f1()内部直接要修改s,python 认为s是局部变量,但是函数内没有找到s的创建语句,然后在全局变量中找到了s,但是不使用global,不能修改这个全局s,所以报错。

分隔线-----------------------------------------------------------------------------------------------------

这个

def f():    
    s = 100
    s += -1
    print(s)

s = 1
print(s)
f()

在这里插入图片描述
函数f()内有s = 100,也有全局变量s = 1
在函数内s = 100,python并不会认为这是在使用全局的s,因为s = 100是一个变量的创建语句,python认为这是在函数内创建了一个s的局部变量,因为它找了创建变量的语句啊。所以函数内就是使用这个局部变量s

分隔线-----------------------------------------------------------------------------------------------------

函数内使用global 声明为全局变量

在定义函数时 ,使用global关键字创建函数内的变量时,如果你想在以后再次用到它,使用global之后就是全局变量了:

def f():
    global x  #函数内声明x为全局变量,以后可以接着用
    x = 100
    print(x)

print('222')
f()

在这里插入图片描述

#想使用f()内部定义的全局变量x
x = x+1
print(x)

在这里插入图片描述

另外:在使用 global 关键字修饰变量名时,不能直接给变量赋初值,否则会引发语法错误。global score = 1 是错误的。

如果全局变量与局部变量同名,则在函数内会优先使用局部变量中的值:
在这里插入图片描述

赋值语句就是直接创建一个变量了,但是如果你没有赋值语句,直接想要修改这个变量值,就会报错。

参考:
Python中的global关键字,你了解吗?
Global and Local Variables in Python

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:30:09  更:2022-07-05 23:30:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 15:23:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码