ホーム 戻る
小舟が一艘 夏空に 夢見心地にたゆたいて ある7月の昼下がり
不思議の国にまどろみて 日々のまにまに夢を見る 逝く夏のように夢を見る
流れに沿って流されて 金の光にたゆたいて 人生、それはただの夢 (キヤロル) " 恋人の誘いの歌
20131015改訂中
第15章 基本的なスクリプト
チュートリアル日本語日本語訳 PDF
リファレンス日本語http://psyto.s26.xrea.com/python/PQR2.4/PQR2.4.ja.html#Frontstuff
(1) 球体の体積を求める ユーザ定義関数
from math import *
>>> def v(r): print('球の面積', 4 * pi * r * r * r / 3) 公式
>>> v(3) 球の面積 113.097335529
def v(r): return 4 * pi *r *r *r / 3 v関数の名前、r仮引数 >>> v(3) 実引数を入れて実行 113.09733552923255
(2)リスト内包表記(式)
>>> clist = [] >>> for s in 'python': clist.append(ord(s))
>>> clist [112, 121, 116, 104, 111, 110] pythonのコードが示されている
>>> clist = [ord(s) for s in 'python'] #リストコンプリヘンジョン 内包表記 結果としてリストが返る >>> clist #’python’繰り返し変数 ord() 関数 戻り値が要素のリスト
[112, 121, 116, 104, 111, 110]
>>> sq = [x **2 for x in range(10)] # x二乗のリストを作る >>> sq [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> sq = [(x, x**2) for x in range(5)] >>> sq
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)] #タブルのリストを作る
>>> val = 10 >>> [x for x in range(1, val) if val % x ==0] [1, 2, 5]
>>> l = [ x +y for x in (1,2,3) for y in (100,200,300)] #forを複数記述
>>> l
[101, 201, 301, 102, 202, 302, 103, 203, 303]
>>> for x in (1,2,3): #内包表記を使用しないとき for y in (100,200,300): l.append(x + y)
>>> l
[101, 201, 301, 102, 202, 302, 103, 203, 303]
(3)イテレータ
コンテナの次の要素を返すnextメソッドとiterメソッドを実装したコンテナオブジェクト
>>> i = iter("abc") >>> next(i) 'a' >>> next(i) 'b' >>> next(i) 'c' >>> next(i) Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> next(i) StopIteration >>>
複数の要素をもったデータを順番に取り出す汎用的な方法。 インデクスを持たないデータにも使う。forループはリストのようなシーケン ス添えてつくる。
1.次の要素を取り出す 2.要素が終わったかどうか判別する
サイズの大きなデータを扱う。ループと一緒に使う。 次の要素を取り出す処理(next()関数) 要素が終わったかどうかを判断する処理(例外処理) 処理の対象オブジェクト リスト:順番を持つ ファイル:文字列改行をもつ イテレート可能:iter()
イテレータ:複数の要素をもったオブジェクト・データを順番に取り出し処 理する手段 コレクション:複数の値をもったオブジェクトの集まり イテレート可能オブジェクト
iter()関数
next()関数 次の要素を取り出す関数
>>> i = iter([1,2,3,4,5]) >>> next(i)
1
>>> next(i)
2
>>> next(i)
3
>>> next(i) 4
>>> next(i) 5
>>> next(i) Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> next(i) StopIteration
>>> acc={'現金':101,'小口現金':102,'当座預金':103} 辞書定義 >>> for key in acc: 辞書のキーでループ print(key,)
現金 当座預金 小口現金
pythonのコレクションはすべてイテレート可能
p=1 for i in [1,2,4,8]: p *=i print(p)
1 2 8 64
(4)ジェネレータ
一連の要素を返す関数を実装する
反復可能なオブジェクト
all() すべて反復可能であれば True
any() 反復可能な要素があれば True
x =[-2,9,7,-4,3] print(all(x),any(x),len(x),min(x),max(x),sum(x)) x.append(0) print(all(x),any(x),len(x),min(x),max(x),sum(x))
True True 5 -4 9 13 False True 6 -4 9 13
range()関数
整数リスト、タブルの作成と for ・・・・ in のループカウンタを
提供する。
print(list(range(5)),list(range(9,14)),tuple(range(10,-11,-5)))
[0, 1, 2, 3, 4] [9, 10, 11, 12, 13] (10, 5, 0, -5, -10)
rsange()関数
for t in zip(range(4),range(0,10,2),range(1,10,2)): print(t)
(0, 0, 1) (1, 2, 3) (2, 4, 5) (3, 6, 7)
for t in zip(range(5),range(0,10,2),range(1,10,2)): print(t)
(0, 0, 1) (1, 2, 3) (2, 4, 5) (3, 6, 7) (4, 8, 9)
for t in zip(range(2),range(0,10,2),range(1,10,2)): print(t)
(0, 0, 1) (1, 2, 3)
print(list(range(0,3))) print(list(range(10,13))) import itertools print(list(itertools.chain(range(0,3),range(10,13)))) print(list(zip(range(0,3),range(10,13)))) print(list(zip(range(0,3),range(10,14))))
[0, 1, 2] [10, 11, 12]
[0, 1, 2, 10, 11, 12] [(0, 10), (1, 11), (2, 12)] [(0, 10), (1, 11), (2, 12)] >>>
ジェネレータ(内部イテレータ)
内部にyield文がある関数 ジェネレータ関数を呼び出すとイテレータオブジェクトが返ってくる。
>>> fib=fibonacci() >>> next(fib) 1 >>> next(fib) 1 >>> next(fib) 2 >>> [next(fib) for i in range(10)] [3, 5, 8, 13, 21, 34, 55, 89, 144, 233] >>>
ジェネレータを呼び出すたびに、毎回数列の次の要素を生成する。
イテレーションの処理を簡単に定義できる。
>>> nest=[[1,2],[3,4],[5,6]] >>> def flat(nest): for sub in nest: for elm in sub: yield elm
>>> for num in flat(nest): print(num)
1 2 3 4 5 6 >>> list(flat(nest)) [1, 2, 3, 4, 5, 6]
反復子iterator コンテナオブジェクトの多くはfor文でループできる。for文はコンテナオ ブジェクトにiter()をコールする。
>>> for elm in [1,2,3]: print (elm)
1 2 3
>>> for key in {'one':1,'tow':2}: print(key)
tow one
>>> for char in '123': print(char)
1 2 3
>>> s ='abc' >>> it = iter(s) >>> it
<str_iterator object at 0x0143B070>
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it) 'c'
>>> next(it)
Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> next(it) StopIteration
ジエネレータ 反復子を作る。データを返す部分でyieldを使う。
def reverse(data): for index in range(len(data)-1,-1,-1): yield data [index]
>>> for char in reverse('kawasaki'): ... print(char) ... i k a s a w a k
(5)入れ子の関数
def pc(a,b,c): def pc(x,total=a+b+c): return(x*100)/total print("percentage are :",pc(a),pc(b),pc(c))
pc(12.0,13.0,14.0)
percentage are : 30.7692307692 33.3333333333 35.8974358974
感覚と既知なるものに背を向けて、洞窟の外へ、遠い記憶の内奥へと赴かなければならない。その困難な遡行の果てに、いつか「突如として、あたかも一つの火が燃え移って別の光明が点じられるようにして」真の知がわれわれの魂のうちに点ることを期しながら
(対話という思想 プラトンの方法序説・内山勝利著。岩波書店)
|