Python(8)---函数递归,匿名函数lambda,匿名函数的应用,集合

一、函数递归

# 函数递归
# 求 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)

猜你喜欢

转载自blog.csdn.net/weixin_46841376/article/details/115030730
今日推荐