一、匿名函数
定义语法:
lambda 参数1,参数2,从参数3…:函数体
1.匿名函数函数体只有一句代码,并且该代码必须具有运行结果,运行结果会被作为函数的返回值自动返回
2.匿名函数因为没有函数名,因此通常是通过变量接收该函数,之后通过变量名(参数列表)来调用,
3.同时匿名函数因为只有一句话,因此匿名函数一般只用来解决比较简单的数据计算问题
第一种定义方案
num = (lambda x: x**2)(10)
print(num)
结果:
100
第二种定义方案
fun = lambda x: x**2
result = fun(10)
print(result)
结果:
100
示例1
定义一个匿名函数返回任意一个数字的奇偶性
fun =lambda x: x & 1 != 0
print(fun(10))
结果:
False
示例2
bookinfo = [('不一样的卡梅拉(全套)',22.50,120),('零基础学Android',65.10,89.80),('摆渡人',23.40,36.00),('福尔摩斯探案集',22.50,128)]
print('爬取到的商品信息:\n',bookinfo,'\n')
bookinfo.sort(key = lambda x:(x[1],x[1]/x[2])) #优先按秒杀金额排序
print('排序后的商品信息:\n',bookinfo)
“”"
结果:
爬取到的商品信息:
[('不一样的卡梅拉(全套)', 22.5, 120), ('零基础学Android', 65.1, 89.8), ('摆渡人', 23.4, 36.0), ('福尔摩斯探案集', 22.5, 128)]
排序后的商品信息:
[('福尔摩斯探案集', 22.5, 128), ('不一样的卡梅拉(全套)', 22.5, 120), ('摆渡人', 23.4, 36.0), ('零基础学Android', 65.1, 89.8)]
二、递归函数
示例1
定义一个递归函数完成n的阶乘操作
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)
result = factorial(5)
print(result)
#定义一个函数完成1-n所有数字的和
def sum(n):
if n == 1:
return 1
else:
return n + sum(n - 1)
result = sum(100)
print(result)
结果:
120
5050
示例2
定义一个递归函数求1-n所有奇数的和
def sum_jishu(n):
if n == 1 or n == 2:
return 1
else:
if n & 1 == 0:
n -= 1
return n + sum_jishu(n - 2)
result = sum_jishu(5)
print(result)
结果:
9
示例3
定义一个递归函数求1-n所有偶数的和
def sum_oushu(n):
if n >= 0:
if n == 0 or n == 1:
return 0
elif n == 2:
return 2
else:
if n & 1 != 0:
n -= 1
return n + sum_oushu(n - 2)
else:
raise ValueError('value is out range')
print(sum_oushu(3))
结果:
2
三、全局变量和局部变量
在函数定义过程中变量分为:
1、全局变量
2、局部变量:
全局变量:定义在函数外面的变量称为全局变量,全局变量的生命周期从变量定义开始直到程序运行结束
局部变量:定义在函数内部的变量称为局部变量,局部变量的生命周期只是在函数的内部有效,当函数调用结束之后变量自动被系统回收
在Python程序中变量的使用遵循就近原则,如果想要在函数内部使用全局变量,此时一定要提前使用global变量名,声明该变量是全局变量.
注意:全局变量使用存在风险,因此开发过程中一般以局部变量为主,只有在需要在不同函数中访问同一个数据时才会使用全局变量
示例
x = 20
def change(num):
#global x
x = 30
num += 20
print(num)
print(x)
change(20)
print(x)
结果:
40
30
20