ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【python基础】第20回 三元 匿名 重要内置函数

2022-07-07 20:02:40  阅读:153  来源: 互联网

标签:内置 20 函数 python res list print jason name


本章内容概要

1. 三元表达式

2. 各种生成式

3. 匿名函数

4. 重要内置函数

本章内容详解

1. 三元表达式

1.1 语法结构

数据值1  if  条件  else  数据值3

1. 如果if 后面的条件成立 则使用if前面的值

2. 如果if 后面的条件不成立 则使用else后面的值

3. 三元表达式:仅限于二选一的情况并且不建议嵌套使用,三元表达式一般情况下两个值都是具体的数据值不是函数

1.2 代码详解

1. 编写一个函数 比较两个数的大小 返回大的那个

2. 初解

def my_max(a, b):
    if a > b:
        return a
    else:
        return b
res = my_max(1, 10)
print(res)

 3. 三元表达式

def my_max(a, b):
    # if a > b:
    #     return a
    # else:
    #     return b
    return a if a> b else b
res = my_max(1, 10)
print(res)

 4. 在python中代码不是精简的越少越好 在精简的过程中还要保证代码的可读性,如以下代码

res = 23 if 10 > 5 else (22 if 0 else (66 if 1 == 2 else 66))

2. 各种生成式

2.1 列表生成式

1. 列表生成式中只能出现for和if

2. 讲解:有列表name_list = ['jason', 'kevin', 'oscar', 'jerry', 'tony'] 给列表所以的数据值加上_NB的后缀

for 循环添加

name_list = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
# 1.定义一个新的列表
new_list = []
# 2.循环原列表中所有的数据值
for name in name_list:
    # 3.拼接_NB后缀
    new_name = name + '_NB'
    # 4.追加到新列表中
    new_list.append(new_name)
print(new_list)

 用列表生成式 一行代码解决,先执行for 循环 然后将一个个的数据值交给for循环前面处理

# 语法结构 变量名相关处理 for 变量名 in 数据集
# 先执行for 循环 然后将一个个的数据值交给for循环前面处理 new_list = [name + '_NB' for name in name_list] print(new_list)

 还支持if判断   先执行for循环 然后将一个个的数据值交给if判断 结果为True则最后交给for循环前面处理

# 语法结构 变量名相关处理 for 变量名 in 数据集 if 条件
# 还支持if判断 先执行for循环 然后将一个个的数据值交给if判断 结果为True则最后交给for循环前面处理 new_list = [name + '_NB' for name in name_list if name != 'jason'] print(new_list)

# 语法结构 {v:k for 变量名 in 数据集}
new_dict = {i: 'jason' for i in range(10)} print(new_dict)

2.3 集合生成式

集合生成和列表 ,字典差不多

1. 代码讲解

# 语法结构 变量名 for  变量名 in 数据集 if 条件
new_set = {i for i in range(10) if i == 6}
print(new_set)

3. 匿名函数

3.1 定义

匿名函数就是没有函数名的函数,一种使用lambda定义的匿名函数。这种函数可以用在任何普通函数可以使用的地方,但在定义时被严格限定为单一表达式。从语义上讲,它只是普通函数的语法糖

3.2 语法结构

lambda 形参:返回值

3.3 具体案例

(lambda x: x + 1)(123) # 直接调用
res = lambda x: x + 1  # 命名调用
print(res(123))

3.4 应用场景

匿名函数通常都需要配合其他函数一起使用 用于减少代码

4. 重要内置函数

4.1 max() 求最大值  min() 求最小值 

1. 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)  # 2123432

2. max 字典使用  匿名集合内置函数使用

dic = {
    'jason': 100,
    'aj': 123,
    'Bason': 9999,
    'zero': 888
}
print(max(dic))

运行代码返回的 zero  ,而字典中Bason 的数据才是最大,什么原因?

字典参于for 循环只能获取k ,运行图中代码 ,只是对k值进行比较 ,字符串比较,比较首字母 ,而数值是ASCII码

A-Z 为 65-90     a-z 为 97-122

