関数を作って保存

今日もPythonをいろいろいじってみた。内容は前回と同じで関数の定義ばかりだけど、これがまた面白い。たとえばlogの計算をちょっとした表にして表すプログラムを作ったとする。

>>> x = 1.0
>>> while x <= 5:
	print x, '\t', math.log(x)
	x = x + 1

	
1.0 	0.0
2.0 	0.69314718056
3.0 	1.09861228867
4.0 	1.38629436112
5.0 	1.60943791243

いままでのようなプログラミング態度では書いたプログラムはもう用なしで、ゴミ箱直行とまではいかないけど、ずっと放置状態になっていた。でもPythonなら書き上げたプログラムをまたいつでも呼び出したり、再利用したりすることが簡単にできる(こういうことってJavaやCでもできたのかね?)。もちろんそのまんまプログラムを呼び出してはつまらないし、利用価値も余りないから、元のプログラムよりももっと一般化した形で保存しておくと役に立つ。


上のプログラムなら、まず関数化して、出力が5行分に限られているところを一般化してみるとよさそう。そうすると、関数名は自然対数のリストだからlogeList(n)と命名して、

#関数化
def logeList(n):
	x=1.0
	while x <= n:
		print x, '\t', math.log(x)
		x = x + 1

これでいつでも呼び出せる(おもしろい!)

>>> logeList(3)
1.0 	0.0
2.0 	0.69314718056
3.0 	1.09861228867


もっと一般化してみると、上のプログラムはスタート数値がx=1.0、数字の間隔が1.0だから、ここを自分でいじれるように改造してみると、

>>> def logeList2(s,n,i):
         #始めの数値をs,個数をn,数値間隔をiとおく
	while s <= n:
		print s, '\t', math.log(s)
		s = s + i

呼び出す

>>> logeList(0.1,10,0.1)
0.1 	-2.30258509299
0.2 	-1.60943791243
0.3 	-1.20397280433
      ・・・
9.8 	2.28238238568
9.9 	2.29253475714
10.0 	2.30258509299


うん、ぐうれいとっ!


こういう風に少しずつPythonの勉強をしているけどやっぱり楽しいと思う。なんか(,,゚Д゚)「アルゴリズムは全て関数化してやるぜ!」的な気分になってくる。


他にも、アルゴリズムを関数化するだけじゃなくてコマンドライン(Python Shell)を自分用に使いやすくすることもできる。たとえばPythonではsinやcosを使うときmathモジュールをimportしてから、math.sin(Value), math.cos(Value)で表現するけど、いちいちmathを書くのがちょっとめんどくさい。なので自分用にいじってmathがなくてもsin(Value),cos(Value)を扱えるようにすることもできるし、実際にそうした。ついでに自然対数logや常用対数log10もmathが必要だから、それを使わないでいいようにしたし、底が2のlog2がなかったから自分で定義した。


いろいろ作ってみた関数


ところで作った関数は保存しないと消えちゃって再利用ができないからちゃんと保存しなきゃならない。方法はまだよく分からないけど、自分の場合は上の画像のように、名前を付けて保存したあと「Run→Run Module」で作った関数を利用できるようになった。ちなみに保存するファイルには文の先頭に>>>を入れないみたい。だから対話モードで作ってみた関数をそのままコピペして関数用ファイルにぺたぺた貼り付けるべし。そして関数用ファイルからRun Moduleでおk。




なんか本気でPythonにはまってきたし、オライリーの本とか買った方がいいのかなと思う今日この頃。でもオライリー本は大概高いんだよね・・・(´・ω・`)