python全局变量global_python修改全局变量及global使用

上节课我们知道了全局变量和局部变量的概念,也看到了了全局变量可以在函数内直接输出。

那么,继续思考,全局变量和局部变量名字相同的时候会怎么样?函数内部是否可以修改全局变量?(此文只是python函数坑的冰山一角,函数的坑可以查看此文python函数各种坑了解跟多)

情况一:

在函数内定义和全局变量同名的变量,则该变量为函数内的局部变量,和全局变量互不影响!无论你是在第几行定义的。

先看1个好理解的

# ‐*‐coding:utf‐8‐*‐

num = 10

def test1():

num = 20

print('在函数test1内部',num,id(num))

print('函数外部',num,id(num))

test1()

函数外部 10 502754336

在函数test1内部 20 502754656

再看1个有点难度的

下面的代码会报错,而不是按照你想象的输出10,初次遇见可能难以理解。在js中也有这种现象,在js中叫做变量提升,即js运行前有一个词法分析,会把函数内变量的声明部分提升至函数顶部,但是不能对变量定义(赋值)做提前解析(在底层变量定义和赋值并不是一步完成的)。在python中原理估计也类似,所以提示你还没赋值就去引用这个变量了。

# ‐*‐coding:utf‐8‐*‐

num = 10

def test2():

print('在函数test2内部',num,id(num)) # 会报错

num = 20

print('函数外部',num,id(num))

test2()

Traceback (most recent call last):

File "E:/py3script-工作/test/test.py", line 14, in test2()

File "E:/py3script-工作/test/test.py", line 9, in test2

print('在函数test2内部',num,id(num)) # 报错

UnboundLocalError: local variable 'num' referenced before assignment

函数外部 10 496921632

情况二:如果是可变类型全局变量则函数内可以直接修改,如果是不可变类型全局变量则函数内部需要使用global声明才能更改(参考函数内修改不可变类型全局变量)。你可以先学习(可变和不可变类型)。

# ‐*‐coding:utf‐8‐*‐

num = 10

def test2():

# global num

num = num + 1

print('函数外部', num, id(num))

print('函数外部',num,id(num))

test2()

Traceback (most recent call last):

File "E:/py3script-工作/test/test.py", line 19, in test2()

File "E:/py3script-工作/test/test.py", line 15, in test2

num = num + 1

UnboundLocalError: local variable 'num' referenced before assignment

函数外部 10 1541237792

# ‐*‐coding:utf‐8‐*‐

num = 10

def test1():

global num

num += 1

print('函数外部', num, id(num))

print('函数外部',num,id(num))

test1()

函数外部 10 1541237792

函数外部 11 1541237824

# ‐*‐coding:utf‐8‐*‐

nums = [0]

def test1():

nums.append(1)

print('函数内部', nums, id(nums))

print('函数外部',nums,id(nums))

test1()

函数外部 [0] 43691912

函数内部 [0, 1] 43691912

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值