最終更新:2024-01-16 (火) 06:12:35 (267d)
Python
Top / Python
インデントインデント
公式
リファレンス実装
例
numbers = [1, 2, 3, 4, 5, 6] # 数値のリスト for i in numbers: # 数値のリストに対してループ print i # ループの範囲はインデントで決まる print numbers
Python/ドキュメント
日本語
インスタント・パイソン
Python/バージョン
- Python 2.7 は 2.x シリーズの最後のメジャーリリースになります
Python 3.x
print("hello world")
Python 2.x
print "hello world"
実装
- CPython - 普通はこれ
- Python for .NET? - 内部ではCPythonを使用しているが、.NETライブラリを参照することが可能
- IronPython - CLI上で動作、.NET Frameworkの関数も使える
- Jython - Pure Java による実装系
- PyPy - PythonによるPythonインタプリタ
動作モード
インタラクティブモード
- インタプリタ上で動かす
- WindowsでPython(command line)ってなってるのはこれ
- コマンドラインからpythonと打ってもこのモードで起動
- 終了は
- _ は最後に実行された式の戻り値
- 式の結果がNoneであったり文の場合は値は更新されない
スクリプトモード
python hoge.py
拡張子
The Zen of Python
import this
The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Python/オブジェクト
- Pythonでは下記のものがオブジェクトと呼ばれ、アイデンティティという固有値によって識別される。
- Python/モジュール
- Python/データ型
- インスタンス?
- 関数
- メソッド?
- id()関数を使うとオブジェクトのアイデンティティ(整数値)を取得できる
組み込みデータ型
- 変数の型はtype(object)で調べる
type(1) #<type 'int'> type('aa') #<type 'str'> type(u'あうあう') #<type 'unicode'>
キャスト
- int()
- float()
- long()
- complex()
- str()
- repr()
数値
- 整数 - integer
- 多倍長整数 - long
- 浮動小数点数 - float
- 複素数 - complex
コンテナ型 (シーケンス)
Python/文字列 (str)
Unicode文字列 (unicode)
- 日本語を使う場合はunicode型を使うこと。
print u"ほげ"
リスト (list)
- mutableなコンテナ
d=[2,5,10,16] print d #[2, 5, 10, 16] d[2]=d[2]+5 print d[1],d[2]
タプル (tuple)
- immutable(変更不能)なコンテナ
b=(2,4,5) print b #(2, 4, 5) s=10,20,50 print s #(10, 20, 50)
マップ型
辞書 (dict)
- 連想配列
r={"a":"alpha","b":"beta"} print r #{'b': 'beta', 'a': 'alpha'} print r["b"] #beta
集合型
集合(set/frozenset)
- 値の重複をゆるさない
- 値を取り出す順序はほぼランダム
- set:要素の追加・削除が可能
- frozenset:要素の追加・削除が不可能
関数型
Python/文法
インデント
- 関数や if 文の範囲をインデント、つまり行頭のスペースとタブの数で指定する
- 慣習的にインデントは4つのスペース
コメント
- コメントは#
#コメントですよ
- 文字列をいきなり定義しても文法上はエラーにならないのでそれを利用して複数行コメントが可能
""" コメントですよ コメントですよ """
関数
- def で定義
def foo(a): if a > 100: return 1 else: return 0
真偽値
- True/False
Falseとして扱われる値
- 0,0.0,0L,0+0J - ゼロ
- '' - 空の文字列
- (),[],{} - 空のタプル、リスト、辞書
- None - null値
変数
グローバル変数
- 関数の中で変数を使用し、その関数の中でその変数への代入が行われていない場合、その変数はグローバル変数になります。
- ローカル変数に該当のがなければグローバルを見に行く
- 関数の中で代入したい場合はglobal宣言を行えば良い
def hoge(): print x#グローバル変数を参照 global y y = 'huga'#グローバル変数に代入 x='hoge' hoge()
ローカル変数
- 関数の中で変数に代入が行われている場合はローカル変数になる
スライス
- 文字列型やリスト型の欲しい位置の最初と終りを コロン":"で分けて、指し示すことができる
s="abcdefg" print s[2:4] #cd print s[:2] #s[0:2]と同じ #ab print s[3:] #s[3:len(s)]と同じ #defg print s[:] #s[0:len(s)]と同じ #abcdefg print s[-2:] #[-1,len(s)]と同じ #fg(右から) #ステップ指定 print s[::2] #開始インデックス:終了インデックス:ステップ #aceg
if文
if 論理式1: 論理式1が真の時に実行されるブロック elif 論理式2: #論理式2が真の時に実行されるブロック else #論理式1,論理式2が偽の時に実行されるブロック
Python/for文
for 変数 in コンテナ: #コンテナの要素ごとに実行されるブロック
for文+range関数
- range(開始,終了,階差)
for 変数 in range(n): #rangeの値ごとに実行されるブロック print x
for文+zip関数
- 一番短いシーケンスの長さに切り詰められる
- 長いシーケンスに合わせたい場合はmap(None,シーケンス1,シーケンス2)とする
print zip([1,2],'abcde') #[(1,'a'),(2,'b')] a=[1,3,5] b=['a','b','c'] for x,s in zip(a,b): #zipによって取り出される値ごとに実行されるブロック print x,s
for文+enumerate関数
a='abc' for i,s in enumerate(a): #enumerateによって取り出される値ごとに実行されるブロック print i,s
for文のアンパック代入
for 変数1,変数2 in コンテナ: #コンテナの要素ごとに実行されるブロック #例 a=[(1,100),(2,200)] #タプル()のリスト[] for e1,e2 in a: print e1+e2 b={'a':1,'b':2,'c':3}#辞書 for key,value in b.items(): print key, value
while文
while 条件: #条件が真の間繰り返し実行されるブロック
- 抜けるときはbreak
- 次の繰り返し処理をするときはcontinue
while-else文
while 条件: #条件が真の間繰り返し実行されるブロック else: #条件が偽になったら実行されるブロック
例外処理
try-except
try : #なんか処理 except [例外型1[,例外オブジェクト1]]: #例外1が発生した実行されるブロック #なんもしないときはpass print e.args[0] #eは例外オブジェクト except [例外型1[,例外オブジェクト2]]: #例外2が発生した実行されるブロック #なんもしないときはpass except: #その他のエラーが発生した実行されるブロック #なんもしないときはpass else: #例外がなかった場合に実行されるブロック finally: #必ず実行されるブロック
- Python 2.4以前ではtry-finallyとtry-except-elseを同居させることができないのでネストさせる必要がある
raise
- エラーを明示的に送出する
raise 例外型,引数
値のコピー
- id()関数を使うとオブジェクトのアイデンティティ(整数値)を取得できる
- 普通の代入ではオブジェクトのアイデンティティが代入されるだけ
- 違う変数が同じアイデンティティを参照
- オブジェクトが同一かどうか調べるにはis演算子を使う
- 普通のコピーでは浅いコピーが行われる(一階層だけコピー)
- 変更不可能なオブジェクト(文字列・数値・タプル)に対するis演算子による比較の結果は不定
変更可能なオブジェクト
変更不可能なオブジェクト
リスト/タプルのコピー
浅いコピー
方法 例 組み込み関数listを利用 b=list(a) スライスを利用 b=a[:] 1回の繰返し演算を利用 b=a*1 リスト表記を利用 b=[x for x in a] 空のリスト結合を利用 b=a+[] コピーモジュールを利用 import copy
b=copy.copy(a)
深いコピー
方法 例 コピーモジュールを利用 import copy
b=copy.deepcopy(a)
辞書のコピー
浅いコピー
- 要素の一階層だけのコピーが行われる
方法 例 dict()を利用 b=dict(a) dict.copy()を利用 b=a.copy() コピーモジュールを利用 import copy
b=copy.copy(a)
深いコピー
方法 例 コピーモジュールを利用 import copy
b=copy.deepcopy(a)
Python/モジュール
- 関数や変数やオブジェクトの定義を書いたファイル
Python/ライブラリ
GUIツールキット
開発環境
ドキュメント
ファイルを一覧表示
#!/usr/bin/env python import os, sys def main(): for root, dirs, files in os.walk(sys.argv[1]): for f in files: print os.path.join(root, f) if __name__=='__main__': main()