zoukankan      html  css  js  c++  java
  • 零基础学习python_生成器(49课)

      一个生成器函数的定义很像一个普通的函数,除了当它要生成一个值的时候,使用yield关键字而不是return。如果一个def的主体包含yield,这个函数会自动变成一个生成器(即使它包含一个return)。除了以上内容,创建一个生成器没有什么多余步骤了。

      生成器函数返回生成器的迭代器。这可能是你最后一次见到“生成器的迭代器”这个术语了, 因为它们通常就被称作“生成器”。要注意的是生成器就是一类特殊的迭代器。作为一个迭代器,生成器必须要定义一些方法(method),其中一个就是__next__()。如同迭代器一样,我们可以使用next()函数来获取下一个值。

      为了从生成器获取下一个值,我们使用next()函数,就像对付迭代器一样。

      yield就是专门给生成器用的return。

       这里有个名词叫“协同程序”,这个就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始,Python是通过生成器来实现类似协同程序的概念,生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后在再次调用它的时候,从上次暂停的位置继续执行下去。

    这里说一下列表、字典、集合的推导式

    • 列表推导式:

    • 字典推导式:(注意有“:”)

    • 集合推导式:(无:号)

    • 生成器推导式:(圆括号括起来的就是)

     

    生成器推导式如果作为函数的参数就不需要加()也可以。看下面实例:

    上面的情况加不加括号都可以

    题目:10以内的素数之和是:2+3+5+7 = 17 ,呢么请编写程序,计算200000以内的素数之和?

    结果是:142913828922

    代码如下:

    import math
    
    def is_prime(number):
        if   number  > 1:
            if number == 2:
                return True
            if number % 2 == 0:
                return False
            for current in range(3, int(math.sqrt(number) + 1), 2):
                if number % current == 0:
                    return False
            return True
        return False 
    
    def get_primes(number):
        while True:
            if is_prime(number):
                yield number
            number += 1
    
    def solve():
        total = 2
        for next_prime in get_primes(3):
            if next_prime < 2000000:
                total += next_prime
            else:
                print(total)
                return
    
    if __name__ == '__main__':
        solve()
  • 相关阅读:
    数据库准入规则
    ubuntu go 开发环境搭建
    PHP 异步执行方式
    python 连接 hive数据库环境搭建
    Swift 发送邮件和附件
    python 爬取动态数据
    git 新建项目的一些操作
    php 爬取数据
    通过NGINX location实现一个域名访问多个项目
    Linux系统Web网站目录和文件安全权限设置
  • 原文地址:https://www.cnblogs.com/leixiaobai/p/8256890.html
Copyright © 2011-2022 走看看