1.匿名函数
函数名 = lambda 参数列表:返回值
说明:
lambda是关键字
:固定的
此处返回值相当于只有一个return语句的函数体
#写一个匿名函数,功能是求两个数的和
[IN1]sum1 = lambda num1,num2: num1+num2
print(sum1(3,9))
[IN2]def sum1(num1,num2):
return num1+num2
print(sum1(10,20)
#求1+2+3+……+100
[IN3]sum2 = lambda n: sum(range(n+1))
print(sum2(100))
[OUT1]12
[OUT2]30
[OUT3]5050
特点:可直接将函数的声明作为一个变量或值
2.变量的作用域
变量的作用域指的是变量能够使用的范围
全局变量:声明在函数和类的外面的变量;作用域从声明开始到整个py结束
局部变量:声明在函数和类内的变量
作用域从声明开始到函数结束
3.关键字
global 关键字:在函数中说明此变量为全局变量。只声明,不赋值,只在函数中使用
[IN]name = 'abc' #全局变量
def func2():
global name #声明使用的name是全局变量name
name = 'aaa'#局部变量
print(name)
print(name)
[OUT]aaa
nonlocal关键字 :在函数中的局部函数中修改局部变量的值
4.函数作为变量
声明函数就是声明一个类型是function的变量,函数名实质就是变量。
sort的使用
列表.sort(key=None, reverse=False)
使用sort的时候,可以通过给key赋一个函数变量,来规定列表中的元素按什么来排序
其中:函数变量要求要有一个参数和一个返回值。参数代表列表中的元素,返回值代表按照那个标准排序
#将列表里的元素中按成绩进行排序
list1=[
{'name': '张三', 'age': 20, 'score': 90},
{'name': '李四', 'age': 28, 'score': 70},
{'name': '王五', 'age': 18, 'score': 89}
]
list1.sort(key=lambda item:item['score'])
print(list1)
def get_age(item):
return item['score']
list1.sort(key=get_age)
print(list1)
5.将函数作为返回值
函数可以作为返回值出现
python中的函数可以有多个返回值,判断是否有return返回值,考虑是否有新数据产生。
#案例:读程序
def operation(operator:str):
if operator=='+':
def sum1(*args,**kwargs):
sum2=0
for item in args:
sum2+= item
for key in kwargs:
sum2+= kwargs[key]
return sum2
return sum1
elif operator=='*':
def func1(*args,**kwargs):
sum2=1
for item in args:
sum2*=item
for key in kwargs:
sum2*=kwargs[key]
return sum2
return func1
print(operation('*')(3,4,6,3))
6.函数的调用
函数的调用过程是一个压栈的过程
每次调用函数时,系统都会在内存中(栈)开辟空间来存储函数执行过程中产生的数据(函数中声明的变量)
当函数调用完成后,这块内存空间会自动销毁。
#求多个数的和及平均值
def my_sum(*nums):
sum1=sum(nums)
average=sum1/len(nums)
return sum1,average
print(my_sum(3,4,2,5,7,37))
7.递归函数
递归函数:函数中调用函数本身。循环能做的事递归都可以做。
步骤:1)确定临界值(循环结束的条件,一般是最小值)
2)找关系,假设函数功能已经实现,找f(n)和f(n-1)的关系
3)根据关系,用f(n-1)实现f(n)的功能
一般不用递归,耗内存