PythonのTips忘却録2
改行なしで出力したい
printの最後に,をすれば改行されない。
例
% python >>> hoge = "こんにちわ" >>> foo = "改行なし" >>> piyo = "piyopiyo" >>> if 1: ... print hoge, ... print foo, ... print piyo, ... print hoge,foo,piyo ... print hoge,foo,piyo ... こんにちわ 改行なし piyopiyo こんにちわ 改行なし piyopiyo こんにちわ 改行なし piyopiyo
複数比較を行う
CとかJavaでは通常複数比較は以下のように書く
if( x == 1 || x == 2 || x == 3)
Pythonでは||はorだから
if x == 1 or x == 2 or x == 3 :
と書けるけど、これはPythonicではない。Pythonではinを使って表現
if x in (1, 2, 3)
うつくしす
switch文
Pythonにはswitch文がありません。なのでif 〜 elif 〜 else で代用します。
C言語では以下のように書くのを
switch(flag) { case 1: printf("case 1\n"); break; case 2: printf("case 2\n"); break; case 3: printf("case 3\n"); break; default: printf("default\n");
Pythonでは以下のように書く
flag = 3; if flag == 1: >-print "case 1" elif flag == 2 : >-print "case 2" elif flag == 3 : >-print "case 3" else: >-print "default"
Pythonの文字列フォーマット、いわゆるPerlのヒアドキュメントを実現
テンプレート処理などができますね
% python >>> doc = '''こんなに長い分もPython(%(python)s)では関係なく置き換えられます。 ... まさにC言語(%(c)s)のPrintfですね。 ... %(okikae)s 挿入した言葉 ... %(suuji)d 数字もOK ... ''' >>> word = {'python' : 'パイソン', 'c' : 'しーげんご', 'okikae' : 'ここにいれます', 'suuji' : 10} print doc % word こんなに長い分もPython(パイソン)では関係なく置き換えられます。 まさにC言語(しーげんご)のPrintfですね。 ここにいれます 挿入した言葉 10 数字もOK >>>
そのモジュールで利用できるオブジェクト、変数、メソッドを調べる
xxx.__all__を使えばよい
% python >>> import csv >>> csv.__all__ ['QUOTE_MINIMAL', 'QUOTE_ALL', 'QUOTE_NONNUMERIC', 'QUOTE_NONE', 'Error', 'Dialect', 'excel', 'excel_tab', 'reader', 'writer', 'register_dialect', 'get_dialect', 'list_dialects', 'Sniffer', 'unregister_dialect', '__version__', 'DictReader', 'DictWriter'] >>>
インスタンスオブジェクトのアトリビュート一覧を取り出す
dir()を利用する
>>> import csv >>> dir(csv) ['Dialect', 'DictReader', 'DictWriter', 'Error', 'QUOTE_ALL', 'QUOTE_MINIMAL', 'QUOTE_NONE', 'QUOTE_NONNUMERIC', 'Sniffer', 'StringIO', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__version__', 'excel', 'excel_tab', 'get_dialect', 'list_dialects', 're', 'reader', 'register_dialect', 'unregister_dialect', 'writer']
__all__との違いは、__all__はソースに書かれてないと表示されない。一方dir()は組み込み関数なので、__all__の記述とは関係なくアトリビュートを探す。
sys モジュールについて
sysモジュールを組み込むことによっていろいろな環境が調べられる。
(以下はすべてGentooLinux上のPython2.4の環境)
pythonの起動時に渡されたコマンドラインの引数を調べる
argv.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print sys.argv print len(sys.argv)
% python argv.py ['argv.py'] 1
マシンのバイトオーダーを調べる
>>> sys.byteorder 'little' <|| *** デフォルトのエンコーディングを調べる。 >|python| sys.getdefaultencoding() 'ascii'
ファイルシステムのエンコード名
ファイルシステムへの変換に使用するエンコード名。getdefaultencoding()と同じ場合には"None"を返す。
>>> sys.getdefaultencoding() 'ascii' >>> sys.getfilesystemencoding() 'UTF-8'
ロード済みのモジュールを調べる
>>> sys.modules
モジュール検索のパスを調べる
>>> sys.path ['', '/usr/lib/portage/pym', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/lib/python2.4/site-packages', '/usr/lib/python2.4/site-packages/PIL']