python 函数 全局变量_PYTHON学习0025:函数---局部变量和全局变量----2019-6-19

1、在函数里面(函数的作用域)定义的变量就叫局部变量。在函数外面的变量就叫全局变量,全局能用。

2、函数里面可以调用全局变量,但函数外面不可调用局部变量。也就是说局部变量的作用域只限于函数内部。

3、如果全局和局部都有一个相同名字的变量,函数查找变量的顺序是由内而外的。

4、如果一个程序里有多个函数内部定义了相同的变量名,则变量名之间互不影响的,因为是同级别的。

5、在函数内部修改全局变量:

先声明为全局变量:global后加上变量名

然后给全局变量重新赋值。(注意:必须先用global声明,而后再赋值,且函数内部的global前不能给变量赋值)

如下:

name="Black Girl"

def translate():

global name

name = "黑姑娘"

print(name,id(name))

translate()

print(name,id(name))

输出结果为:

黑姑娘 31330096

黑姑娘 31330096

可以看到2个name的结果和内存地址都一样。

6、当变量为列表时:

①、当变量为列表时,函数内外都有同样的变量名时,在函数内部给变量重新赋值时,局部变量不影响全局变量,如下:

name=[1,2,3]

def translate():

name = ["a","b"]

print(name,id(name))

translate()

print(name,id(name))

输出结果为:

['a', 'b'] 5006024

[1, 2, 3] 5005960

②、但是如果在函数内部,对列表进行增删查改操作时,全局变量里的值同时会被修改。还是内存地址的问题。

函数内部重新赋值时,相当于新建了一块内存地址,只不过变量名和全局变量一样而已。

但是在函数内部对变量进行增删改查操作时,只是改变变量内部某一元素的值进而改变这个元素的内存地址,但是不改变这个变量的地址,所以这个时候全局变量里元素的值也同样被改变,如下:

name=[1,2,3]

def translate():

name.append("pw")

print(name,id(name))

translate()

print(name,id(name))

输出结果为:

[1, 2, 3, 'pw'] 34103944

[1, 2, 3, 'pw'] 34103944

可以看到变量name的值和内存地址完全一样。

如果要改变这个类型为列表的变量的内存地址的话,还是要用global声明为全局变量,然后重新赋值。

字典,列表,集合,类、对象 可以通过这种方式在函数内部修改里面的元素,同时使得函数外面的全部变量里的元素也跟着被修改。

字符串,数字不能以这种方式修改。

元祖里面如果有字典,列表,集合,也可以修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值