zoukankan      html  css  js  c++  java
  • 三元表达式、推导式和生成器表达式

    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()方法做累加,所以直接会把生成器里面的值做累加,但是同一时刻内存中只有一个值(一行的长度的累加值)
    
  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/xcymn/p/14107784.html
Copyright © 2011-2022 走看看