04_06、三元表达式、生成式、匿名函数

一、三元表达式

  三元表达式是针对简单if...else句式的便捷用法,可以减少代码书写量

  1、三元表达式格式

    res = a if 条件 else b

    res表示:如果满足条件返回a,否则返回b

  2、三元表达式嵌套

    res = a if 条件1 else (‘hello’ if 条件2 else ‘world’)

    res表示:如果满足条件1,返回a,否则执行(‘hello’ if 条件2 else ‘world’);

         ‘hello’ if 条件2 else ‘world’,如果满足条件2,返回‘hello’,否则返回‘world’

    三次嵌套、四次嵌套,都依次类推

  3、实际应用

# 让用户输入判断
cmd = input('username:').strip()
res = '帅哥' if cmd == 'ly' else 'dsb'
print(res)

二、列表生成式

    列表生成器是简单for循环在列表内使用的便捷方法,生成一个列表形式的表达式,可以减少代码书写量

    其他方式也可以实现,且更能满足多种条件下应用

    所以一般不使用列表生成式,了解即可

  1、传统方式:

# 现在有一个列表,要求给列表中的每个元素添加‘_dl’
l = ['ly', 'jason', 'tom']

new_list = []  # 定义一个空列表,用于改变后的新内容
for i in l:
    new_list.append(i + '_dl')  # 给l的每一个元素添加‘_dl’
print(new_list)

  2、列表生成式

    for循环条件下的列表生成式
    res = [i + '_dsb' for i in l]
# 现在有一个列表,要求给列表中的每个元素添加‘_dl’
l = ['ly', 'jason', 'tom']

new_list = []  # 定义一个空列表,用于改变后的新内容

res = [i + '_dsb' for i in l]
print(res)

    if...else条件下的列表生成式(列表生成式和三元表达式结合使用)

    res = [i + '_dsb' if i != 'jason' else i for i in l]
# 现在有一个列表,要求给列表中的每个元素添加‘_dl’,除了jason
l = ['ly', 'jason', 'tom']

new_list = []  # 定义一个空列表,用于改变后的新内容

res = [i + '_dsb' if i != 'jason' else i for i in l]
print(res)

三、字典生成式

  1、传统方式:

复制代码
# l1中的元素作为字典的k,l2中的元素作为字典的v
l1 = ['name', 'age', 'hobby']
l2 = ['ly', 18, 'music']

# 定义一个空字典
new_dict = {}
for i in range(len(l1)):  # 以l1的长度作为循环的范围,也就是0,1,2,3
    new_dict[l1[i]] = l2[i]

print(new_dict)
复制代码

  2、字典生成式

    补充知识点:enumerate枚举

 

复制代码
# l1中的元素作为字典的k,l2中的元素作为字典的v
l1 = ['name', 'age', 'hobby']
l2 = ['ly', 18, 'music']


# 补充:enumerate枚举

# 定义一个空字典
new_dict = {}
res = {l1[i]: l2[i] for i, j in enumerate(l1)}
print(res)  # 结果为{'name': 'ly', 'age': 18, 'hobby': 'music'}
复制代码

 补充:集合生成式同理,但是没有元组生成式,所谓的元组生成式其实是生成器,生成器也是自定义的迭代器

四、匿名函数

  1.定义

    指没有名字的函数

  2、格式

    lambda 参数:返回值

  3、实例对比

    1、非匿名函数得出一个数的平方

# 传统方式
# 这是一个得出平方的有参函数
def index(x):
    return x ** 2


print(index(3))
# 得出结果9

    2、匿名函数得出一个数的平方

      注意:匿名函数一般不单独使用,匿名函数跟内置函数结合使用才是常规做法

# 匿名函数
lambda x: x ** 2
# x是参数:x**2是返回值
print(lambda x: x ** 2)
# 返回<function <lambda> at 0x00000240273FBD08>
print((lambda x: x ** 2)(3))  # 写入实参,可以得到返回值
# 返回9,注意lambda x: x ** 2 和 实参3 都必须用括号括起来

  4、结合内置函数map使用

 

 

 

 

posted @   三三得九86  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示