函数进阶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]
浙公网安备 33010602011771号