2014年3月19日水曜日

開発環境

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 コメント:

コメントを投稿