最終更新:2015-05-10 (日) 00:28:46 (683d)  

Python はてなブックマークを見る
Top / Python

インデントインデント

公式

numbers = [1, 2, 3, 4, 5, 6]  # 数値のリスト
for i in numbers:   # 数値のリストに対してループ
    print i   # ループの範囲はインデントで決まる

print numbers

Python/ドキュメント

日本語

インスタント・パイソン

Python/バージョン

  • Python 3.xには後方互換性?がない。
  • メジャーなのは2.x系

Python 2.x

print "hello world"

Python 3.x

print("hello world")

実装

動作モード

インタラクティブモード

  • インタプリタ上で動かす
  • WindowsでPython(command line)ってなってるのはこれ
  • コマンドラインからpythonと打ってもこのモードで起動
  • 終了は
  • _ は最後に実行された式の戻り値
    • 式の結果がNoneであったり文の場合は値は更新されない

スクリプトモード

python hoge.py

拡張子

.py?ソースコード
.pyc?バイトコードのキャッシュ
.pywコンソールが表示されない(Windows)

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では下記のものがオブジェクトと呼ばれ、アイデンティティという固有値によって識別される。
  • 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)

  • 文字列にはstr型とunicode型がある。
    r="abc"*3
    print r 
    //abcabcabc
    
    m="""Hello
    World."""
    print m 

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:要素の追加・削除が不可能

関数型

文法

インデント

  • 関数や 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値

変数

  • 英数字・アンダースコアが使え、長さの制限は無し
  • Python予約語は使えない
  • 削除:del
    del 変数名1,変数名2

グローバル変数

  • 関数の中で変数を使用し、その関数の中でその変数への代入が行われていない場合、その変数はグローバル変数になります。
    • ローカル変数に該当のがなければグローバルを見に行く
    • 関数の中で代入したい場合は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()
 

環境構築

Webアプリケーションフレームワーク?

参考