開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python (プログラミング言語)
Learning Python (Mark Lutz (著)、Oreilly & Associates Inc)のPART III.(Functions and Generators)、CHAPTER 20(Comprehensions and Generations)、Test Your Knowledge: Quizを解いてみる。
その他参考書籍
Test Your Knowledge: Quiz
コード(BBEdit)
sample.py
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
# 1.
# square bracktes -> list
# parentheses -> generator
l = list(range(10))
g = (x for x in range(10))
for x in [l, g]:
print(x, type(x))
# 2.
g = (x for x in range(10))
print(iter(g) is g)
# 3. generator functionにするにはyield文を使う
def f(n):
for x in range(n):
yield x
g = f(10)
for x in g:
print(x)
# 4. yield statementは状態を保持して値を返す
# (リストは最初に全ての要素を作成、generatorはその都度作成する。
# なのでgeneratorの方がメモリー効率はいい。速度はリストに劣る。
# 5. list comprehensionとmap関数を利用して同様の2つのリストを作成してみる
l1 = [x ** 2 for x in range(10)]
l2 = list(map(lambda x: x ** 2, range(10)))
print(l1, l2, sep='\n')
入出力結果(Terminal)
$ ./sample.py [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'> <generator object <genexpr> at 0x10416dbe0> <class 'generator'> True 0 1 2 3 4 5 6 7 8 9 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] $
0 コメント:
コメントを投稿