Logo address

Python

目次

2012/06/05

Python について

Python は私のお気に入りのプログラミング言語です。文法が簡潔で強力で、一貫性があり、入門用のプログラミング言語としても良いと思います。

Python は次の URL から無料でダウンロードできます。

OS に固有な解説

トラブル

Python に関する筆者の解説記事

全て PDF 版です。これらは個人での利用の他に、大学や専門学校等の教育目的に使用しても構いませんが、出典は明記してください。

Python の講義テキスト:「Python によるプログラミング入門(第6版)」

筆者が愛知大学の「プログラミング入門」と「プログラミング論」で使用しているテキストです。

download (2012/06/05)

Python によるグラフィックス

この記事は1999年に発表された筆者の記事
	「Python によるグラフィックス」
	「Com」Vol.10,No.2  ( 愛知大学情報処理センター、1999年9月)
を最近の変化に合わせて手直ししたものです。またこの内容は筆者の講義テキスト第III部を構成しています。Python によるグラフィックスの最初の手引きとして手頃です。

download

Python による GUI の構築法 I (ウィジェットの配置)

この記事は2000年に発表された筆者の記事
	Python による GUI の構築法 I --- ウィジェットの配置 ---」
	「Com」Vol.11, No.1
	愛知大学情報処理センター
	2000年3月
の再録である。

但し、表現の微小な校正は行なっている。 Python によるグラフィクスの解説の日本語版がまだ出ていないので役に立つと考え Web 上に公開する。なおこの記事の実行環境は古いが、解説の内容は現在でも修正を必要としていない。また末尾の参考文献には現在では当然載せるべき書物が載っていない。当時のまま載せている。

download (2005/03/01 改訂)

Python による GUI の構築法 II (ウィジェット各論)

この記事は2000年に発表された筆者の記事
	「Python による GUI の構築法 II --- ウィジェット各論 ---」
	「Com」Vol.11, No.2
	愛知大学情報処理センター
	2000年9月
の再録である。

但し、読みやすくするための改訂と校正は行なっている。 Python によるグラフィクスの解説の日本語版がまだ出ていないので役に立つと考え Web 上に公開する。なおこの記事の実行環境は古いが、解説の内容は現在でもほとんど修正を必要としていない。また末尾の参考文献には現在では当然載せるべき書物が載っていない。当時のまま載せている。必要に応じて脚注に最近の状況をコメントしてある。

download (2005/03/01)

Python による GUI の構築法 III (テキストウィジェット)

この記事は2001年に発表された筆者の記事
	「Python による GUI の構築法 III --- Text ウィジェット ---」
	「Com」Vol.12, No.1、
	愛知大学情報処理センター、
	2001年5月
の再録である。

但し、読みやすくするための改訂と校正は行なっている。 Python によるグラフィクスの解説の日本語版がまだ出ていないので役に立つと考え Web 上に公開する。なおこの記事の実行環境は古いが、解説の内容は現在でもほとんど修正を必要としていない。また末尾の参考文献には現在では当然載せるべき書物が載っていない。当時のまま載せている。必要に応じて脚注に最近の状況をコメントしてある。

download (2005/03/09)

Python による動的グラフィックス

この記事は2001年に発表された筆者の記事
	「Python による動的グラフィックス」
	「Com」Vol.12, No.2、
	愛知大学情報処理センター、
	2001年9月
の再録である。

但し、読みやすくするための改訂と校正は行なっている。 Python によるグラフィクスの解説の日本語版がまだ出ていないので役に立つと考え Web 上に公開する。なおこの記事の実行環境は古いが、解説の内容は現在でもほとんど修正を必要としていない。また末尾の参考文献には現在では当然載せるべき書物が載っていない。当時のまま載せている。必要に応じて脚注に最近の状況をコメントしてある。

download (2005/03/25)

その他

Python の Table ウィジェット

2010/06/05

僕のゼミの学生にテーブルを使いたいとの声があったので調べてみた。"python tk table" でググってみると、
http://tkinter.unpythonic.net/wiki/TkTable
にそれらしきものが紹介されている。ソースは tktable.py で http://tkinter.unpy.net/wiki/TkTableWrapper にて手に入る。しかし、添えられているサンプルが本当に分かり難い。この使い方の本質的な部分を示すサンプルを以下に示す。

from Tkinter import Tk, Label, Button, Frame
import tktable

def run_cmd():
	print var.get()
root = Tk()

label = Label(root, text="Tk Table Usage Sample")
label.pack(side = 'top', fill = 'x')
bottom_frame = Frame(root)
run = Button(bottom_frame, text="Run", command=run_cmd)
run.pack(side = 'left')
quit = Button(bottom_frame, text="QUIT", command=root.destroy)
quit.pack(side = 'right')
bottom_frame.pack(side='bottom', fill='x')

var = tktable.ArrayVar(root)
# we set initial table value
for x in range(0, 4):
	for y in range(0, 5):
		index = "%i,%i" % (y, x) # note that (row,col)
		var.set(index, "0")
print var.get()

table = tktable.Table(root, rows=5, cols=4, variable=var)
table.pack()

root.mainloop()

文字列(string)に対する join メソッド

2012/02/09

Python の string モジュールに join メソッドが含まれている。Python3 の string モジュールにはもはや join メソッドは含まれていないので、正しくは、Python2 には含まれていたと言うべきであろう。Python2.6 の string モジュールの内容を読むと、メソッドでモジュール関数を定義している。かっては(たぶん Python1.x の時代には)、クラスメソッドをモジュール関数で定義していたのだが、立場が入れ替わっている。

string モジュールの join 関数は

	join(X,Y)
の形で使う。ここに X は文字列のリストあるいはタプルで、Yは文字列である。join が返す値は
	X[0] + Y + X[1] + Y + X[2] + ... + Y + X[n-1]				式(1)
で n は X のサイズ(長さ)である。Y を省略すれば、式(1)から Y を省いた計算をした方が理に適っているのだが、Y には1文字の空白 " " が使われる。この仕様は、join が文字列の分解 split の逆を行うものとして考えられているからである。この意味で join の仕様は文字列に特化している。

ところで、join メソッドが他の string メソッドと大きく違う(例外的な)のは

	Y.join(X)
と書かなくてはならないことである。string モジュールの(join を除いて)どの関数も文字列が第一引数になっている。そして、その第1引数が、メソッドの操作対象になっている。しかし join だけが違う。join の操作対象は文字列のリスト(あるいはタプル)であって、文字列そのものではない。第2引数は文字列であるが、補助的な情報である。従って第2引数を操作対象としている join メソッドの書き方はいかにも不自然である。そのためにネットでググると多くの不満の声が聞こえてくる。なぜ
	X.join(Y)
でないのかと。

論理的に考えた時に、式(1) を行うメソッドは文字列のメソッドである必要はない。リストやタプルに対するメソッドの位置づけの方がすっきりしている。ここで要求されている事は、X はシーケンスであり、Xの要素達とYの間に加算が定義され、加算に対して閉じていることだけである。そして Y が省略された場合には、式(1) から Y を省かなくてはならない。そのようなメソッドがシーケンスに対して定義されていれば、数字のリストやタプルに対して和を簡単に出す事が可能になるなど、他の応用もあるだろう。ただし、そのようなメソッドに対して join と名付ける事はもはやふさわしくないかも知れない。