需求:函数3个参数name,age,gender
def user_info(name, age, gender):
print(f’您的姓名是{name}, 年龄是{age}, 性别是{gender}')
user_info(‘TOM’, 20, ‘男’)
user_info(‘TOM’, 20) # 个数定义和传入不一致会报错
user_info(20, ‘TOM’, ‘男’) # 顺序也和定义必须是一致的,否则导致数据无意义
2.关键字参数
def user_info(name, age, gender):
print(f’您的姓名是{name}, 年龄是{age}, 性别是{gender}')
调用函数传参
user_info(‘ROSE’, age=20, gender=‘女’)
user_info(‘小明’, gender=‘男’, age=18) # 关键字参数之间不分先后顺序
位置参数必须写在关键字参数的前面
user_info(age=20, gender=‘男’, ‘TOM’)
3.缺省参数
def user_info(name, age, gender=‘男’):
print(f’您的姓名是{name}, 年龄是{age}, 性别是{gender}')
user_info(‘TOM’, 18) # 没有为缺省参数传值,表示使用默认值
user_info(‘TOM’, 18, gender=‘女’) # 为缺省参数传值,使用这个值,即修改了默认值
4.不定长参数
接收所有位置参数,返回一个元组
def user_info(*args):
print(args)
user_info(‘TOM’)
user_info(‘TOM’, 20)
user_info(‘TOM’, 20, ‘man’)
user_info()
收集所有关键字参数,返回一个字典
def user_info(**kwargs):
print(kwargs)
user_info()
user_info(name=‘TOM’)
user_info(name=‘TOM’, age=20)
5. 缺省参数在*args后面
1.对返回的数据直接拆包
1. 拆包元组数据
def return_num():
return 100, 200
# result = return_num()
# print(result)
num1, num2 = return_num()
print(num1)
print(num2)
2. 字典数据拆包: 变量存储的数据是key值
先准备字典,然后拆包
dict1 = {‘name’: ‘TOM’, ‘age’: 20}
dict1中有两个键值对,拆包的时候用两个变量接收数据
a, b = dict1
print(a)
print(b)
v值
print(dict1[a])
print(dict1[b])
2.交换2个变量的值
a = 10
b = 20
1. 方法一
“”"
1.1 定义中间的第三变量,为了临时存储a或b的数据
1.2 把a的数据存储到c,做保存
1.3 把b的数据赋值到a, a = 20
1.4 把c的数据赋值到b, b = 10
“”"
c = 0
c = a
a = b
b = c
print(a)
print(b)
a, b = 1, 2
print(a)
print(b)
a, b = b, a
print(a)
print(b)
可变和不可变
1. 不可变:int: 1.1 声明变量保存整型数据,把这个数据赋值到另一个变量; id()检测两个变量的id值(内存的十进制值)
a = 1
b = a
print(b)
# 发现a和b的id值相同的
print(id(a))
print(id(b))
# 修改a的数据测试id值
a = 2
print(b)
# 因为修改了a的数据,内存要开辟另外一份内存取存储2,id检测a和b的地址不同
print(id(a))
print(id(b))
2. 可变类型:列表
aa = [10, 20]
bb = aa
print(bb)
print(id(aa))
print(id(bb))
aa.append(30)
print(aa)
print(bb) # 列表是可变类型
print(id(aa))
print(id(bb))
需求:引用是否可以当做实参
“”"
- 定义函数: 有形参
1.1 访问打印形参看是否有数据
1.2 访问形参的id
1.3 改变形参的数据,查看这个形参并打印id,看id值是否相同
- 调用函数 – 把可变和不可变两种类型依次当做实参传入
“”"
def test1(a):
print(a)
print(id(a))
a += a
print(a)
print(id(a))
b = 100
test1(b)
c = [11, 22]
test1©
1.自定义函数
2.调用函数
3.作用域
定义功能界面函数
def info_print():
print(‘请选择功能--------------’)
print(‘1、添加学员’)
print(‘2、删除学员’)
print(‘3、修改学员’)
print(‘4、查询学员’)
print(‘5、显示所有学员’)
print(‘6、退出系统’)
print(‘-’ * 20)
等待存储所有学员的信息
info = []
添加学员信息的函数
def add_info():
“”“添加学员函数”“”
1. 用户输入:学号、姓名、手机号
new_id = input(‘请输入学号:’)
new_name = input(‘请输入姓名:’)
new_tel = input(‘请输入手机号:’)
2. 判断是否添加这个学员:如果学员姓名已经存在报错提示;如果姓名不存在添加数据
global info
2.1 不允许姓名重复:判断用户输入的姓名 和 列表里面字典的name对应的值 相等 提示
for i in info:
if new_name == i[‘name’]:
print(‘此用户已经存在’)
return作用:退出当前函数,后面添加信息的代码不执行
return
break
2.2 如果输入的姓名不存在,添加数据:准备空字典,字典新增数据,列表追加字典
info_dict = {}
字典新增数据
info_dict[‘id’] = new_id
info_dict[‘name’] = new_name
info_dict[‘tel’] = new_tel
print(info_dict)
列表追加字典
info.append(info_dict)
print(info)
删除学员
def del_info():
“”“删除学员”“”
1. 用户输入要删除的学员的姓名
del_name = input(‘请输入要删除的学员的姓名:’)
2. 判断学员是否存在:存在则删除;不存在提示
2.1 声明info是全局变量
global info
2.2 遍历列表
for i in info:
2.3 判断学员是否存在:存在执行删除(列表里面的字典),break:这个系统不允许重名,删除了一个后面的不需要再遍历;不存在提示
if del_name == i[‘name’]:
列表删除数据 – 按数据删除remove
info.remove(i)
break
else:
print(‘该学员不存在’)
print(info)
修改函数
def modify_info():
“”“修改学员信息”“”
1. 用户输入想要修改的学员您的姓名
modify_name = input(‘请输入要修改的学员的姓名:’)
2. 判断学员是否存在:存在修改手机号;不存在,提示
2.1 声明info是全局
global info
2.2 遍历列表,判断输入的姓名==字典[‘name’]
for i in info:
if modify_name == i[‘name’]:
将tel这个key修改值,并终止此循环
i[‘tel’] = input(‘请输入新的手机号:’)
break
else:
学员不存在
print(‘该学员不存在’)
3. 打印info
print(info)
查询学员信息函数
def search_info():
“”“查询学员信息”“”
1. 用户输入目标学员姓名
search_name = input(‘请输入要查询的学员的姓名:’)
2. 检查学员是否存在:存在打印这个学员的信息;不存在则提示
2.1 声明info为全局
global info
2.2 遍历info,判断输入的学员是否存在
for i in info:
if search_name == i[‘name’]:
学员存在:打印信息并终止循环
print(‘查询到的学员信息如下---------------’)
print(f"学员的学号是{i[‘id’]}, 姓名是{i[‘name’]}, 手机号是{i[‘tel’]}")
break
else:
学员不存在的提示
print(‘查无此人…’)
显示所有学员信息
def print_all():
“”“显示所有学员信息”“”
1. 打印提示字
print(‘学号\t姓名\t手机号’)
2. 打印所有学员的数据
for i in info:
print(f"{i[‘id’]}\t{i[‘name’]}\t{i[‘tel’]}")
系统功能需要循环使用,直到用户输入6,才退出系统
while True:
1. 显示功能界面
info_print()
2. 用户输入功能序号
user_num = int(input(‘请输入功能序号:’))
3. 按照用户输入的功能序号,执行不同的功能(函数)
如果用户输入1,执行添加;如果用户输入2,执行删除… – 多重判断
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:
print(‘退出系统’)
程序要想结束,退出终止while True – break
exit_flag = input(‘确定要退出吗?yes or no’)
if exit_flag == ‘yes’:
break
else:
print(‘输入的功能序号有误’)
1.什么是递归函数
2.递归函数的作用
回顾函数返回值:写法 和 返回的位置: 函数调用的位置
def return_num():
return 100
result = return_num()
print(result)
需求:3以内数字累加和 3 + 2 + 1 = 6
6 = 3 + 2以内数字累加和
2以内数字累加和 = 2 + 1以内数字累加和
1以内数字累加和 = 1 # 出口
递归特点:函数内部自己调用自己;必须有出口
def sum_numbers(num):
2. 出口
if num == 1:
return 1
1. 当前数字 + 当前数字-1的累加和
return num + sum_numbers(num-1)
result = sum_numbers(3)
print(result)
如果没有出口,报错:超出最大递归深度
1.语法格式
需求:函数 返回值100
1. 函数
def fn1():
return 100
result = fn1()
print(result)
2. lambda 匿名函数
lambda 参数列表: 表达式
fn2 = lambda: 100
print(fn2) # lambda内存地址
100返回值 调用函数
print(fn2())
2.和普通函数的区别
3.应用场景
定义简单的单行函数
需求:计算任意两个数字的累加和
1. 函数
def add(a, b):
return a + b
result = add(1, 2)
print(result)
2. lambda
fn1 = lambda a, b: a + b
print(fn1(2, 3))
作为函数的参数进行传递(重点、难点, 扩展点)
为什么函数要作为另外函数的参数?
匿名函数做为函数参数
总结
lambda的参数形式
无参数
一个参数
默认参数
可变参数:*args
可变参数:**kwargs
1. 无参数
fn1 = lambda: 100
print(fn1())
2. 一个参数
fn2 = lambda a: a
print(fn2(‘hello world’))
3. 默认参数/缺省参数
fn3 = lambda a, b, c=100: a + b + c
print(fn3(10, 20))
print(fn3(10, 20, 200))
4. 可变参数:*args
fn4 = lambda *args: args
print(fn4(10, 20))
print(fn4(10, 20, 30, 40))
print(fn4(10))
5. 可变参数:**kwargs
fn5 = lambda **kwargs: kwargs
print(fn5(name=‘Python’))
print(fn5(name=‘Python’, age=30))
4.lambda的应用
带判断的lambda
lambda 两个数字比大小,谁大返回谁
fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500))
列表数据按字典key的值排序
students = [
{‘name’: ‘TOM’, ‘age’: 20},
{‘name’: ‘ROSE’, ‘age’: 19},
{‘name’: ‘Jack’, ‘age’: 22}
]
sort(key=lambda…, reverse=bool数据)
1. name key对应的值进行升序排序
students.sort(key=lambda x: x[‘name’])
print(students)
2. name key对应的值进行降序排序
students.sort(key=lambda x: x[‘name’], reverse=True)
print(students)
3. age key对应的值进行升序排序
students.sort(key=lambda x: x[‘age’])
print(students)
1.体验高阶函数
abs(): 绝对值
print(abs(-10))
round(): 四舍五入
print(round(1.2))
print(round(1.9))
print(round(1.05, 1))
print(round(1.16, 1))
需求:任意两个数字,先进行数字处理(绝对值或四舍五入)再求和计算
1. 写法一
def add_num(a, b):
# 绝对值
return abs(a) + abs(b)
result = add_num(-1.1, 1.9)
print(result)
2. 写法二:高阶函数:f是第三个参数,用来接收将来传入的函数
def sum_num(a, b, f):
return f(a) + f(b)
result1 = sum_num(-1, 5, abs)
print(result1)
result2 = sum_num(1.1, 1.3, round)
print(result2)
2.内置高阶函数
map 用法
1. 准备列表数据
list1 = [1, 2, 3, 4, 5]
2. 准备2次方计算的函数
def func(x):
return x ** 2
3. 调用map
result = map(func, list1)
4. 验收成果
print(result)
print(list(result))
reduce 用法
list1 = [1, 2, 3, 4, 5]
1. 导入模块
import functools
2. 定义功能函数
def func(a, b):
return a * b
3. 调用reduce,作用:功能函数计算的结果和序列的下一个数据做累计计算
result = functools.reduce(func, list1)
print(result)
filter 用法
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1. 定义功能函数:过滤序列中的偶数
def func(x):
return x % 2 == 0
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!