三元表达式
-
三元表达式:偷懒写法,减少代码行数
-
三元表达式雏形
| |
| |
| username = input('username>>>:').strip() |
| if username == 'jason': |
| print('welcome') |
| else: |
| print('go back') |
| |
| |
| username = input('username>>>:').strip() |
| if username == 'jason':print('welcome') |
| else:print('go back') |
| |
| |
| username = input('username>>>:').strip() |
| print('welcome') if username == 'jason' else print('go back') |
- 三元表达式语法结构:值1 if 条件 else 值2(注意:没有冒号)
- 如果if后面的条件成立,则使用if前面的值
- 如果if后面的条件不成立,则使用else后面的值
| |
| |
| def max_num(a, b): |
| if a > b: |
| return a |
| else: |
| return b |
| res = max_num(1, 10) |
| print(res) |
| |
| |
| def max_num(a, b): |
| return a if a > b else b |
| res = max_num(1, 10) |
| print(res) |
生成式
列表生成式
| |
| name_list = ['jason', 'kevin', 'oscar', 'jerry', 'tony'] |
| |
| new_list = [] |
| |
| for name in name_list: |
| |
| new_name = name + '_NB' |
| |
| new_list.append(new_name) |
| print(new_list) |
| |
| |
| """一行代码解决列表生成式""" |
| |
| new_list = [name + '_NB' for name in name_list] |
| print(new_list) |
| |
| new_list = [name + '_NB' for name in name_list if name != 'jason'] |
| print(new_list) |
字典生成式
| new_dict = {i: 'jason' for i in range(10)} |
| print(new_dict) |
| |
| new_dict = {i: 'jason' for i in range(10) if i == 6} |
| print(new_dict) |
集合生成式
- 概念:python集合生成式与列表生成式几乎是一模一样的,只需要将[]替换为{} 即可,在{}内执行一个for循环语句,for循环所遍历的元素自动添加到集合之中
| new_set = {i for i in range(10)} |
| print(new_set) |
| |
| new_set = {i for i in range(10) if i == 6} |
| print(new_set) |
注意:元组没有生成式,它是后面重点讲解的迭代器知识(生成器)
| new_tuple = (i for i in range(10)) |
| print(new_tuple) |
匿名(lambda)函数
概念
- 匿名函数,也称为lambda函数,是没有定义名称的函数
作用
- 创始一个匿名函数对象,同 def 类似,但不提供函数名,只是一个表达式,lambda比函数简单且可以随时创建和销毁,有利于减少程序的偶合度。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
语法结构
注意
- lambda 表达式创建的函数只能包含一条表达式
- 由于lambda函数返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收,即匿名函数同样需要被调用才能执行,调用仍然使用()传参的方式实现
- 匿名函数同样可以定义有返回值没有返回值,有参数没有参数的情况
具体案例
| (lambda x: x + 1)(123) |
| res = lambda x: x + 1 |
| print(res(123)) |
应用场景
重要内置函数
内置函数概念
- Python内置函数是Python编程语言中预先定义的函数。嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 作用是提高程序的执行效率,内置函数的存在极大的提升了程序员的效率和程序的阅读。
max()函数
- 定义和用法:返回给定集合里最大的元素(最大值),可以指定排序的方法。如果值是字符串,则按字母顺序进行比较
| l1 = [223, 3423, 123, 24, 34, 35, 435, 3, 24, 3534, 53, 24, 234, 132, 4234, 456, 456, 5345, 4, 234, 345, 23, 2123432] |
| res = max(l1) |
| print(res) |
| |
| |
| |
| |
| |
| dic = { |
| 'jason': 100, |
| 'aj': 123, |
| 'Bason': 9999999, |
| 'zero': 888 |
| } |
| print(max(dic)) |
| |
| |
| def index(k): |
| return dic.get(k) |
| res = max(dic, key=index) |
| print(res) |
min()函数
- 定义和用法:返回给定集合里最小的元素(最小值),可以指定排序的方法。如果值是字符串,则按字母顺序进行比较
| l1 = [223, 3423, 123, 24, 34, 35, 435, 3, 24, 3534, 53, 24, 234, 132, 4234, 456, 456, 5345, 4, 234, 345, 23, 2123432] |
| res = min(l1) |
| print(res) |
| |
| |
| |
| |
| dic = { |
| 'jason': 100, |
| 'aj': 123, |
| 'Bason': 9999999, |
| 'zero': 888 |
| } |
| print(min(dic)) |
| |
| |
| def index(k): |
| return dic.get(k) |
| res = min(dic, key=index) |
| print(res) |
map()函数
- 定义和用法:映射函数。使用指定的函数,处理可迭代对象,并将结果保存在一个map对象中
| l1 = [11, 22, 33, 44, 55, 66] |
| |
| |
| l2 = [] |
| for i in l1: |
| l2.append(i+20) |
| print(l2) |
| |
| l2 = [i + 20 for i in l1] |
| print(l2) |
| |
| def index(a): |
| return a + 20 |
| res = map(index, l1) |
| print(list(res)) |
filter()函数
- 定义和用法:过滤器,用法和map类似。在函数中设定过滤的条件,逐一循环对象中的元素,将返回值为True时的元素留下(注意,不是留下返回值!),形成一个filter类型的迭代器
| l1 = ['jason', 'kevin', 'oscar', 'tony'] |
| |
| |
| l2 = [] |
| for i in l1: |
| if i != 'jason': |
| l2.append(i) |
| print(l2) |
| |
| l2 = [i for i in l1 if i != 'jason'] |
| print(l2) |
| |
| def index(a): |
| return a != 'jason' |
| res = filter(index, l1) |
| print(list(res)) |
reduce()函数
- 定义和用法:会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果
| l2 = [1, 2, 3] |
| |
| |
| count = 0 |
| for i in l2: |
| count += i |
| print(count) |
| |
| res = sum(l2) |
| print(res) |
| |
| from functools import reduce |
| |
| res = reduce(lambda x, y: x + y, l2, 100) |
| res = reduce(lambda x, y: x + y, l2, 100) |
| print(res) |
zip()函数
| n1 = [1, 2, 3] |
| n2 = ['jason', 'kevin', 'oscar'] |
| res = zip(n1, n2) |
| print(res) |
| print(list(res)) |
| |
| n1 = [1, 2, 3, 4] |
| n2 = [5, 6, 7, 8] |
| n3 = 'jack' |
| res = zip(n1, n2, n3) |
| print(list(res)) |
| |
| |
| n1 = [1, 2, 3, 4, 5, 6, 7] |
| n2 = [5, 6, 7, 8] |
| n3 = 'jason' |
| res = zip(n1, n2, n3) |
| print(list(res)) |
匿名函数集合内置函数使用
max/min()与lambda函数(匿名函数)集合使用
| dic = { |
| 'jason': 100, |
| 'aj': 123, |
| 'Bason': 9999999, |
| 'zero': 888 |
| } |
| |
| |
| def index(k): |
| return dic.get(k) |
| |
| res = max(dic, key=index) |
| print(res) |
| |
| |
| def index(k): |
| return dic.get(k) |
| |
| res = min(dic, key=index) |
| print(res) |
map与lambda函数(匿名函数)集合使用
| l1 = [11, 22, 33, 44, 55, 66] |
| res = map(lambda x: x + 20, l1) |
| print(res) |
| print(list(res)) |
filter与lambda函数(匿名函数)集合使用
| l1 = ['jason', 'kevin', 'oscar', 'tony'] |
| res = filter(lambda a: a != 'jason', l1) |
| print(res) |
| print(list(res)) |
reduce与lambda函数(匿名函数)集合使用
| l2 = [1, 2, 3] |
| from functools import reduce |
| |
| res = reduce(lambda x, y: x + y, l2, 100) |
| res = reduce(lambda x, y: x + y, l2, 100) |
| print(res) |
作业
多层装饰器
| 装饰器本质是在不改变装饰对象原来的“调用方式”和“内部代码”的情况下给被装饰的对象添加功能 |
| 多层装饰器就是在一个装饰器上再添加一个或多个装饰器,然后多个装饰器语法糖装饰同一个函数的时候 |
| 语法糖会自动将下面紧挨着的函数名当做参数传递给@符号后面的函数名,语法糖从下往上依次执行装饰器内的代码 |
| 将外层的函数从上往上下依次执行到最后回到最开始的真正的函数名 |
| 然后再从上往下执行内部的函数,最后回到要执行的那个函数 |
有参装饰器
| 编写一个装饰器时,当这个装饰器内部需要外界传入额外的数据来控制代码的分支或循环 |
| 而给函数体代码传值有两种方式,一个是通过形参传值,另一个是闭包函数 |
| 在装饰器的外部函数的括号内只能用来接收被装饰的函数名,不能填写其他形参 |
| 装饰器的内部函数也不能填写其他形参,所以就需要给原来的装饰器模板再套用一层闭包函数 |
| 将需要传入的参数设置为形参(可以多个参数) |
| 返回值为原外层函数,加语法糖时就直接添加额外的数据 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?