由代码看出可知  z > j > a >B  所有运行结果返回zero, 怎么比较字典的值?

运用匿名函数数

dic = {
    'jason': 100,
    'aj': 123,
    'Bason': 9999,
    'zero': 888
}
def index(k):
    return dic.get(k)
res = max(dic, key=index)
print(res)  # Bason

# 代码精简
res = max(dic, key=lambda k: dic.get(k))

3. min() 最小值 和max() 用法一样

4.2 map() 映射

l1 = [11, 22, 33, 44, 55, 66]
# 需求:将列表中所有的数据值自增20

1. 方式1 :for循环

l2 = []
for i in l1:
    l2.append(i+20)
print(l2)  # [31, 42, 53, 64, 75, 86]

2. 方式2 :列表生成

l2 = [ i + 20 for i in l1]
print(l2)

3. 方式3 :map函数

res = map(lambda x: x + 20, l1)
print(res)  # <map object at 0x000001E5F99B0130>

 运行结果返回  <map object at 0x000001E5F99B0130>?还得需要定义列表

print(list(res))

4. 方式4:函数

def index(a):
    return a + 20
res = map(index, l1)
print(list(res))

4.3 filter() 过滤

l1 = ['jason', 'kevin', 'oscar', 'tony']
# 需求:移除数据值里面的jason

1. 方式1:for 循环 

l2 = []
for i in l1:
    if i != 'jason':
        l2.append(i)
print(l2)

2. 方式2:列表生成式

l2 = [i for i in l1 if i != 'jason']
print(l2)

3. 方式3:filter

res = filter(lambda a: a != 'jason', l1)
print(res)  # <filter object at 0x00000195F21E6C70>
print(list(res))  # ['kevin', 'oscar', 'tony'] 需要定义

 4. 方式4:函数

def index(a):
    return a != 'jason'
res = filter(index, l1)
print(list(res))

4.4 reduce() 累加和

l2 = [1, 2, 3]
# 需求:求列表中所有数据值的和

1. 方式1:for 循环

count = 0
for i in l2:
    count += i
print(count)

2. 方式2:sum()

res = sum(l2)
print(res)

3. 方式3:reduce()

from functools import reduce
res = reduce(lambda x, y: x + y, l2)
print(res)

4.5 zip() 拉链(连接)

# 结合成小元组
n1 = [1, 2, 3] n2 = ['jason', 'kevin', 'oscar']

1. zip() 方法

res = zip(n1, n2)
print(res)  # <zip object at 0x000002A9E38C7F40>
print(list(res))

 2. 扩展 1一一对应

n1 = [1, 2, 3, 4]
n2 = [5, 6, 7, 8]
n3 = 'jack'
res = zip(n1, n2, n3)
print(list(res))

 3. 扩展2 不一一对应 返回最小的个数

n1 = [1, 2, 3, 4, 5, 6, 7]
n2 = [5, 6, 7, 8]
n3 = 'jason'
res = zip(n1, n2, n3)
print(list(res))

 作业

1. 多层装饰器

装饰器是修改其他函数功能的函数吗,有助于代码更简洁,不不改变被装饰对象原有的 ‘调用方式’ 和 ‘内部代码’的情况下给被装饰对象添加新的功能

多层装饰器 就是有多个装饰器,而且多层装饰器是从下往上依次执行,被装饰的函数名所指代的函数一直被装饰器中的内层函数所指代的,而多层装饰器中就有多层语法糖,多层语法糖的解读顺序时先看语法糖有几个,然后再由下往上看,遇到最后一个才会使用相同的变量名传给装饰器函数使用,也就是说运行了多个装饰器,也运行了变量名的更换,之后才会调用函数体内部代码

2. 有参装饰器

有参装饰器是为装饰器提供多样功能的选择,而由于语法糖的限制,outter函数只能有一个参数,该参数只能被用来接收被装饰对象的地址,而需要多个形参,就只能再加个装饰器,可以传多个参数,就是有参装饰器

 

标签:内置,20,函数,python,res,list,print,jason,name
来源: https://www.cnblogs.com/cainiaozhy/p/16454747.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有