Python教程

【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函数只能有一个参数,该参数只能被用来接收被装饰对象的地址,而需要多个形参,就只能再加个装饰器,可以传多个参数,就是有参装饰器

 

这篇关于【python基础】第20回 三元 匿名 重要内置函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!