2017年04月 / 03月≪ 123456789101112131415161718192021222324252627282930≫05月

2011.08.09 (Tue)

[Python] Python らしい文法・使い方

今まで時々 Python を使ってきたものの、あまり独特の文法や機能は使ってこなかったので、それらをまとめることにしました。
割と基礎的なところも書いてる気がしますが、その時の気分でテキトーに書いてます。
ブログの仕様のせいでサンプルプログラムの半角スペースが消えちゃってますが、ソースを見るなり空気で適当にタブを入れるなりでお願いします。

内容:
  ・リストの操作
  ・変数の型を調べる
  ・設定ファイル
  ・モジュール内に定義されている関数名・変数名リストの取得
  ・for ループの内包表記(簡易表現)
  ・三項演算子
  ・zip() 関数
  ・ラムダ式(途中)

【More・・・】




【リストの操作】
リストを逆順にする:

list.reverse()


リストの要素に逆側からアクセスする

list[-5:-1]






【変数の型を調べる】
「isinstance("target", "type")」 という関数を使用することで、型をチェックすることができます。
"target" は調べたい変数名、"type" はチェックする型の名前です。
戻り値は bool で、type と同じ型か type のサブクラスならば True となります。
また、bool 型は int 型のサブクラスという扱いですのでこれも注意。

・組み込み型の名前

・整数型:int
・浮動小数型:float
・文字列型:str
・バイナリ型:bool
・リスト型:list
・タプル型:tuple
・辞書型:dict


サンプル

#!/usr/bin python
# -*- coding: utf-8 -*-

class Hoge():
def __init__(self):
pass

class Hogege(Hoge):
def __init__(self):
pass

def main():
# 整数や浮動小数などの型チェック
i = 3
f = 3.141592653589793238
s = 'string'
b = True
print isinstance(i, int)
print isinstance(f, float)
print isinstance(s, str)
print isinstance(b, bool)

## 注意!
## bool は int のサブクラスなのでこれは True になる!
print isinstance(b, int)

# リスト、タプル、辞書の型チェック
lis = ['hoge', 'foo']
tup = ('apple', 'banana')
dic = {'fuga':'piyo'}

print isinstance(lis, list)
print isinstance(tup, tuple)
print isinstance(dic, dict)

# 自作クラスの型チェック
sirabetaiA = hoge()
sirabetaiB = hogege()
print isinstance(sirabetaiA, hoge)
print isinstance(sirabetaiB, hoge)
print isinstance(sirabetaiA, hogege)
print isinstance(sirabetaiB, hogege)

if __name__ == "__main__":
main()


実行結果は最後から2番目以外は True です。





【設定ファイル】
Python には設定ファイルを作成するための機能があります。
下のような書式で設定ファイルを記述します。
[]内にセッション名を記述し、その下に「項目名 = 値」を書きます。
設定ファイルに使うセクション名や項目の名前は大文字・小文字などの命名規則はどうなっているんですかね・・・。

"pc_config.ini"

# シャープでコメントアウトできます。
# パソコンぽい設定ファイルでサンプル。

# スペック
[spec]
maker = NEC
brand = Lavie
cpu = 2.4GHz
memory = 4GB
hdd = 300GB
os = CentOS

# USB ポートの使用状況
# コロンで区切っても OK
[usbport]
port1 : マウス
port2 : マイク
port3 : USBメモリ
port4 : 未使用



設定ファイルの読み込む際には、ConfigParser モジュールの SafeConfigParser クラスを利用します。
下は使用例です。

#!/usr/bin python
# -*- coding: utf-8 -*-

import ConfigParser

def main():
ini_file = ConfigParser.SafeConfigParser()
ini_file.read('./pc_config.ini')

print unicode(ini_file.get('spec', 'cpu'))
print unicode(ini_file.get('spec', 'os'))
print unicode(ini_file.get('usbport', 'port1'), 'utf-8')
print unicode(ini_file.get('usbport', 'port3'), 'utf-8')
print unicode(ini_file.get('usbport', 'port4'), 'utf-8')

if __name__ == '__main__':
main()







【モジュール内で定義されている関数名・変数名一覧の取得】
「dir()」 を使用することで可能です。
引数にモジュール名を指定することで、そのモジュール内の定義情報についてリストが返ってきます。
引数なしの場合は dir() を呼び出したモジュールについて関数名・変数名リストを取得します。





【for ループの内包表記(簡易表記)】
for ループをシンプルに記述することができます。
簡単な計算でもネストした for ループを記述する必要がある際、この文法を使えば一行でシンプルに記述することができます。
結構使ってる人多いですよね。

サンプルプログラム

#!/usr/bin python
# -*- coding: utf-8 -*-

def main():
result = [ x + y for x in ['a', 'b', 'c'] for y in ['1', '2', '3'] ]
print result

if __name__ == '__main__':
main()


実行結果

['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']







【三項演算子】
Python2.5 から導入されたらしいです。
C などでは割と当たり前に存在していた演算子ですが、Pythonには無いものと思っていました。
書式は以下のようになっており、Python での参考演算子は条件と正値の式の位置が逆なので注意が必要です。

result = [正値] if [条件] else [負値]


サンプル

result = u'同じです。' if 1==1 else u'同じじゃないです。'
print result


結果

同じです。






【zip() 関数】
2つのリストがあるときに、順番通りにタプルにまとめたい時に使用します。
文で書くよりは見た方が早いと思います。

サンプル

listA = [1, 2, 3, 4]
listB = ['A', 'B', 'C', 'D']
print zip(listA, listB)



結果

[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')]





【ラムダ式】
関数の中に簡易的な関数を作ることができます。
サンプル考えるのめんどくさい。




テーマ : プログラミング ジャンル : コンピュータ

07:20  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

*Comment

コメントを投稿する

URL
COMMENT
PASS  編集・削除するのに必要
SECRET  管理者だけにコメントを表示  (非公開コメント投稿可能)
 

▲PageTop

*Trackback

この記事のトラックバックURL

→http://gasser.blog114.fc2.com/tb.php/494-79b29000

この記事にトラックバックする(FC2ブログユーザー)

この記事へのトラックバック

▲PageTop

 | BLOGTOP |