Version 1.0 (2004年 9月)
対象: ある程度プログラミングの経験がある Java あるいは Perl のユーザ。
http://www.python.org/
http://c2.com/cgi/wiki?PythonIde
(オープン:7、商用:3、Eclipseプラグイン:1)
http://rgruet.free.fr/PQR2.3.html
# はコメント (行末まで)
#!/usr/bin/env python a = 1 b = 2 c = a + b if c == 3: print "correct" else: print "wrong"
False、 True [2.3以降、それ以前は 0 と 1 で代用]
3
3.14159
1+2j
"abc"
u"日本語"
[1, 2, "z", [3,4]]
{"a":1, "b":2}
None
3+"5" → エラー
+, -, *, /, %, (), **
? : はない。
x = 2
y += 1 (y++, y--はない)
(a,b) = (b,a) 多重代入
'abc'
"abc"
"""abc
def""" (改行を含められる)
\ でエスケープ: '\n', '\020', '\x1a', "I'm \"quoted\"."
"abc" + "def" * 3 → "abcdefdefdef"
a = "0 p 1 y 2 t 3 h 4 o 5 n 6"
a[0] → "p"
a[-1] → "n"
a[2:4] → "th"
a[1:] → "ython"
a[:-3] → "pyt"
a[2:-1] → "tho"
"abc" in s (包含の判定)
s.strip() → 先頭と末尾の空白・改行を削除した文字列が新たに返される。 (chomp)
s.replace("a", "b") → "a" を "b" に置換した文字列が新たに返される。
%演算子 (sprintf):"x=%d, y=%d" % (x,y) → "x=4, y=5"
int("123") → 123 / str(123) → "123"
chr(65) → "A" / ord("A") → 65 (文字型と文字列型を区別しない)
u"abc"、 u"あいうえお" のように書く。
http://www.python.jp/Zope/download で配布、
Python2.4 から日中韓国語の codec が標準装備)
s.encode("shift_jis") → Shift JIS で表現したバイト列。
str(u"あ") → '\xa4\xa2' / unicode('\xa4\xa2') → u'あ'
#!/usr/bin/env python # encoding: shift_jis print u'この文字列定数はシフトJISとして解釈されます'
if, for, while だけ。(break, continue)
if a == b:
print "equal"
else:
print "not"
n = 1
while n < 100:
print n
n *= 2
for i in [1,2,3,4,5,6,7,8,9,10]: Perl の foreach に相当する
if i == 5:
break
print i
==, !=, <=, < , >=, >, in
&&, ||, ! → and, or, not
in
fp = file("/etc/hosts", "r")
fp.read(n) → ファイル全部を文字列で返す。
fp.readline() → ファイル1行を返す。(終端は '')
fp.close()
fp2 = file("/tmp/x", "w")
fp2.write("write")
print x
print "x=", x, "y=", y
print >>fp, "write" (改行が入るので注意)
print "name=%s, age=%d" % (name, age)
try: 〜 except: でキャッチ。
try:
fp = file("/etc/nosuchafile")
except IOError:
print "cannot open"
raise で送出。
IndexError, KeyError, ValueError, IOError などがある。
a = [1,2, "abc", 4]
b = [2, [3], [[4], []]]
a[0], a[-1], a[2:4], a[1:], a[:-3], a[2:-1] (文字列と同様)
a[:] (コピーされたリスト)
[1,2] + [3,4] * 2 → [1,2,3,4,3,4]
a.append(5) (末尾に要素 5 を追加)
a.extend([6,7]) (末尾に要素 6 と 7 を追加 - a.append([6,7]) とは異なる)
a.insert(0, 7) (先頭に要素 7 を追加)
del a[3] (3番目の要素を削除)
a.reverse() (反転、a は上書きされる)
a.sort() (ソート、a は上書きされる、自前の比較関数を書くやり方は → 後述)
x in y → x が y の要素に含まれているかどうか (線型探索)
range(10) → [0,1,2,3,4,5,6,7,8,9] (for で使用)
"a b c".split(" ") → ["a", "b", "c"]
", ".join(["a", "b", "c"]) → "a, b, c"
d = {}
d = { "a":2, "b":4 }
d["a"] = 1
del d["a"]
"a" in d → "a" が d のキーに含まれているかどうか
d["x"] 該当するキーがない場合は KeyError 例外になる。
try: x = d["x"] except KeyError: print "x is not found"
d.get("x", 0)
d.keys(), d.values()
def func(x, y, z=0): return x*x+y*y+z*z
func(3,4) → 25, func(3,4,5) → 50
def func(): ...
print func(3,4,5)
a = func
print a(3,4,5)
def loaddata(): ...
def savedata(): ...
def exitit(): ...
menu = {"load":loaddata, "save":savedata, "exit":exitit}
f = menu[choice]
f()
def mycompare(a,b):
return cmp(len(a), len(b))
a = ["abc", "de", "x", "yyyy"]
a.sort(mycompare)
Person オブジェクトの定義:
class Person: # コンストラクタ: Person(name,age) def __init__(self, name, age): self.name = name self.age = age return def __repr__(self): return '<Person: name=%s, age=%d>' % (self.name, self.age) def display(self, out): out.write("Name: %s\n" % (self.name)) out.write("Age: %d\n" % (self.age)) return obj = Person("Shinyama", 29) print obj obj.age = 30 obj.display(fp)
self が必要! (Java の this に相当する)
obj.method(a,b,c) → method の第一引数 self に obj が渡される。
コンストラクタ: __init__(self)
文字表現: __repr__(self) デバッグに便利
a = [ n*n for n in range(5) ] → a = [1, 4, 9, 16, 25]
", ".join([ "%s='%s'" % (k, d[k]) for k in d.keys() ])
xrange(1000000)
dic.iterkeys(), dic.itervalues()
fp.xreadlines()
import と from:
import math print math.log(2) print math.pi from math import log print log(2) (from math import log はじつはこれと同じ) import math log = math.log (正規表現を使う) import re pat = re.compile("([a-zA-Z]+)=([0-9]+)") m = pat.search("a=123") print m.group(1), "=", m.group(2) (dbファイルを使う) import dbm mydb = dbm.open("mydb", "n") mydb["abc"] = "xyz" mydb["123"] = "456" mydb.close()
mylog.py は mylog というモジュール名をもつ:
#!/usr/bin/env python import math def log2(x): return math.log(x) / math.log(2) if __name__ == "__main__": print "log2(10)=", log2(10)
import mylog print mylog.log2(10) from mylog import log2 print log2(10)
if __name__ == "__main__": の中が実行される。
mylibs/mylog.py 中にある log2 という関数 (または変数) は
mylibs.mylog.log2 という名前でアクセスできる。
PYTHONPATH をさがす。
>>> import urllib >>> help(urllib) ... >>> help(urllib.urlopen) ...
import Tkinter def action1(): print "boo!" b = Tkinter.Button() b["text"] = "Hit Me" b["command"] = action1 b.pack() Tkinter.mainloop()
from java.applet import Applet
class HelloWorld(Applet):
def paint(self, g):
g.drawString("Hello from Jython!", 20, 30)
sample.py