python之局部变量和全局变量的定义,两者之间的区别和使用方法,global和nonlocal的定义和使用方法,可变与不可变类型的定义和示例

导读:本篇文章讲解 python之局部变量和全局变量的定义,两者之间的区别和使用方法,global和nonlocal的定义和使用方法,可变与不可变类型的定义和示例,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

局部变量:

在函数内部声明的变量,只能在该函数范围内使用
举例:

def test():
    a=10#局部变量
    print(a)
test()
print(a)#函数体外使用局部变量a

在这里插入图片描述
在多个函数里面,可以声明同名的局部变量,彼此之间不受影响。

局部变量的作用:给我们临时保存数据

全局变量:

在函数外部声明的变量,在所有函数中都可以使用,但必须在所有函数的上方进行声明。
举例:

a=100#a为全局变量
def test():
    print(a)
test()
def test1():
    b=9
    print(a+b)
test1()
100
109

当全局变量和局部变量同名时,首先编译器会先在局部找,再到全局找,如果两者都没找到,则会报错。
举例:

a=100
def test():
    print(a)
test()
def test1():
    a=9
    print(a)
test1()
print(a)
100#局部没有该变量,则在全局范围内进行查找
9#含有和全局变量相同的局部变量,输出局部变量
100

那么局部变量和全局变量到底有什么区别?
本质区别:变量的作用域不同。
在函数内部声明的变量—>局部变量:只能作用于当前这个函数
在函数外部声明的变量—>全局变量:可以在所有函数里面使用

在函数内部修改全局变量的值:

使用global关键字进行声明,告诉python,global后面的变量将是全局变量,再使用赋值语句时,就不会创建局部变量。
举例:

x = 11
def test():
    global x#在函数内部修改了全局变量x的值
    x = 66
    print(x)
def test1():
    print(x)
test()
test1()
66
66

函数使用外层的变量:

使用nonlocal进行声明,注意,该变量既不是全局变量也不是局部变量,而是外部嵌套函数内的变量。
举例:

def test():
    num = 2
    def test1():
        nonlocal num#使用test1函数外的变量
        num *= 2
        print(num)
    test1()
test()
4

可变类型的全局变量:

字典,列表,集合(变量值改变,地址不变)
以列表举例:

li = []
print(id(li))
def test():
    global li
    li.append(88)
    print(li)
test()
print(li)
print(id(li))
1938324195904#变量的地址并没有发生变化
[88]
[88]
1938324195904

以字典举例:

dict ={}
print(id(dict))
def test():
    global dict
    dict["name"]="dog"
    print(dict)
test()
print(dict)
print(id(dict))
2292008286848
{'name': 'dog'}
{'name': 'dog'}
2292008286848

以集合举例:

set1 =set()
print(id(set1))
def test():
    global set1
    set1.add(1)
    print(set1)
test()
print(set1)
print(id(set1))

2000811991552
{1}
{1}
2000811991552

不可变类型的全局变量:

数字,元组,字符串(变量值改变,地址会改变)
以数字类型举例:

a = 0
print(id(a))
def test():
    global a
    a = 4
    print(a)
test()
print(a)
print(id(a))
140731653887616
4
4
140731653887744

以元组类型举例:

tuple1=()
tuple2=(1,2,3)
print(id(tuple1))
def test():
    global tuple1
    tuple1+=tuple2#(元组不可以直接添加元素,但我们可以用拼接的方式)
    print(tuple1)
test()
print(tuple1)
print(id(tuple1))
2992034349120
(1, 2, 3)
(1, 2, 3)
2992040085056

以字符串为例:

string1="hello "
string2="python"
print(id(string1))
def test():
    global string1
    string1+=string2#(字符串不可以直接添加元素,但我们可以用拼接的方式)
    print(string1)
test()
print(string1)
print(id(string1))
3091362679152
hello python
hello python
3091367364016

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81497.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!