博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.13 生成器
阅读量:4664 次
发布时间:2019-06-09

本文共 1746 字,大约阅读时间需要 5 分钟。

8.13 生成器

三元表达式

# 三元表达式/列表推导式/字典生成式 只是让你的代码更少了,但是逻辑没有变化# 三元表达式只支持双分支结构

普通表达式:

if dog_name == 'crazy_dog':    print('疯狂舔?')else:    print('溜了')

三元表达式:

print('疯狂舔?') if dog_name == 'crazy_dog' else print('666')

列表推导式

普通表达式:

lt = []for i in range(10):   lt.append(i**2)print(lt)

列表推导式

lt = [i ** 2 for i in range(10)]print(lt)

字典生成器

字典生成式一般与zip(拉链函数--》列表里面包了元组)连用

dic = {'a': 1, 'b': 2}new_dic = {k * 2: v ** 2 for k, v in dic.items()}print(new_dic)  # {'aa': 1, 'bb': 4}z = zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4])  # 压缩方法,Python解释器的内置方法for k,v in z:    print(k,v)'''a 1b 2c 3d 4'''dic = {k: v ** 2 for k, v in zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4])}  # 不能写这种代码print(dic)  # {'a': 1, 'b': 4, 'c': 9, 'd': 16}

生成器

自定义迭代器, 生成器就是迭代器(自己造出来的)

def func():    yield 456  # yield会使函数func()变成生成器对象,因此他就具有__iter__方法    print(789) # yield会停止函数,当运行下一次next才会继续运行下面的代码    yield 101112 # 一个yield对应一个next    print(131415)f = func()  # 生成器print(f)  # 
f_iter = f.__iter__()print(f_iter.__next__())print(f_iter.__next__())# yield的三个特性1. yield可以把函数变成生成器(自定制的迭代器对象,具有__iter__和__next__方法) 2. yield可以停止函数,再下一次next再次运行yield下面的代码3. 有n个yield生成器就有n个元素,就可以next n次, 第n+1次next会报错# return 的特性1. 返回值2. 终止函数

用生成器自定制一个range方法

range(10)

生成一个可迭代器对象 --- 》 我要把我的range函数变成一个可迭代对象(迭代器对象)

丢一个10进去,然后通过for循环的迭代next会丢出0,1,2,3,4,5,6,7,8,9

# 最笨的方法,def range(*args):    if len(args) == 2:        x = args[0]        y = args[1]        while True:            yield x            x+=1            if x == y:                break    if len(args) == 1:        x = args[0]        c = 0        while c< x:            yield c            c += 1    if len(args) == 3:        x = args[0]        y = args[1]        z = args[2]        while x

转载于:https://www.cnblogs.com/dadazunzhe/p/11348011.html

你可能感兴趣的文章
在C#中获取IronPthon2.7异常时的调用方法堆栈,调试使用。
查看>>
oracle解决显示数据的层次问题--实现数据缩进
查看>>
解决Undefined symbols for architecture x86_64: 报错 和 ld: warning: ld: warning: ignoring file警告...
查看>>
HackerRank(FP) - The Sums of Powers
查看>>
Python3+Selenium环境配置
查看>>
java两个时间相差多少天时分秒
查看>>
SVM学习笔记(一):libsvm参数说明(转)
查看>>
[CODEVS 3044] 矩形面积求并
查看>>
网易云短信
查看>>
edge box
查看>>
eetcode 之String to Integer (atoi)(28)
查看>>
递归读取文件夹下的文件
查看>>
CodeForces Round 200 Div2
查看>>
HDU-2032
查看>>
总结day6 ---- set集合,基本类型的相互转化,编码,数据类型总结,循环时候不要动列表或者字典,深浅copy...
查看>>
C++的Enum hack(转)
查看>>
【方案】去哪儿网徐磊:如何利用开源技术构建日处理130亿+的实时日志平台?...
查看>>
工作中遇到的人和事
查看>>
连接池的使用(一)
查看>>
HDU 1203 I NEED A OFFER!(0-1背包)
查看>>