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