• 三元表达式、推导式和生成器表达式


    1. 三元表达式

    三元表达式是python为我们提供的一种简化简单的流程控制的解决方案

    而且在简化代码的基础上,还不失代码的可读性

    1.1 语法

    # 条件成立时返回的值 if 条件 else 条件不成立时返回的值
    
    x if x > y else y
    # 如果x>y就执行x,否则执行y
    

    1.2 比大小

    需求 : 接收两个数字,返回较大的那个数

    # 不采用三元表达式
    def my_max(x,y):
        if x > y:
            return x
        else:
            return y
        
    # 采用三元表达式
    def my_max(x,y):
       return x if x > y else y
    

    应用场景 : 当遇到条件成立就执行什么,条件不成立就执行什么,像这种只有两种情况就可以用三元表达式简化代码

    2. 推导式

    2.1 列表推导式

    列表推导式是python为我们提供的一种简化代码的解决方案,用来快速生成列表,语法如下

    l = [ i for i in 可迭代对象 if 条件 ]
    
    # 内部执行顺序
    l = []
    for i in 可迭代对象:
        if 条件成立
        l.append(i)
    

    举个栗子 : 一条代码生成一个列表,包含0-100之间的所有偶数

    l = [ i for i in range(1,101) if i % 2 == 0 ]
    print(l)
    

    2.2 集合推导式

    集合推导式python为我们提供的一种简化代码的解决方案,用来快速生成集合,语法如下

    s = { i for i in 可迭代对象 if 条件 }
    
    # 内部执行顺序
    s = set()
    for i in 可迭代对象:
        if 条件成立
        l.add(i)
    

    举个栗子 : 一条代码生成一个集合,包含0-100之间的所有奇数

    s = { i for i in range(1,101) if i % 2 == 1 }
    print(s)
    

    2.3 字典推导式

    字典推导式python为我们提供的一种简化代码的解决方案,用来快速生成字典,语法如下

    dic = { k:v for k,v in 可迭代对象 if 条件 }
    
    # 内部执行顺序
    dic = {}
    for k,v in 可迭代对象:
        if 条件成立
        dic[k] = v
    

    举个栗子 : 一条代码生成一个字典,key是0-100之间的奇数,value是0-100之间的偶数

    dic = { k: k+1 for k in range(1,102) if k % 2 == 1}
    print(dic)
    

    3. 生成器表达式

    3.1 语法

    创建一个生成器对象有两种方式,一种是调用带yield关键字的函数,另一种就是生成器表达式,与列表生成式的

    语法格式相同,只需要将[]换成(),即:

    g = ( i for i in range(1,10) if i % == 2)
    print(g)          # 得到一个生成器,
    

    3.2 练习

    1. 题目统计demo.txt里面的字符个数
    # 以前的写法
    with open('demo.txt', mode='r', encoding="utf-8") as f:
        count = 0
        for line in f:
            count += len(line)
        print(count)
    
    # 生成器写法
    f = open('demo.txt', mode='r', encoding="utf-8")
    
    # 一行代码解决,这就是python的nb之处,但是这样写可读性不好
    total = sum((len(line) for line in f ))
    
    
    # 这句代码牛逼了,首先(len(line) for line in f)是没有运行的,但是会返回一个生成器,
    # sum这个内置函数,会把可迭代对象里面的值遍历即for循环,即调用next()方法做累加,所以直接会把生成器里面的值做累加,但是同一时刻内存中只有一个值(一行的长度的累加值)
    
  • 相关阅读:
    CentOS 6.5 伪分布式 安装 hadoop 2.6.0
    单例模式的思想简介
    最有二叉树 哈夫曼树
    二叉树2
    二叉树1
    栈与队列
    线性表
    字符串模式匹配KMP算法
    数据结构(四) 查找 排序
    数据结构(三) 图
  • 原文地址:https://www.cnblogs.com/xcymn/p/14107784.html
Copyright © 2020-2023  润新知