编程语言
首页 > 编程语言> > 【python基础】第20回 三元 匿名 重要内置函数

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

作者:互联网

本章内容概要

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