一、函数递归
# 函数递归
# 求 1-n 的和
def sum(n):
if n == 1:
return 1
else:
return n + sum(n-1)
# 5050
print(sum(100))
二、匿名函数lambda
# 匿名函数
# 使用lambda关键字定义的函数就是匿名函数
# 匿名函数中不能使用if,while,for语句
# 匿名函数不需要写return
# 匿名函数也可以不返回结果,比如打印输出Hello World!
# 1.无参,无返回值类型的函数
def printHello():
print("Hello")
# 第一种调用方式:定义+直接调用
# Hello
(lambda : print("Hello"))()
# 第二种调用方式:将lambda表达式的值赋给一个变量
f1 = lambda : print("Hello")
f1()
# 2.无参,有返回值
def fun2():
return 1 + 2
f2 = lambda : 1 + 2
# 3
print(f2())
# 3.有参,无返回值
def fun3(name):
print(name)
f3 = lambda name:print(name)
# zhangsan
f3("zhangsan")
# 4.有参,有返回值
def fun4(*args):
return args
f4 = lambda *args :args
# (1, 2, 3, 4)
print(f4(1,2,3,4))
三、匿名函数的应用
# 匿名函数做函数参数
def cal(a,b,func):
'''
这个函数用于进行四则运算
:param a: 第一个数据
:param b: 第二个数据
:param func: 函数,采用哪个运算符计算
:return: 运算结果
'''
num = func(a,b)
return num
# 定义计算a+b的函数
def add(a,b):
return a + b
# 使用已定义的函数
# 40
print(cal(10,30,add))
# 使用匿名函数
# -10
print(cal(10,20,lambda a,b : a - b))
四、匿名函数实现列表按特定要求排序
# 匿名函数实现列表中数据是字典的排序
list = [{"name":"lisi","age":19},
{"name":"wangwu","age":20},
{"name":"zhangsan","age":17},
]
# list.sort() 程序报错,因为不知道按什么排序
# 使用name排序
# 匿名函数的形参是列表中每个数据的值,列表中是字典数据
list.sort(key=lambda x:x["name"])
# [{'name': 'lisi', 'age': 19}, {'name': 'wangwu', 'age': 20}, {'name': 'zhangsan', 'age': 17}]
print(list)
# 使用age排序
list.sort(key=lambda x:x["age"])
# [{'name': 'zhangsan', 'age': 17}, {'name': 'lisi', 'age': 19}, {'name': 'wangwu', 'age': 20}]
print(list)
# 根据列表的字符串长度进行排序
list1 = ['abc','sdjhakj','a','jjojo']
list1.sort(key=lambda x : len(x))
# ['a', 'abc', 'jjojo', 'sdjhakj']
print(list1)
五、列表推导式和字典推导式
# 列表推导式,用于快速生成列表
# 1. 变量 = [生成数据的规则 for 临时变量 in xxx]
# 每循环一次,就创建一个数据
list1 = [i for i in range(5)]
list2 = ["hello" for i in range(5)]
list3 = [i*2 for i in range(5)]
# [0, 1, 2, 3, 4]
print(list1)
# ['hello', 'hello', 'hello', 'hello', 'hello']
print(list2)
# [0, 2, 4, 6, 8]
print(list3)
# 2. 变量 = [生成数据的规则 for 临时变量 in xxx if xxx]
# 每循环一次,如果条件为真,就生成一个数据
list4 = [i for i in range(5) if i==3]
# [3]
print(list4)
# 3. 变量 = [生成数据的规则 for 临时变量 in xxx for j in xxx]
# 第二个for循环循环一次,生成一个数据
list5 = [(i,j) for i in range(2) for j in range(3)]
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
print(list5)
# 字典推导式
# 变量 = [生成字典的规则 for 临时变量 in xxx]
dict1 = {f"name{i}": i for i in range(4)}
# {'name0': 0, 'name1': 1, 'name2': 2, 'name3': 3}
print(dict1)
六、集合
# 本例演示集合
# 集合的定义:使用 {数据,数据...}
set1 = {1,3.14,True,"abc",(1,4)}
# 集合具有无序性,输出的顺序和用户输入的顺序不同
# 集合中没有重复数据,这里因为True和1重复,所以只输出四个数据,因此集合可用于去重
# {1, 'abc', 3.14, (1, 4)}
print(set1)
# set = {[1,2]}:代码报错,因为集合中必须是不可变类型
# 集合是可变类型,可进行增删改
# 删除数据
set1.remove(3.14)
# {1, 'abc', (1, 4)}
print(set1)
# 增加数据
set1.add("adhj")
# {1, 'abc', (1, 4), 'adhj'}
print(set1)
# 修改数据,将(1,4)->(2,5)
set1.remove((1,4))
set1.add((2,5))
# {1, 'abc', (2, 5), 'adhj'}
print(set1)
# 清空集合
set1.clear()
# set()
print(set1)
# 运用集合进行快速去重
list1 = [1,2,3,1,2,3,4,5,4,3,6,5,2,1]
list1 = list(set(list1))
# [1, 2, 3, 4, 5, 6]
print(list1)