zoukankan      html  css  js  c++  java
  • 三元表达式与生成式

    一 三元表达式

    ​ 三元表达式是 python 为我们提供的一种简化代码的解决方案,语法如下:

    res = 条件成立时要返回的值  if  条件  else  条件不成立时要返回的值
    

    具体案列:

    res = 1 if 1 > 2 else 2
    print(res) #2
    

    针对以下需求修改成三元表达式:

    普通格式:

    def func(x,y):
      	if x > y:
          return x
        else:
          return y
       
    res = func(1,2)
    print(res)#2
    

    三元表示式格式:

    def func(x, y):
        res = x if x > y else y
        return res
    res = func(5, 2)
    print(res)  # 5
    

    二 列表生成式

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

    l = ['alex_dsb', 'egon', 'wxx_dsb', 'lxx_dsb']
    # new_l = []
    # for name in l:
    #     if name.endswith('dsb'):
    #         new_l.append(name)
    # print(new_l) #['alex_dsb', 'wxx_dsb', 'lxx_dsb']
    
    #列表生成式
    new_l = [name for name in l if name.endswith('dsb')]
    print(new_l) #['alex_dsb', 'wxx_dsb', 'lxx_dsb']
    
    #把所有小写字母都变成大写
    new_l = [name.upper() for name in l]
    print(new_l) #['ALEX_DSB', 'EGON', 'WXX_DSB', 'LXX_DSB']
    
    #去掉后缀_dsb
    new_l = [name.strip('_dsb') for name in l]
    print(new_l) #['alex', 'egon', 'wxx', 'lxx']
    

    三 字典生成式

    列表生成式是python 为我们提供的一种简化代码的解决方案,用来快速生成字典

    #字典生成式
    keys = ['name', 'age', 'gender']
    dic = {key:None for key in keys}
    print(dic) #{'name': None, 'age': None, 'gender': None}
    
    #去掉 gender 关键字
    items = [('name', 'egon'),('age', 18), ('gender','female')]
    dic = {key:value for key, value in items if key != 'gender'}
    print(dic) #{'name': 'egon', 'age': 18}
    

    四 集合生成式

    #集合生成式
    keys = ['name', 'age', 'gender']
    set1 = {key for key in keys}
    print(set1,type(set1))  #{'gender', 'name', 'age'} <class 'set'>
    

    注:元组没有生成式(元组不可变)

    五 生成器生成式

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

    生成器表达式返回的是一个生成器对象

    #生成式生成器
    g = (i for i in range(7) if i>3)
    print(g) #<generator object <genexpr> at 0x10408fe08>
    #此刻g 内部一个值也没有
    
    print(next(g)) #4
    print(next(g)) #5
    print(next(g)) #6
    print(next(g)) #抛出异常
    

    如果我们要读取一个大的文件内容字符数,应该基于生成器表达式的方式完成

    ​ 原因:生成器相当于一个功能,占用的内存空间非常少

    #统计文件内容长度
    with open('a.txt', 'r', encoding='utf-8')as f:
        #方式一
        # res = 0
        # for line in f:
        #     res += len(line)
        # print(res)
        
        #方式二
        res = sum([len(line) for line in f]) #sum 底层就相当于 for 循环取值再依次相加
        print(res)
        #方式三:效率最高
        res = sum((len(line) for line in f)) #使用生成器对象,不会占用过多的内存空间
        print(res)
        #上述可以简写为如下形式:
        res = sum(len(line) for line in f)
        print(res)
    
    
  • 相关阅读:
    Java枚举和反射
    Java网络编程
    django 中文乱码问题
    chrome 开发人员工具
    js 编码问题
    js 复制内容到剪切板
    网页获取页面上选择的内容
    git命令
    Jquery和Javascript对象之间的转换
    Spring Data Elasticsearch
  • 原文地址:https://www.cnblogs.com/xy-han/p/12567196.html
Copyright © 2011-2022 走看看