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

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

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

举例:

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
100

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

举例:

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
相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
机械视觉:原理、应用及Python代码示例
机械视觉:原理、应用及Python代码示例
|
1月前
|
Python IDE 开发工具
Python类型注解(十)
Python类型注解(十)
34 0
Python类型注解(十)
|
1月前
|
存储 Python
Python中如何读取和写入文件?请提供代码示例。
【2月更文挑战第26天】【2月更文挑战第87篇】Python中如何读取和写入文件?请提供代码示例。
|
1月前
|
算法 索引 Python
Python中如何实现二分查找?请提供代码示例。
Python中如何实现二分查找?请提供代码示例。
23 0
|
1天前
|
存储 Python 容器
|
2天前
|
人工智能 开发者 Python
Python 中的断点类型详解
Python 中的断点类型详解
8 2
|
4天前
|
存储 Python
Python变量类型
Python变量类型
8 0
|
11天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
34 0
|
12天前
|
索引 容器
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
|
12天前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域