2009年10月24日土曜日

リスト操作 sort

これは、使えますね!!

>>> list =[["100/1", 105, 105, "Active"],
... ["100/2", 104, 104, "Non-Active"],
... ["100/1", 105, 105, "Non-Active"],
... ["100/2", 103, 102, "Active"],
... ["100/5", 104, 104, "Non-Active"]]
>>> list.sort()
>>> list
[['100/1', 105, 105, 'Active'], ['100/1', 105, 105, 'Non-Active'], ['100/2', 103, 102, 'Active'], ['
100/2', 104, 104, 'Non-Active'], ['100/5', 104, 104, 'Non-Active']]
>>>
こちらのブログが詳しいです。

リスト操作 enumerate

moji = ["a", "b", "c", "d", "e"]
>>> moji
['a', 'b', 'c', 'd', 'e']

for i,v in enumerate(moji):
print i, v
0 a
1 b
2 c
3 d
4 e


for i, v in enumerate(moji):
index_moji.append("%d, %s" % (i, v))
>>> index_moji
['0, a', '1, b', '2, c', '3, d', '4, e']


for i, v in enumerate(moji):
a = ["%d, %s" % (i, v)]
index_moji.append(a)
>>> index_moji
[['0, a'], ['1, b'], ['2, c'], ['3, d'], ['4, e']]

for i, v in enumerate(moji):
a = [i, v]
index_moji.append(a)
>>> index_moji
[[0, 'a'],[1, 'b'], [2, 'c'], [3, 'd'], [4, 'e']]

>>> moji
['a', 'b', 'c', 'd', 'e']

>>> index_moji
[[0, 'a'],[1, 'b'], [2, 'c'], [3, 'd'], [4, 'e']]

>>> len(moji)
5

>>> len(index_moji)
5


GUI Builder

Tk, WxPython などに、VC++のようなGUIを作るツールがある。GUI Builder とか RADツール と呼ぶらしい。 BOA以外にはないのかなぁ? 

2009年10月23日金曜日

クラスの引数として、インスタンスを使う

クラスで構成されるPythonで、既存のクラスの再利用を考えると、クラスにメソッドを作り、その引数として、インスタンスを利用できるようになると、便利です。 以下のように、クラスTest1のインスタンスtest1を、クラスTest2の引数として使ってみる。

#クラスTest1のインスタンス test1には、アトリビュートmojiに "moji が入っている。
class Test1(object):
def __init__(self):
self.moji ="moji"
>>> test1 = Test1()
>>> print test1.moji
moji

#クラスの引数は、object. 使用するメソッドには、引数として インスタンス test1を入れる。
class Test2(object):
def __init__(self, test1):
self.test1 = test1
print test1.moji
print self.test1.moji

#インスタンスtest2 を作るときに、クラスにインスタンスtest1 を代入すると
>>> test2 = Test2(test1)
moji
moji

#もっと一般化すると, メソッドの引数を、、、、


class Test2(object):
def __init__(self, item):
self.item = test1
print self.item.moji

>>> test2 = Test2(test1)
moji

#もっと一般化すると, メソッドの引数を、、、、
class Test2(object):
def show(self,item):
self.item = test1
print self.item.moji
>>> test2 = Test2()
>>> test2.show(test1)
moji

#もっと一般化して、アプリケーションっぽく、、、これで使えるね。
class Test2(object):
def input(self,item):
self.item = test1
def show(self):
print self.item.moji
>>> test2 = Test2()
>>> test2.input(test1)
>>> test2.show()
moji



2009年10月18日日曜日

リスト操作 append, insert, del, map

リスト操作は、append だけじゃなくて、

insert 任意の場所に、要素を入れる。
del インデックスを指定して、その要素を削除。
map リストの要素に、一括処理を行う。 (なんか、使えそう。。)
時間があるとでも、まとめましょう。

ここは、まとまってますね。

ljust, rjust, center, zfill

便利そうな 文字列のメソッド

rjust 引数のLengthの文字列にして、右寄せにする。左はスペースで埋める
ljust, center は、左寄せ、中央寄せ

>>> "abcd".rjust(8)
' abcd'
>>> "abcd".ljust(8)
'abcd '
>>> "abcd".center(8)
' abcd '

zfill は、左寄せにして、"0”で埋める。 これは使えるかも。
>>> "abcd".zfill(8)
'0000abcd'
>>>


ショートカットキーを作る。

Pythonで、クラスの各メソッドに対して、ショートカットキーをつける。Bindを使う。

http://www.python.jp/pipermail/python-ml-jp/2002-October/001919.html

スペース区切りの文字列をリスト化。文字列を検索し、そのインデックスを返す。

やりたいこと
(1)文字列(1行)に、特定の単語Aが入っているかを確認する。
(2)単語Aの場所を探す
(3)単語Aにスペース区切りで続く、単語B,C,D,E,Fを取得したい。

note: いくつかのWebによると、正規表現より文字列メソッド(string module)の方が、高速だそうです。

(1) 文字列に、単語が含まれているか? → 文字列メソッド find

find( sub[, start[, end]])
文字列中の領域 [start, end] に sub が含まれる場合、 その最小のインデクスを返します。

>>> moji = "xxx xxxx xxx@ 1 2 3 44 555 xxx xxx"
>>> moji.find("xxx@")
9

http://www.python.jp/doc/2.5/lib/string-methods.html

(2) スペース区切りの文字列をリストにする → 文字列メソッド split

split( [sep [,maxsplit]])
sep を単語の境界として文字列を単語に分割し、分割された単語 からなるリストを返します。

>>> mojilist = moji.split()
>>> mojilist
['xxx', 'xxxx', 'xxx@', '1', '2', '3', '44', '555', 'xxx', 'xxx']

http://d.hatena.ne.jp/n00dle/20090705/1246726299
http://tibet.que.ne.jp/otani/2004python/python12.html

(3) リスト内の要素(文字列)のIndexの取得 -- 文字列メソッド index

リストに要素の検索だけなら in

>>> mojilist
['xxx', 'xxxx', 'xxx@', '1', '2', '3', '44', '555', 'xxx', 'xxx']
>>> "xxx@" in mojilist
True

文字列の場所(Index)の取得
>>> mojilist.index("xxx@")
2

(3) xxx@ に続く5個の文字列(要素)の取得

>>> mojilist[2+1:2+6]
['1', '2', '3', '44', '555']

http://d.hatena.ne.jp/yumimue/20071205/1196839438


あと、splitlines は、小さなファイルを解析する場合、便利そうです。たとえば、
1. テキストファイルを、1行ごとにリスト化
2. リストの要素を、スペース区切りにリスト化
3. リストの要素を、indexで検索

splitlines( [keepends])
文字列を改行部分で分解し、各行からなるリストを返します。

http://www.python.jp/doc/2.5/lib/string-methods.html

2009年10月17日土曜日

Apple Keynote

アップルの基調演説 Keynoteを見るのは大好きだ。アップルのプレゼント言うよりかは、スティーブ・ジョブズのプレゼンです。1984年のジョブズのKeynote、今から考えても、新しさを感じる。55年生まれのジョブズは、当時29才、、、、 僕も少しでも彼を見習って、頑張らなきゃっておもっちゃいます。


Dyson's Bladeless Fan

ダイソンの新しいプロダクト。これ、ハネなし扇風機です。さすが、デザインは、ダイソンですね。でも、ダイソンは、あまり騒音を気にしないようです、掃除機も含め。 電源を入れるところは、パソコンの電源だと思うくらい、かっこいいのですが。


ダイソン創業者、ジェームス・ダイソンのプレゼン ちなみに、Sir James Dysonと名前にSirが付いているので調べたら、ビジネスに成功して、ナイトの称号を得たらしいです。
http://media.excite.co.jp/ism/138/

Gadget Inspectors ... ついでに、英語の勉強に


ちょっと 騒音が大きいような、、、日本の熱帯夜で、寝室に置いたら、寝れるのかなぁ?

2009年10月16日金曜日

2009年10月12日月曜日

def __iadd__(self, xx) の戻り値self

みんなのPythonで、 特殊メソッド __iadd__ をあるクラスでオーバーライド(処理の内容を変更)するサンプルがあった。でも、なぜ、メソッド __iadd__ に、return self が必要なのだろう。

まず、Pythonでは、通常の演算子 +, - += は、以下のような特殊メソッドで処理されている。(らしい)
それらを、オーバーライドするから、return self が必要なのだろう。 iaddは、自分自身を戻す。なんかイメージはできるけど、具体的に説明できない。 ちょっとの間は、「おまじない」として割り切ろう。

class Klass(object):

# 「+」演算子
def __add__(self, *args):
print '__add__'
print args

# 「-」演算子
def __del__(self, *args):
print '__del__'
print args

# 「+=」演算子
def __iadd__(self, *args):
print '__iadd__'
print args
return self

詳しくは、ここに書いてあります。

2009年10月10日土曜日

10月 イベント

オクトーバーフェスタ -- 横浜 赤レンガ

韓国料理

ソナム、ソング -- 恵比寿、大門、東中野

うさぎ庵 -- 菊名

Onenote 2007

とうとう買ってしまった。OneNote 2007
会社のPCがWindows VISTAになったのを記念して、Onenoteを2003から2007にアップグレード。Onenote2007をamazonで購入。家電量販店よりぜんぜん安かった。Onenote2003をインストールして以来、これなしでは、お仕事できない状態です。
Onenoteって あくまで、Onenote2003の感想だけど
  • MS製品とは思えない軽さ。(もっと軽くして欲しいけど)
  • Tips集などに使ってます。日々 気づいた事など、ちょっとしたことをメモっておける。
  • GTDツールとして、良い。アクションポイントなどのタスクのマーカーをつけて、後で、検索リストを作ってくれる。

明日、Onenote2007を早速インストールしてみよう!!


2009年10月9日金曜日

PythonとWindowアプリケーションの連携

ファイルをアプリケーションから開く場合、ShellExecute を使うらしい。
・ファイルlpszFnをノートパッドで開く例ShellExecute(NULL,NULL,"notepad",lpszFn,NULL,SW_SHOWNORMAL);
http://www.sm.rim.or.jp/~shishido/shelle.html より


Pythonからも、Win32API関連のモジュールが用意されている。
・import win32gui,win32api,win32con
http://d.hatena.ne.jp/Fio/20081105/p1 より

PythonとWindowアプリケーションの連携が取れそうです。

2009年10月8日木曜日

Python チュートリアル

Pythonのチュートリアルを集めてみた。みんなのPythonが終了したら、読んでみる予定です。

サルでもわかる モンキーPython -- Netsphere Laboratories

インスタント・パイソン -- www.python.jp

インスタント・ハッキング -- www.python.jp

PythonプログラミングTips -- www.python.jp

お気楽 Python/Tkinter 入門

紫藤さんのページ -- PythonとTkinterの説明のサンプルが素晴らしい。

Cafe de Paison -- Python, Tkinter と PyQt の説明が

GUI Programming with Tkinter

ぐうたらの部屋 プログラミング部 -- FTP, コマンド系、numpy, matplotlibも


良いもの。悪いもの。-- numpyや matplotlibなど
-- グラフの中に、グラフを書く。axesの意味が分かる例。

100 -- numpy, Tkinter, matplotlib など

ひきメモ -- 文字列操作

PyDev を使い始める。

Python(x,y)と一緒にインストールされた PyDevを使ってみる。EclipseのIDE(統合開発環境)で、クラスのアトリビュートの補完など、いろいろ助けてくれる。 驚いたのが、自分で作った関数にコメントアウトすると、関数入力を補完するウィンドウポップアップで、そのコメントが表示する。便利に感じた。
会社のEclipseにも、インストールしよう。 Eclipseの [ヘルプ]→[ソフトウェア更新]→[検索およびインストール]  でインストールできるようだ。



2009年10月7日水曜日

if not L:

これは、真値テスト。以下の場合に、真となる。

- None
- False
- 数値型におけるゼロ。例えば 0 、 0L 、 0.0 、 0j 。
- 空のシーケンス型。例えば '' 、 () 、 [] 。
- 空のマッピング型。例えば {} 。

ここに、良い説明があった。

すぐに忘れる脳みそのためのメモ http://jutememo.blogspot.com/2008/10/python-2-if-not-l.html

2009年10月5日月曜日

if __name__ == '__main__':

人のPythonコードを読むと、以下のif文が良く出てくる。

if __name__ == '__main__':

調べてみると、
へたれプログラマーな日々 http://d.hatena.ne.jp/s-n-k/20080512/1210611374

みんなのPythonにも書いてあった(汗)。

このif文をファイルに書いておくと、モジュールとしてインポートされたときは、実行されない。しかし、このファイルを単体として直接実行した場合に、(要は、コマンドラインから、このファイルを実行)、実行される。
モジュール単体をテストするときに、使えるようです。

2009年10月4日日曜日

インターネットラジオ

仕事中とかに良いです。会社のプロキシーが通ればの話ですが、、、

沢山のインターネットラジオのリンクが整理されています。 -- MUSIC-STYLE Info

2009年10月3日土曜日

VBで、モデム経由で電話の発着信

VBで、モデム経由で電話の発着信ができると、うれしい。MsComm, TAPI3 がキーワードのようだ。

VBのサンプルコード -- VBマニア

Java scriptで作っている人がいる。 発信はこれで可能。VISTAでは、動かないそうだ。

Voice Modemでないと、駄目です。基本でした。

アメリカでは、まだボイスモデムが入手可能。

Matplotlib GUI examples

Matplotlib + Tk -- user_interfaces Example -- matplotlib.sourceforge.net

Matplotlibに表を挿入する -- CプログラマのPython入門

Matplotlib + Tk -- A Packaged Array Data Viewer Written in Python

Matplotlibで、ツールを作っているようです。 -- 理想のユーザ・インターフェイスを求めて

ぐうたらの部屋 数学・物理部
Scipy/Numpyのサンプルコード & matplotlibのサンプルコード