Pythonチュートリアル(第3版)を斜め読みした際のメモ.
チートシート的に使いたい. 追記するかも.
構文
f = lambda x: x*x
f(10) #=> 100
def pow(x):
return x * x
h = pow
h(100) #=> 10000
m = { "key": "value" }
for k,v in m.items():
...
while True:
try:
# 何らかのValueError
raise ValueError("えらー")
except OSError as err:
# エラーハンドル
except ValueError: as err:
# エラーハンドル
except:
# その他のエラーハンドル
raise # 例外の再送出をしてもよい
else:
# try内で例外がスローされなかったら実行される
finally:
# 必ず実行される
モジュール
ディレクトリに __init__.py
があるとパッケージとして扱われる.
例えば sound/effects/echo.py
があったとき, echo.py
内の echofilter
関数を使うには,
from sound.effects.echo import echofilter
と書く.
出力
あらゆるPythonオブジェクトがrepr()の引数になれる.
# {formatの引数のインデックス : フォーマット}
import math
for x in range(1,11):
print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
print( 'Pi: {}'.format(math.pi) )
print( 'Pi: {!r}'.format(math.pi)) # !r は repr()を適用
print( 'Pi: {!s}'.format(math.pi)) # !s は str()を適用
m = { 'key1': 42, 'key2': 84 }
print( 'K1: {0[key1]:d}, K2: {0[key2]:d}'.format(m))
# K1: 42, K2: 84
# こっちの書き方もできるけど,古いらしい
print( 'Pi: %5.3f' % math.pi )
# Pi: 3.142
vars()
はローカル変数をすべて含んだディクショナリを返す関数.
ファイル操作
f = open('filepath', 'r+') # r/w/a/r+
f.read(サイズ) # サイズ省略するとすべて読む
f.readline() # 1行読む
for line in f:
print(line)
f.write('This is a test\n')
f.close()
オブジェクトによっては,不要時のクリーンアップ動作が定義されている.
with文を使うと使用後すぐに適切な方法でクリーンアップされる保証の下で利用できる.
with open("filepath") as f:
for line in f:
print(line)
json
j = json.dumps( obj )
obj = json.load(j)
クラス
class Complex:
clazz_var = 'value' # クラス変数
def __init__(self, r, i):
self.r, self.i = r, i # インスタンス変数
def to_s(self):
return "{0:.3f} + {1:.3f}i".format(self.r, self.i)
c = Complex(3.0, -4.5)
print(c.r, c.i) # 3.0 -4.5
print(c.to_s()) # 3.000 + -4.500i
print(Complex.to_s(c)) # 3.000 + -4.500i
ジェネレータ
def reverse(data):
for i in range(len(data)-1, -1, -1):
yield data[i]
",".join(list(reverse('golf')))
#=> "f,l,o,g"
標準ライブラリ
import os
os.getcwd() # カレントディレクトリ
os.chdir("path/to/dir") # cd コマンド相当
os.system("mkdir today") # シェルコマンド実行
help(os) # でモジュールのヘルプを確認できる
import shutil # ディレクトリ操作
shutil.copyfile('src.txt', 'dst.txt')
shutil.movefile('src.txt', 'dst.txt')
import glob # ディレクトリ走査
glob.glob('*.py')
import sys
print(sys.argv) # コマンドライン引数
# getopt モジュールやargparseモジュールで sys.argv をうまく処理できる
import re # 正規表現
re.findall( r'[a-z]+', 'hoge hoge string')
#=> ['hoge', 'hoge', 'string']
import math # 数学関連
math.cos(math.pi /4) #=> 0.707
math.log(1024, 2) #=> 10.0
import random # 乱数
random.choice(['a', 'b', 'c']) #=> a,b,cから無作為抽出する
random.sample(range(100), 10) # 0から99の値から重複なしで10個抽出
random.random() # 0から1の間の乱数(実数)
random.randrange(6) # range(6)からランダムに選んだ整数
import statistics # 統計量
statistics.mean([1,2,3]) # 平均値
statistics.median([1,2,3]) # 中央値
statistics.variance([1,2,3]) # 分散
# SciPyにはもっとたくさんあるよ
from urllib.request import urlopen # webページ取得
with urlopen('http://.....') as res:
for l in res:
print( l.deecode('utf-8') )
import smtplib # メール送信
from datetime import date # 日付と時間
now = date.today()
now.strftime("%m-%d-%y %d %b %Y")
import zlib # zip圧縮
src = b'hogehoge fugafuga'
c = zlib.compress(src)
s = zlib.decompress(c)
print(s) # hogehoge fugafuga
from timeit import Timer # 計測
Timer('evalされる文字列', 'evalされる文字列').timeit() # それぞれの式の評価時間の差
import logging # ログ
logging.debug('でばっぐ') # 他には info,warning, error, critical
import weakref # 弱参照, WeakReference