一、匿名函数
1.什么是匿名函数
函数的另外一种表现形式,还是函数,只适用于函数功能比较简单的函数(声明的格式和普通的函数不一样)
2.匿名函数的声明
a.语法
- 变量名 = lambda 形参列表:返回值
b.说明
- 变量名 - 相当于函数名
- lambda - 声明匿名函数的关键字
- 形参列表 - 和普通函数的形参列表一样
- : - 固定写法
- 返回值 - 就相当于普通函数中只有一条return语句的函数体(不用写return)
匿名函数可以用关键字传参
func1 = lambda x, y=0: x+y
print(func1(1))
print(func1(y=520, x=1314))
匿名函数可以设置不定长参数
func2 = lambda *nums: sum(nums)
print(func2(1314, 520))
二、函数的作用域
1.什么是变量的作用域
就是变量能够使用的范围
2.全局变量和局部变量
-
a.全局变量 - 没有声明在函数或者类中的变量都是全局变量
全局变量的作用域是从声明开始,到整个文件结束 -
b.局部变量 - 声明在函数或者类中的变量
局部变量的作用域是从生命开始,到函数结束
总结:当我们调用函数的时候,系统会自动在栈区间专门为这个函数开辟一块独立的内容空间,用来保存在函数中声明的变量(形参也是属于声明在函数中的变量),当函数调用结束后,这个函数对应的栈区间会自动销毁 ---(函数调用过程是一个压栈的过程)
1.全局变量
a = 520
2.全局变量
这儿的y也是全局变量
for y in range(3):
print(y)
print('外面:', y)
def func1():
print('函数里面:', y )
func1()
3.局部变量
a.函数的形参就相当于声明在函数中的变量,所以是局部变量
# num1是局部变量
def func2(num1):
print(num1)
func2(10)
4.局部变量和全局变量同名
cc = 520 # 此处为全局变量
def func3():
cc = 1314 # 此处为局部变量
print('函数里:', cc) # 打印局部变量
func3()
print(cc) # 打印出来的为全局变量
3.global - 在函数中声明一个全局变量(只能在函数中使用)
在函数中:
global 变量名
变量名 = 值
lc = 520
def func4():
global lc # 若注释掉此行,则结果为1314,520
lc = 1314
print(lc)
func4()
print(lc)
4.nonlocal - 想要在局部的局部中取修改布局变量的值
语法:
nonlocal 局部变量
局部变量 = 值
def func5():
abc = 123
def func6():
nonlocal abc
abc =333
print('fun6:', abc)
func6()
print('func5:', abc)
func5()
三、函数作为变量
python中声明函数其实就是声明一个数据是function的变量,函数名就是变量名
- 函数名 -- 类型是function的变量
- 函数名() -- 调用函数并且获取函数的返回值
普通变量能做的事情函数变量都能做!
1.给别的变量赋值
对比如下:
# 声明了一个列表变量list1
list1 = [1, 2, 3]
# 实用列表变量给另外一个变量list2赋值
list2 = list1
# 赋值后list2可以当成列表来用
print(list2[1])
# 声明一个函数变量func1
def func1():
return 10
# 使用函数变量给另外一个变量func2赋值
func2 = func1
# 赋值后func2就可以当成函数来使用
func2()
print(func2())
2.变量作为容器类数据的元素
def func3():
print('abc')
return 10
list3 = [func3, func3(10), 100]
print(list3)
print(list3[0](1))
3.变量作为函数的实参
- 函数1作为函数2的实参 -- 函数2就是一个实参高阶函数
- 函数作为参数的应用:sort函数
- 列表.sort(key = None,reverse = False)
- 参数key - 要求是一个带有一个参数,并且返回值是布尔的函数。这儿的参数是
指向列表中的元素。确定按照元素的什么值进行排序
四、函数作为返回值
变量作为函数的返回值
函数1作为函数2的返回值 - 函数2是返回值高阶函数
网友评论