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
相关文章
|
7月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
450 2
|
7月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
1313 1
|
8月前
|
IDE 开发工具 开发者
Python类型注解:提升代码可读性与健壮性
Python类型注解:提升代码可读性与健壮性
422 102
|
9月前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
849 3
|
9月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
306 0
|
9月前
|
IDE API 开发工具
Python类型注解:让代码“开口说话”的隐形助手
Python类型注解为动态语言增添类型信息,提升代码可读性与健壮性。通过变量、函数参数及返回值的类型标注,配合工具如mypy、IDE智能提示,可提前发现类型错误,降低调试与协作成本。本文详解类型注解的实战技巧、生态支持及最佳实践,助你写出更高质量的Python代码。
426 0
|
8月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1359 102
|
8月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
475 104
|
8月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
368 103
|
8月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
390 82

推荐镜像

更多