Python Day7 —— 函数加强

目录

应用 —— 学员管理系统

一、递归

二、lambda表达式(匿名函数)

语法

1.lambda的参数形式

1.1无参数

1.2一个参数

1.3默认参数

1.4可变参数:*args → 接收不定长的位置参数,返回元组

1.5可变参数:**kwargs → 接收不定长的关键字参数,返回字典

应用

1.带判断的lambda

2.sort函数

三、高阶函数

1.求绝对值计算 —— abs()

2.四舍五入计算 —— round()

应用

3.内置高阶函数

3.1map()

3.2reduce()

3.3filter()


应用 —— 学员管理系统

def home():
    print('------请选择功能------')
    print('1. 添加学员')
    print('2. 删除学员')
    print('3. 修改学员')
    print('4. 查询学员')
    print('5. 显示所有学员')
    print('6. 退出系统')
    print('-' * 17)

# 定义空列表,每组信息存入一个字典放入列表中 —— [{}, {}, {}...]
info = []
def add_info():
    """添加学员信息"""
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_gender = input('请输入性别:')

    # 声明info为全局变量
    global info

    for i in info:
        if new_id == i['id']:
            print('用户已存在')
            return
    # 定义空字典
    info_dict = {}
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['gender'] = new_gender
    info.append(info_dict)
    print(info)

def delete_info():
    """删除学员信息"""
    delete_id = input('请输入要删除的学员学号:')

    global info
    for i in info:
        if delete_id == i['id']:
            info.remove(i) # 将i整个删除
            break
        else:
            print('用户不存在')

        print(info)

def modify_info():
    """修改学员信息"""
    modify_id = input('请输入要修改的学员学号:')

    global info
    for i in info:
        if modify_id == i['id']:
            mess = input('输入要更改的信息:')
            i[mess] = input('改成:')
            break
        else:
            print('用户不存在')

    print(info)

def search_info():
    """查找学员信息"""
    search_id = input('请输入要查找的学员学号:')

    global info
    for i in info:
        if search_id == i['id']:
            print('信息如下:')
            print(f"学号为{i['id']},姓名为{i['name']},性别为{i['gender']}")
        else:
            print('用户不存在')

def all_info():
    """显示所有学员信息"""
    print('学号\t姓名\t性别')
    for i in info:
        print(f'{i["id"]}\t\t{i["name"]}\t\t{i["gender"]}')


while True:
    home()

    num = int(input('请输入功能序号: '))

    if num == 1:
        add_info()
    elif num == 2:
        delete_info()
    elif num == 3:
        modify_info()
    elif num == 4:
        search_info()
    elif num == 5:
        all_info()
    elif num == 6:
        flag = input('确定退出系统?[y/n]:')
        if flag == 'y':
            break
        elif flag == 'n':
            continue
        else:
            print('请输入正确指令!!!!')
    else:
        print('输入有误\n')

一、递归

函数内部自己调用自己

# 3+2+1
def sum(num):
    if num == 1:
        return 1 # 返回到上次函数调用处,即上一轮num + 1,然后return
    return num + sum(num-1)

print(sum(3))

二、lambda表达式(匿名函数)

如果一个函数只有一个返回值,只有一句代码,可用lambda简化

语法

lambda 参数列表:表达式  //表达式必须有返回值

  • 参数可有可无
  • 能接收任何数量的参数,但只能返回一个表达式的值
# 函数
def f1():
    return 100
print(f1) # 内存地址
print(f1()) # 100

# lambda————匿名函数
f2 = lambda: 200
print(f2) # 内存地址
print(f2()) # 200
# 计算a+b
# 函数
def add(a, b):
    return a + b
print(add(1, 2))
# lambda
add1 = lambda a, b:a + b
print(add1(1, 2))

1.lambda的参数形式

1.1无参数

lambda:表达式

# 无参数
f1 = lambda: 100
print(f1()) # 100

1.2一个参数

lambda 参数:表达式

# 一个参数
f2 = lambda a: a
print(f2('hi')) # hi

1.3默认参数

lambda key = value:表达式

# 默认参数
f3 = lambda a, b, c=10: a+b+c
print(f3(20, 30)) # 60

1.4可变参数:*args → 接收不定长的位置参数,返回元组

lambda *args:表达式

#可变参数 args
f4 = lambda *args: args
print(f4(10)) # (10,)
print(f4(10, 20, 30)) # (10, 20, 30)

1.5可变参数:**kwargs → 接收不定长的关键字参数,返回字典

lambda **kwargs:表达式

# **kwargs
f5 = lambda **kwargs: kwargs
print(f5(name = 'Tom')) # {'name': 'Tom'}
print(f5(name = 'Tom', gender = 'MAN')) # {'name': 'Tom', 'gender': 'MAN'}

应用

1.带判断的lambda

# 判断
f = lambda a,b: a if a > b else b
print(f(100, 1000)) # 1000

2.sort函数

# 列表数据排序
students = [{'name': 'Tom', 'age': 19}, {'name': 'Lucy', 'age': 20}, {'name': 'Jack', 'age': 18}]
# 按name升序排序
students.sort(key = lambda x: x['name'])
print(students) # [{'name': 'Jack', 'age': 18}, {'name': 'Lucy', 'age': 20}, {'name': 'Tom', 'age': 19}]
# 按name降序排序
students.sort(key = lambda x: x['name'], reverse = True)
print(students) # [{'name': 'Tom', 'age': 19}, {'name': 'Lucy', 'age': 20}, {'name': 'Jack', 'age': 18}]

# 按age升序排序
students.sort(key = lambda x: x['age'])
print(students) # [{'name': 'Jack', 'age': 18}, {'name': 'Tom', 'age': 19}, {'name': 'Lucy', 'age': 20}]
# 按name降序排序
students.sort(key = lambda x: x['age'], reverse = True)
print(students) # [{'name': 'Lucy', 'age': 20}, {'name': 'Tom', 'age': 19}, {'name': 'Jack', 'age': 18}]

三、高阶函数

把一个函数作为另一个函数的参数传入的函数。

函数式编程的体现。

1.求绝对值计算 —— abs()

# abs()
print(abs(-10)) # 10

2.四舍五入计算 —— round()

#round()
print(round(1.2)) # 1
print(round(2.7)) # 3

应用

#将所有数字取绝对值之后计算

  • 法一
def add(a, b):
    return abs(a) + abs(b)

print(add(-10, 30)) # 40
  • 法二
def add(a, b, f):
    return f(a) + f(b)

print(add(-10, 30, abs)) # 40

3.内置高阶函数

3.1map()

map(func, lst)

将传入的func函数的操作作用到lst变量的每个元素中。

# 计算list1中所有数字的平方
list1 = [1, 2, 3, 4, 5]
def func(x):
    return x ** 2
print(list(map(func,list1))) # [1, 4, 9, 16, 25]

3.2reduce()

reduce(func, lst)

func必有两个参数,每次func计算的结果继续和序列下一个元素做累积计算。

func函数必须有两个参数。

# 计算list中数字的累加和
# 导入模块
import functools # 类似于头文件??
list1 = [1, 2, 3, 4, 5]
def func(a, b):
    return a + b
result = functools.reduce(func, list1)
print(result) # 15

3.3filter()

filter(func, lst)

用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。若要转化为列表,用list()来转换。

# 找出偶数
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

def func(a):
    return a % 2 == 0
print(list(filter(func, list1))) # [2, 4, 6, 8]

猜你喜欢

转载自blog.csdn.net/sinat_56238820/article/details/122940810
今日推荐