当前位置:   article > 正文

Python基础学习笔记(四)—— 函数(2)

Python基础学习笔记(四)—— 函数(2)

1. 匿名函数

匿名函数也叫 lambda 函数,如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使用 lambda简化

lambda 参数列表 : 表达式
  • 1

注意:

  • lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
  • lambda函数能接收任何数量的参数但只能返回⼀个表达式的值

一个例子:

# 函数
def fn1():
    return 200
print(fn1)
print(fn1())
# lambda表达式
fn2 = lambda: 100
print(fn2)
print(fn2())

'''结果
<function fn1 at 0x000002255E02D400>
200
<function <lambda> at 0x000002255E737840>
100
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
'
运行

注意:直接打印lambda表达式,输出的是此lambda的内存地址

1.1 lambda的参数形式

# 无参
print((lambda: 100)()) # 100

# 一个参数
print((lambda a: a)('hello world')) # hello world

# 默认参数
print((lambda a, b, c=100: a + b + c)(10, 20)) # 130

# 可变参数:*args 【注意:这⾥的可变参数传⼊到lambda之后,返回值为元组】
print((lambda *args: args)(10, 20, 30)) # (10, 20, 30)

# 可变参数:**kwargs 【注意:这⾥的可变参数传⼊到lambda之后,返回值为字典】
print((lambda **kwargs: kwargs)(name='python', age=20)) # {'name': 'python', 'age': 20}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
'
运行

1.2 lambda的应用

# 带判断的lambda
print((lambda a, b: a if a > b else b)(1000, 500))

# 列表数据按字典key的值排序
students = [
 {'name': 'TOM', 'age': 20},
 {'name': 'ROSE', 'age': 19},
 {'name': 'Jack', 'age': 22}
 ]
# 按name值升序排列
students.sort(key=lambda x: x['name'])
print(students)
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
'
运行

2. 递归函数

递归函数特点

  • 函数内部自己调用自己
  • 必须有出口
# 3以内数字累加和
def sum_numbers(num):
	 # 1.如果是1,直接返回1 -- 出⼝
 	if num == 1:
		return 1
	# 2.如果不是1,重复执⾏累加:
	result = num + sum_numbers(num-1)
 	# 3.返回累加结果
 	return result
sum_result = sum_numbers(3)
# 输出结果为6
print(sum_result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3. 高阶函数

函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。

内置高阶函数

3.1 map()

map(func, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。

注意:Python的可迭代对象有字符串、元组、列表

list1 = [1, 2, 3, 4, 5]
def func(x):
	return x ** 2
result = map(func, list1)
print(result) # <map object at 0x0000013769653198>
print(list(result)) # [1, 4, 9, 16, 25]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
'
运行

3.2 reduce()

reduce(func(x,y),lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。

import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
	return a + b
result = functools.reduce(func, list1)
print(result) # 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
'
运行

3.3 filter()

filter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 filter 对象。如果要转换为列表,可以使用 list() 来转换。

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
	return x % 2 == 0
result = filter(func, list1)
print(result) # <filter object at 0x0000017AF9DC3198>
print(list(result)) # [2, 4, 6, 8, 10]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
'
运行

4. 函数应用

学员管理系统

'''显示功能界⾯'''
def print_info():
    print('-' * 20)
    print('欢迎登录学员管理系统')
    print('1: 添加学员')
    print('2: 删除学员')
    print('3: 修改学员信息')
    print('4: 查询学员信息')
    print('5: 显示所有学员信息')
    print('6: 退出系统')
    print('-' * 20)


# 所有功能函数都是操作学员信息,所有存储所有学员信息应该是⼀个【全局变量】,数据类型为【列表】
info = [] # 【注意不可少,否则会报错】

'''添加学员'''
def add_info():
    # 接收⽤户输⼊学员信息
    new_id = input('请输⼊学号:') # 0、1、2、3……
    new_name = input('请输⼊姓名:')
    new_tel = input('请输⼊⼿机号:')

    # 声明info是全局变量
    global info
    # 检测⽤户输⼊的姓名是否存在,存在则报错提示
    for i in info:
        if new_name == i['name']:
            print('该⽤户已经存在!')
            return
    # 如果⽤户输⼊的姓名不存在,则添加该学员信息
    info_dict = {}
    # 将⽤户输⼊的数据追加到字典
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    # 将这个学员的字典数据追加到列表
    info.append(info_dict)
    print(info)

''' 删除学员'''
def del_info():
    while True:
        del_id = int(input('请输⼊要删除的学员学号:'))
        global info
        # 检查学员是否存在
        # 如果存在则删除列表指定下标的数据
        if 0 <= del_id < len(info):
            del_flag = input('确定要删除吗?yes or no')
            if del_flag == 'yes':
                del info[del_id]
            print(info)
            # 删除了⽬标学员信息后退出循环
            break
        else:
            print('输⼊学员有误,请重新输⼊')

'''修改学员信息'''
def modify_info():
    while True:
        # ⽤户输⼊要修改的学员学号
        modify_num = int(input('请输⼊要修改的学员学号:'))
        global info
        # 检查这个学员是否存在,存在则打印学员信息,并按⽤户输⼊修改
        if 0 <= modify_num < len(info):
            print(f'该学员学号是{info[modify_num]["id"]}, 姓名是{info[modify_num]["name"]}, ⼿机号是{info[modify_num]["tel"]}')

            info[modify_num]["id"] = input('请输⼊学号:')
            info[modify_num]["name"] = input('请输⼊姓名:')
            info[modify_num]["tel"] = input('请输⼊⼿机号:')
            print(info)
            break
        else:
            print('输⼊学员有误,请重新输⼊')


'''查询学员信息'''
def search_info():
    search_name = input('请输⼊要查找的学员姓名:')
    for i in info:
        if search_name == i['name']:
            print('*** 查询到信息如下 ***')
            print(f'该学员学号是{i["id"]}, 姓名是{i["name"]}, ⼿机号是{i["tel"]}')
            break
        else:
            print('查⽆此⼈......')


'''显示所有学员信息'''
def print_all():
    """ 显示所有学员信息 """
    print('学号\t姓名\t⼿机号')
    for i in info:
        print(f'{i["id"]}\t{i["name"]}\t{i["tel"]}')


while True:
    # 1. 显示功能界⾯
    print_info()
    # 2. ⽤户选择功能
    user_num = input('请选择您需要的功能序号:')
    # 3. 根据⽤户选择,执⾏不同的功能
    if user_num == '1':
        print('添加学员')
        add_info()
    elif user_num == '2':
        print('删除学员')
        del_info()
    elif user_num == '3':
        print('修改学员信息')
        modify_info()
    elif user_num == '4':
        print('查询学员信息')
        search_info()
    elif user_num == '5':
        print('显示所有学员信息')
        print_all()
    elif user_num == '6':
        exit_flag = input('确定要退出吗?yes or no')
        if exit_flag == 'yes':
            break
    else:
        print('输⼊错误,请重新输⼊!!!')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/847051
推荐阅读
相关标签
  

闽ICP备14008679号