python中的函数

需求:函数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 访问打印形参看是否有数据

1.2 访问形参的id

1.3 改变形参的数据,查看这个形参并打印id,看id值是否相同

  1. 调用函数 – 把可变和不可变两种类型依次当做实参传入

“”"

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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值