1. 程式人生 > >生成器(generator)是什麼,怎麼用,有什麼優點

生成器(generator)是什麼,怎麼用,有什麼優點

列印0~10000個數字:
1、生成一個列表n,再迴圈列印1-10000個數字,這樣做會佔用系統的記憶體;
n = [i in [i in rang(0, 10000)]
for i in n:
    print(i)
2、用下列生成器,就不用先生成列表,利用迴圈,每呼叫一次,就使用一次,不佔記憶體空間
def gen(max):
    n=0
    while n<=max:
	n+=1
	yield n

g = gen(10000)
就像使用迭代器一樣,使用返回值
for i in g:
    print(i)

print(next(g))
print(next(g))
print(next(g))

相關推薦

生成器generator是什麼怎麼什麼優點

列印0~10000個數字: 1、生成一個列表n,再迴圈列印1-10000個數字,這樣做會佔用系統的記憶體; n = [i in [i in rang(0, 10000)] for i in n:

修飾符@裝飾器decorator迭代器iterator生成器Generator的一些見解

       這三個方法,在Python裡的使用並不多,然而,各大網際網路公司還特別喜歡考這一方面的。以前因為不常用,有些忽視了這幾個方法,碰了幾次壁後,決心好好整理一番這三個方法(以下程式碼均在python3.6的環境下實驗):    

python學習-day6-生成器generator

expr 無法 color 循環調用 限制 10個 數列 例子 ner 一,列表生成式 ls = [i*i for i in range(10)]ls[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] ge = (i*i for i in range(

Python生成器Generator和yield用法詳解

通過列表生成式,我們可以直接建立一個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立一個包含100萬個元素的列表,不僅佔用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素佔用的空間都白白浪費了。 所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的

PHP 知識補全 —— 生成器 generator和協程的實現

先說一些廢話 PHP 5.5 以來,新的諸多特性又一次令 PHP 煥發新的光彩,雖然在本文寫的時候已是 PHP 7 alpha 2 釋出後的一段時間,但此時國內依舊是 php 5.3 的天下。不過我認為新的特性遲早會因為舊的版本的逐漸消失而變得越發重要,尤其是 PHP 7 的正式版出來後,因此本

[python] 生成器generator

背景: 通過列表生成式,我們可以直接建立一個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立一個包含100萬個元素的列表,不僅佔用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素佔用的空間都白白浪費了。 方案: 所以,如果列表元素可以按照某種演算法推算出來

Python的迭代器iterator生成器generator

前言: 迭代的意思是重複做一些事很多次-就像迴圈中那樣,for迴圈中對序列和字典進行迭代,但是實際上也能對其他的物件進行迭代:實現__iter__方法的物件。 迭代器 __iter__方法返回一個迭代器。所謂的迭代器就是具有next方法(方法不需要引數)的物件。在呼叫next方法時,

python生成器generator和列表生成式

列表生成式 list1 是一個可迭代的物件。當使用一個列表生成式來簡歷一個列表的時候,就建立了一個可迭代物件: <<<list1 = [x*x for x in range(1, 11)] <<<list1 [1, 4, 9, 16, 25, 36

python學習筆記——生成器generator

列表生成式可以簡潔的建立一個list,生成器可以建立一個演算法,通過迭代生成需要的元素 建立方法有兩種: 1.將列表生成式中[]換成() >>> g = (x*x for x in range(11)) >>> g <generat

不能錯過的分散式ID生成器Leaf 的一批!

>本文收錄在個人部落格:[www.chengxy-nds.top](http://www.chengxy-nds.top),技術資料共享,同進步 不瞭解分散式ID的同學,先行去看[《一口氣說出 9種 分散式ID生成方式,面試官有點懵了》](https://mp.weixin.qq.com/s?__biz=M

連Python產生器Generator的原理都解釋不了還敢說Python了5年?

      最近有很多學Python同學問我,Python Generator到底是什麼東西,如何理解和使用。Ok,現在就用這篇文章對Python Generator做一個敲骨瀝髓的深入解析。   為了更好地理解產生器(Generator),還需要掌握另外兩個東西:y

在Ubuntu14.04下安裝 ffmpeg-2.4.13處理視頻將視頻保存為圖片序列

ibm blog 提取 ext aac sta video images bmp 首先在 http://www.ffmpeg.org/olddownload.html 下載 ffmpeg-2.4.13.tar.bz2 ; 然後安裝 yasm 和 libx264: apt

單個硬盤20GBGPT分區表來安裝CENTOS7.4系統

size 硬盤 ext img 分區 nag 系統 添加 time 實驗:在wmware12虛擬環境中,單個硬盤(20GB)采用GPT分區表,來安裝CENTOS7.4系統 工具:centos7.4 ISO系統鏡像 1.1 在wmware裏設置從光驅ISO引導安裝系統1.

CSS特效7——單行居中多行居左超過兩行省略號

block lang overflow normal ips http init lin amp 單行居中,多行居左,超過兩行用省略號 <!DOCTYPE html> <html lang="en"> <head> <meta

spring-boot-2.0.3不一樣系列之源碼篇 - run方法之createApplicationContext絕對值得你看的地方

處理 gen 利用反射 mva 默認 .get war close -s 前言   此系列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麽事。如果大家對springboot的源碼有所研究,可以挑些自己感興趣或者對自己有

spring-boot-2.0.3不一樣系列之源碼篇 - run方法之prepareContext絕對值得你看的地方

release led 設置 get handler htm encoding 列表創建 splay 前言   此系列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麽事。如果大家對springboot的源碼有所研究,可

Spring Boot整合MyBatisMyBatis Generator

簡介 MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old J

Haskell 求解 ACM 競賽題1:HelloWorld!

找了一本用C語言編寫的ACM競賽教程,把其中的程式用 Haskell 重寫一遍,這可能是熟悉 Haskell 的最好辦法。首先我們看一看 Hello 程式如何實現。如果有 C 語言基礎,應該很容易理解 Haskell 程式碼。 Hello, world main = do

No.23 經典筆試題巨集來計算偏移量判斷大小端聯合體法指標法

寫一個巨集,計算結構體中某變數相對於首地址的偏移,並給出說明 判斷大小端 程式碼1: //寫一個巨集,計算結構體中某變數相對於首地址的偏移,並給出說明 //定義的這個巨集將結構體裡邊的變數的地址取出後再強轉成char型,然後進行相減。 //注意:&s ==

run方法之prepareEnvironment絕對值得你看的地方

前言   此係列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麼事。如果大家對springboot的原始碼有所研究,可以挑些自己感興趣或者對自己有幫助的看;但是如果大家沒有研究過springboot的原始碼,不知道springboot在啟動過程中做了些什