学んだことをなぐり書き


ここでは他言語から python を始めた時に「なんじゃろこれ?」や「これどうやるんだろ?」ってなった部分を書いていきます。
自分は Java/Ruby/Scala ならギリギリなんとなくなら読める(気がしてます(苦笑))ので、それ前提で進めています。


チュートリアルの場所

  • 2.5(Google App Engine)
http://www.python.jp/doc/2.5/index.html

  • 他のバージョンのドキュメント
http://www.python.jp/Zope/links/python_documents
http://www.python.org/doc/


時間があるなら全部読むといいかもしれません。
分かりやすく説明してくれています。(ような気がします)

ソースコード内で utf-8(日本語) を使う

# -*- coding: utf-8 -*- 
# ファイルの先頭に↑を記述するっぽい(めんどい>_<)

環境変数の取得

# -*- coding: utf-8 -*- 
import os

# os.environ でハッシュ(辞書)形式で取得出来る。
for k, v in os.environ.iteritems():
        print k, v

print os.environ['PATH']

import 先のパス追加

# -*- coding: utf-8 -*- 
import sys

# sys.path で現在の import の検索パスを取得
print sys.path

# パスを追加したい場合は配列(リスト)形式で sys.path に追加
sys.path = ['/path/to/package/'] + sys.path

print '------------'
print sys.path

キーワード引数

http://www.python.jp/doc/2.5/tut/node6.html#SECTIO...
# -*- coding: utf-8 -*-
def func(hoge, moke='aiueo', fire='bobobo'):
        print hoge, moke, fire

func('test')

# 引数名を指定してメソッドを呼び出すことが出来る
# これを「キーワード引数」という
# キーワード引数で呼び出した場合、引数の順番は関係ない。
# デフォルト引数がない引数名でも呼び出すことが出来る

# hoge は第一引数だがキーワード引数で呼び出した場合順番はどこでもいい。
func(moke='moke', hoge='hoge')

# 通常の引数とキーワード引数を組み合わせることも出来る
func('hogege', fire='fire')

# キーワード引数の後ろに通常の引数を指定することは出来ない
# func(fire = 'fififi', 'ho') # => SyntaxError
test aiueo bobobo
hoge moke bobobo
hogege aiueo fire

* と ** 引数

# -*- coding: utf-8 -*-

# 引数の前に *  を付けると可変長引数でリスト形式で渡せる
# 引数の前に ** を付けると辞書形式でキーワード引数を渡せる
def func(val, *args, **keys):
        print val
        print args
        print keys

# * や ** 引数は最後にしなければならない
# def func2(*args, val):  print args # => SyntaxError
# def func2(**keys, val): print keys # => SyntaxError

func(0, 'a', 'b', 'c', v1=10, v2=20)
0
('a', 'b', 'c')
{'v1': 10, 'v2': 20}

型を調べる

# -*- coding: utf-8 -*- 
# 型を取得するときはtypeメソッド、型を調べるときはisinstanceメソッドを使う。
print type(10)
print isinstance(10, int)

# 組込みクラスでない場合typeメソッドだと全て<type 'instance'>になってしまうので、__class__.__name__ で取得する
class C:
  self __init__(self):
    print('new instance')

print type(C())
print C().__class__.__name__
<type 'int'>
True
new instance
<type 'instance'>
new instance
'C'

文字列と数値変換

# -*- coding: utf-8 -*-                                                                 
print str(10)                                                                           
print type(str(10))                                                                     
                                                                                        
print int('30')                                                                         
print type(int('30'))                                                                   
                                                                                        
print float('40.5')                                                                     
print type(float('40.5'))                                                               
                                                                                        
# ruby の to_i のように 10 になったりせず例外が出る                                     
# print int('10abc') #=> ValueError  
10
<type 'str'>
30
<type 'int'>
40.5
<type 'float'>

メンバーのみ編集できます