python_bomb----函数高级特性(生成器)

迭代

可以通过 for 循环来遍历 list 或 tuple,这种遍历我们称为迭代(Iteration)
只要是可迭代对象,都可以迭代,比如字典
默认情况下,字典迭代的是key值
如何让判断一个类型是否可迭代

from collections import Iterable    #导入collections模块的Iterable类型判断方法
print(isinstance({'abc':1},Iterable))


True

列表生成式

Python 内置的非常简单却强大的可以用来创建 list的生成式

列表生成方法

  • for循环
#输出0~9之间偶数的平方
li= []
for i in range(0,10,2):
    li.append(i**2)
    
li
[0, 4, 16, 36, 64]
  • 列表生成式
print([i**2 for i in range(0,10,2)])
[0, 4, 16, 36, 64]

列表生成式相对循环语句,代码简洁

#找出1~100之间所有质数
#质数(prime number)又称素数,有无限个。
#质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

def isprime(num):
    for i in range(2, num):
        if num % i == 0:
            return False
    else:
        return True


val = int(input("请输入一个数:"))
print([i for i in range(2, val) if isprime(i)])


请输入一个数:100
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

图片描述

字典生成式

#合并大小写
#key值最终为小写

d1={'a':10,'b':3,'A':10,'B':8}

print({k.lower():d1.get(k.upper(),0)+d1.get(k.lower(),0)for k,v in d1.items()})

{'a': 20, 'b': 11, 'c': 13}

图片描述

生成器

通过列表生成式,我们可以直接创建一个列表,受到内存限制,列表容量肯定是有限的
创建一个包含 100 万个元素的列表,占用很大的存储空间

  • 生成器是什么?

在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的 list,从而节省大量的空间。在 Python 中,这种一边循环一边计算的机制,称为生成器(Generator)

读取生成器

  • next()
  • for循环
#Fibnonacci数列
#1,1,2,3,5,8,13,....

#yield:函数中带有yield,那么这个函数的返回值就是一个生成器
#如果要执行函数内容,需要调用next方法或者for循环
#当执行next方法时,遇到yield程序停止
#直到下一次next方法时,从上一次yiled停止的地方继续执行,遇到yeild停止
def fibnnonacci(num):   #num表示将来显示几个值
    a,b,count = 0,1,0   #count是已经显示过的次数
    while count<=num:
        yield b
        a,b = b,a+b
        count+=1
res = fibnnonacci(100)
print(next(res))
print(next(res))
print(next(res))
print(next(res))


1
1
2
3

Process finished with exit code 0

图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值