Python中的全局变量和局部变量

局部变量与全局变量名一样时

当局部变量和全局变量名字一样时,依然是不同的变量,但是值一样时,地址依然一样,类似于两个不同的指针指向同一个地址。值不一样时,地址不一样,修改局部变量,全局变量的值依然不变,例如:

num = 100

def test():
    num = 99
    print("局部变量num的值:%d,地址为:%d" % (num, id(num)))

test()
print("全局变量num的值:%d,地址为:%d" % (num, id(num)))

输出:
局部变量num的值:99,地址为:492861520
全局变量num的值:100,地址为:492861552

Python中,当全局变量和局部变量的名字一样时,函数内会优先使用局部变量的值,函数内也没办法通过赋值直接修改全局变量的值。

如果要在局部修改全局变量的值时

修改成如下代码:

num = 100

def test():
    global num  #告诉解释器num是全局变量
    num = 99
    print("局部变量num的值:%d,地址为:%d" % (num, id(num)))

test()
print("全局变量num的值:%d,地址为:%d" % (num, id(num)))

输出:
局部变量num的值:99,地址为:492861520
全局变量num的值:99,地址为:492861520

针对函数参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用

def demo(num, num_list):
    print("函数内部")

    # 赋值语句
    num = 200
    num_list = [1, 2, 3]

    print(num)
    print(num_list)


gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print("函数外部")
print(gl_num)
print(gl_list)

输出:
函数内部
200
[1, 2, 3]
函数外部
99
[4, 5, 6]

如果传递参数是可变类型,在函数内部,使用方法修改了数据的内容,同样会影响到外部的数据

def demo(num_list):
    print("函数内部")

    # 使用方法修改内部的代码
    num_list.append(9)
    print(num_list)


gl_list = [1, 2, 3]
demo(gl_list)
print("函数外部")
print(gl_list)

输出:
函数内部
[1, 2, 3, 9]
函数外部
[1, 2, 3, 9]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

象牙塔小明

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值