当前位置:首页>python>小白学python第50天之变量的作用域

小白学python第50天之变量的作用域

  • 2026-08-26 03:12:43
小白学python第50天之变量的作用域

1.26

变量的作用域

?

学前疑问

函数能调用函数外的变量,那函数外能否调用函数里的变量?如果函数外跟函数里都有相同变量名,会优先调用哪个变量?

1

变量的作用域

(1)什么是变量的作用域

变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用),主要分为两类:局部变量和全局变量。

(2)局部变量与全局变量

在Python中,定义在函数外部的变量就称之为全局变量;定义在函数内部变量就称之为局部变量。

# 定义在函数外部的变量num = 10# 定义一个函数def func():    # 函数体代码    # 定义在函数内部的变量(局部变量)    i = 1

(3)变量作用域的作用范围

全局变量:在整个程序范围内都可以直接使用

str1 = 'hello'# 定义一个函数def func():    # 在函数内部调用全局变量str1    print(f'在局部作用域中调用str1变量:{str1}')# 直接调用全局变量str1print(f'在全局作用域中调用str1变量:{str1}')# 调用func函数func()

局部变量:在函数的调用过程中,开始定义,函数运行过程中生效,函数执行完毕后,销毁。

# 定义一个函数def func():    # 在函数内部定义一个局部变量    num = 10    print(f'在局部作用域中调用num局部变量:{num}')# 调用func函数func()# 在全局作用域中调用num局部变量print(f'在全局作用域中调用num局部变量:{num}')

普及小知识:计算机的垃圾回收机制

(4)global关键字

思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?

答:将这个数据存储在一个全局变量里面。

案例:

如果把通讯录管理系统更改为模块化编程模式(程序 => 函数),面临问题:

# 定义全局变量info = []# 定义funcA函数def funcA():    # 使用global声明全局变量    global info    # 向info全局变量中添加数据    info.append({...})# 定义funcB函数def funcB():    # 共享全局作用域中的全局变量info    for i in info:        ...

这个会产生一个问题:我们能不能在局部作用域中对全局变量进行修改呢?

# 定义全局变量num = 10num = 10# 定义一个函数funcdef func():    # 尝试在局部作用域中修改全局变量    num = 20# 调用函数funcfunc()# 尝试访问全局变量numprint(num)

最终结果:弹出10,所以由运行结果可知,在函数体内部理论上是没有办法对全局变量进行修改的,所以一定要进行修改,必须使用global关键字。

# 定义全局变量num = 10num = 10# 定义一个函数funcdef func():    # 尝试在局部作用域中修改全局变量    global num    num = 20    # global num = 20 会报错,要像上面一样分开# 调用函数funcfunc()# 尝试访问全局变量numprint(num)

(5)多函数之间数据的共享

# 定义全局变量info = []# 定义funcA函数:向全局变量中添加信息def funcA():    # 使用global声明全局变量    global info    # 向info全局变量中添加数据    info.append({...})# 定义funcB函数:查询功能,需要共享全局作用域中的通讯录信息def funcB():    # 共享全局作用域中的全局变量info    for i in info:        ...

(6)把函数的返回值作为另外一个函数的参数

def test1():    return 50def test2(num):    print(num)# 1、保存函数test1的返回值result = test1()# 2、将函数返回值所在变量作为参数传递到test2函数test2(result)

今日学习完毕,课后作业:

编写一个Python程序,演示全局变量和局部变量的作用域差异。要求明确定义一个全局变量和一个局部变量,并展示它们在不同作用域内的可访问性。

最新文章

随机文章