Python篇:高级特性

高级特性生成式与生成器列表生成式语法集合生成式和字典生成式集合生成式和字典生成式实例生成器概念作用创建方式使用方法特点迭代器闭包装饰器生成式与生成器列表生成式列表生成式就是一个用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。语法普通的语法格式:[exp for iter_var in iterable]带过滤功能语法格式:...
摘要由CSDN通过智能技术生成

生成式与生成器

列表生成式

列表生成式就是一个用来生成列表的特定语法形式的表达式。
是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。

语法

普通的语法格式:[exp for iter_var in iterable]

带过滤功能语法格式: [exp for iter_var in iterable if_exp]

循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]

注意:

# 如果列表生成式和三元运算符结合在一起, if语句放前面;
nums = [num ** 2 if num % 3 == 0 else num ** 3 for num in range(1, 101, 2)]
print(nums)

集合生成式和字典生成式

eg:
在这里插入图片描述

集合生成式和字典生成式实例

1). 将字典的key值和value值调换;

d = {value, key for key, value in dDict.items()}

2). 大小写计数合并 : 已知字典{‘A’:10, ‘b’:5, ‘a’:2}, 合并后为{‘a’:12, ‘b’:5}
key值最终全部为小写.

d = {
    "A": 10,
    "b": 5,
    "a": 2
}
dDict = {key.lower(): (d.get(key.lower(), 0) + d.get(key.upper(), 0)) for key, value in d.items()}

print(dDict)

在这里插入图片描述

生成器

概念

在Python中,一边循环一边计算的机制,称为生成器:Generator。

作用

一般情况下我们不需要使用生成器,只有当我们因为性能限制才需要用到,比如我们使用python读取一
个10g的文件,如果一次性将10g的文件加载到内存处理的话(read方法),内存肯定会溢出;这里如果可以
使用生成器把读写交叉处理进行,比如使用(readline和readlines)就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间.

创建方式

第一种方法: 列表生成式的改写。 []改成()

nums = (i**2 for i in range(5))
print(nums)  
print(type(nums))  

在这里插入图片描述
第一种方法: yield关键字。

使用方法

通过for循环, 依次计算并生成每一个元素。

nums = (i**2 for i in range(5))
for num in nums:
    print(num)

在这里插入图片描述
如果要一个一个打印出来,可以通过next()函数获得生成器的下一个返回值。
在这里插入图片描述
注:
超出生成器生成对象的长度会抛出异常

特点

  • 节约内存
  • 迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的。

案例

生产者消费者模型
cacheList = []
cacheListMaxLenght = 5


def isFull(lList):
    return len(lList) == cacheListMaxLenght


def producer():
    while True:
        if not isFull(cacheList):
            print('正在生产......')
            cacheList.insert(0, 'lllll')
        else:
            print('供过于求!!!')
            yield


def consumer(name):
    print('%s  准备购买游戏机......' % name)
    while True:
        i = yield
        print('%s  购买成功!!!' % i)


def main():
    p = prod
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值