吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1558|回复: 5
上一主题 下一主题
收起左侧

[Python 转载] 【笔记】变量的作用域(全局变量和局部变量)

[复制链接]
跳转到指定楼层
楼主
cccyyys 发表于 2021-6-12 14:55 回帖奖励
变量的作用域
概念:变量起作用的范围叫做变量的作用域。分为全局变量和局部变量
全局变量:1、在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始到模块结束。
2、全局变量降低了函数的通用性和可读性,应尽量避免全局变量的使用。
3、全局变量一般做常量使用。
4、函数内部要改变全局变量的值,要用global声明一下。
局部变量:1、在函数体中(包含形式参数)声明的变量。
2、局部变量使用比全局变量快,优先考虑使用。
3、如果局部变量和全局变量同名,则在函数内部隐藏全局变量,只是用同名的局部变量。
[Python] 纯文本查看 复制代码
#全局变量和局部变量
a = 100  #全局变量
def test01():
    b = 10 #局部变量
    print(b*10)

test01()

打印结果为:100
这是一个简单地使用全局变量和局部变量的例子。如果在函数中打印a会出现什么结果呢?
[Python] 纯文本查看 复制代码
def test01():
    b = 10 #局部变量
    print(a)
    print(b*10)

我在函数中加了一个print(a)  打印结果为:100
100
可以看出打印的a就是全局变量a的值,如果在函数中重新给a赋值呢?
[Python] 纯文本查看 复制代码
#全局变量和局部变量
a = 100  #全局变量
def test01():
    b = 10 #局部变量
    a = 20
    print(a)
    print(b*10)
print(a)
test01()

打印结果为:100
20
100
我们会发现在函数外打印的变量a还是100,没有变化,但是在函数内打印的a是重新赋值的20。这是为什么呢?
这是因为函数中的a是一个局部变量,和全局变量a属于两个概念,不能混为一谈。根据局部变量的特点,如果局部变量和全局变量同名,则在函数内部隐藏全局变量,只是用同名的局部变量。在函数内打印的是局部变量a,并不是全局变量,而且函数内部要改变全局变量的值,要用global声明一下。所以这里并不是改变全局变量a的值,只是重新定义一个局部变量。如果要在函数内部改变全局变量的值,需要使用global声明一下
[Python] 纯文本查看 复制代码
#全局变量和局部变量
a = 100  #全局变量
def test01():
    b = 4 #局部变量
    print(b*10)

    global a  #使用global声明该变量为全局变量,并修改a的值
    a = 20
    print(a)

print(a)
test01()

打印结果为:100
40
20
这个我看了半天没有错误啊,但是为什么在函数外打印a还是100呢?有没有大佬解答一下?

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
fxl + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
 楼主| cccyyys 发表于 2021-6-12 14:56 |楼主
求大佬解答    为什么最后一个已经用global声明了,但是还是没有改变全局变量的值呢?
头像被屏蔽
3#
pjchangew 发表于 2021-6-12 15:21
4#
无闻无问 发表于 2021-6-12 18:12
本帖最后由 无闻无问 于 2021-6-12 18:14 编辑

很简单啊
print(a)  #先执行它,此时a为100
test01  #再执行函数调用,a被重新赋值为20


函数定义虽然在前,但未调用不会执行…
5#
 楼主| cccyyys 发表于 2021-6-12 19:14 |楼主
好吧,我明白了谢谢各位
6#
木头MT 发表于 2021-6-27 15:46
代码执行顺序问题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表