函数进阶1

作用域

全局变量:函数外部定义的变量在整个文件中有效

局部变量:函数内部定义的变量,从定义位置开始导函数定义结束位置有效。

1.函数间不能共享内部定义的变量格式

2.函数内可以使用全局变量

a  = 100  #全局变量
def test1():
    print('这是test1的值:',a)
def test2():
    a = 110  #局部变量
    print('这是test2的值:',a)
print('调用前函数a的值:',a)
test1()
test2()
print('调用后函数a的值:',a)

# 调用前函数a的值: 100
# 这是test1的值: 100
# 这是test2的值: 110
# 调用后函数a的值: 100

调用后a的值没有被覆盖,是因为函数内部如果要使用变量,会先从函数内部找,有的话直接使用,没有就会到函数外面找(全局变量)

作用:局部变量只能在函数内部使用,在函数体内部,临时保存数据,即当函数调用完成之后,就销毁局部变量

global关键字

在函数内部修改全局变量的值,可以使用global关键字

语法格式: global 变量名

a  = 100  #全局变量
def test1():
    print('这是test1的值:',a)
def test2():
    global a  #声明全局变量
    a = 110  
    print('这是test2的值:',a)
print('调用前函数a的值:',a)
test1()
test2()
print('调用后函数a的值:',a)

 nonlocal关键字(了解就行)

将变量声明为外层变量(外层的局部变量,而且不能是全局变量) 

总结:只能在嵌套函数中使用,在内函数中的局部变量使用nonlocal,会对外函数的局部变量进行修改(对上一级修改),二层嵌套三层都可以嗷

a = 10  #全局变量
def outer():   #外函数
    a = 5 #局部变量

    def inter(): #内函数
        nonlocal a
        a = 20
        print('内函数inter中a得值为',a)   #先从自己找值,找不到就从下一层找外函数的局部变量值a = 5
    inter() #调用内函数


    print('外函数outer中a的值是',a)  #打印函数
outer()  #调用外函数

 

匿名函数(lambda)

语法:  函数名 = lambda 形参 : 返回值(表达式)

lambda 是定义匿名函数的关键字,相当于跟函数的def

调用: 结果 =  函数名(实参)

add = lambda a,b:a+b  #a,b就是匿名函数的形参,a+b是返回值的表达式
print(add(1,9))  #不需要写return来返回值,表达式本身的结果就是返回

无参数:

funa = lambda :"一桶水果茶"
print(funa())

一个参数

funb = lambda name:name
print(funb("小武"))

默认参数

func = lambda name,age=18:(name,age)
print(func("小三"))
print(func("小武",24))

特点:lambda 只能实现简单的逻辑,如果逻辑复杂且代码量较大,不建议使用lambda,降低代码的可读性,为后期的代码维护增加困难

内置函数

set() 创建一个无序不重复元素集

list()将一个可迭代对象转换成一个列表

tuple()将一个可迭代对象转换成元素

abs()   返回绝对值

sum()  求和

min()  求最小值

mix()  求最大值

reduce() 对参数序列中元素进行累计,先把对象中得两个元素取出,计算出一个值保存,然后把这个计算值跟第三个元素进行计算

 

拆包

对于函数中的多个返回数据,去掉元组,列表,或者字典直接获取里面数组的过程

tua = (1,2,3,4)
a,*b = tua  # *b代表可以取多个元素
print(a,b)

c,d,e = b
print(c,d,e) # 2,3,4

#1[2,3,4]

 

posted on 2025-11-28 23:48  梨花苗  阅读(18)  评论(0)    收藏  举报