学习笔记(21):第二章 程序设计与数据结构-Python的魔法功能,魅力之所在,让代码量更少 1...

立即学习:https://edu.csdn.net/course/play/25504/304703?utm_source=blogtoedu

d={'x':'A','y':"B",'z':'C'}
# 快速生成列表,需要定义Key和Value的变量
print([k + '=' + v for k,v in d.items()])

# 生成list[1,2,3,...10]

list(range(1,11)) # range(1,11)返回的是一个对象,把对象转为list需要把对象放到list中
print(list(range(1,11)))

# 生成[1*1,2*2,...10*10]列表

print([x*x for x in range(1,11)]) # 定义X变量为x*x,在定义一个for循环,x*x是列表汇总元素表达式的值,后面是列表

# 可用多个for循环将字符串拼接组成为新的字符串 'abc','123'
print([m + n for m in 'abc' for n in '123'])

print([m + n for m in 'a.b.c' for n in '123' if m != '. ']) # 过滤英文句号,还生成a1..c1 可以在表达式中做if判断

# 生成器

g = (x*x for x in range(10))
print(g) # yield方法并没有自动生成1-10的序列,而是得到一个生成器对象generator object

# 通过next方法得到generator生成器中的值,执行一次得到一次,generator保存的是算法,每次调用时会计算出下一个元素值,直到计算到最后一个元素
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# print(next(g)) # 直到最后没有数据可以输出时,会抛出数据异常StopIteration停止迭代

for n in g:
    print(n) # 使用for in会直接输出所有数,for循环调用的也是next函数

# yield生成
#生成斐波那契额数列1,1,2,3,5,8,后一个数永远是之前一个的合
def fib(max):
    n,a,b = 0,1,1
    while n <max:
        print(b) # 每次循环都会输出b,b就是每一个值,循环n+1次.max的意思是要输出几个数
        a,b = b, a+b
        n = n+1
    return 'done'
print(fib(6))

# 将斐波那契改为yiled函数,将输出关键字换成yield,return意思是告诉用户,数列输出完了
def fib(max):
    n,a,b = 0,1,1
    while n <max:
        yield b  # 此处yiled后变量不加括号,yield函数和return类似,此时,fib就不是函数而是生成器
        a,b = b, a+b
        n = n+1
    return 'done'

print(next(fib(6)))
print(next(fib(6)))
g = fib(6)  # yield 对象需要定义一个变量,否则调用pritn(text)时只会输出相同的第一次
print(next(g))
print(next(g))
print(next(g))

for n in g:
    print(n)
# 使用next方法,是不知道循环是什么时候结束的,因为调用一次生成一个值,用一种方法让代码不出错又能把对象都输出出来.

while True:
    try: # 主动抛异常,代码不出错
        x = next(g)
        print(x)
    except StopIteration as e: # stopIteration是大写
        print('没有数据了',e.value)
        break # 这样不会报错,终止代码,而会将无数据作为一个输出提示用户





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值