魔術師見習いのノート

プロフィール

魔術師見習い
Author魔術師見習い-_-.
Twitter魔術師見習い

コンピュータ関係のメモを主に書きます.

MENU

Pythonの覚えておきたい関数やクラス、モジュール

投稿日:
タグ:

本稿はPython3の言語仕様とは別に覚えておきたい関数やモジュールについてのメモ。

組み込み関数

map(func, iterable, ...)
第二引数以降で指定したコンテナから同じ添字番号のものを順に抜き出し、それをfuncに引数として与え、その結果を返すジェネレータ。funcに与える引数は、mapの第2引数のコンテナに属するオブジェクトがfuncの第1引数に、mapの第3引数のコンテナに属するオブジェクトがfuncの第2引数といった感じで、mapの第n引数のコンテナに属するオブジェクトがfuncの第n-1引数に与えられる。
def func(x, y, z):
  return x * y * z

print(list(map(func, [1, 2, 3], [2, 4, 6], [3, 6, 9])))
mapはPython2ではジェネレータではなく、コンテナを返す関数である。
filter(func, iterable)
iterableが返すオブジェクト群を順にfuncに引数として与えて評価し、真となるオブジェクトを返すジェネレータ。これを利用すると例えば次のように10から50の範囲の素数を検索するコードを記述することができる。
def isPrime(x):
  for y in range(2, x-1):
    if x%y==0:
      return False
  return True

print(list(filter(isPrime, range(10, 50))))
このコードはこのような結果を標準出力に出力する。
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
filterもまたPython2ではジェネレータではなく、コンテナを返す関数である。
zip(*iterable)
行列の行と列を交換するような関数。複数のコンテナを受け取り、同じ添字を1つのタプルを順に返すジェネレータ。 例えばこのようなコードがあったとする。
print(list(zip([1,2,3], [4,5,6])))
これは次のように標準出力に出力される。
[(1, 4), (2, 5), (3, 6)]
isinstance(object, class-or-type-or-tuple)
指定したオブジェクトが指定したクラスかその継承クラスである場合にTrueを、それ以外の場合にFalseを返す。また、クラスはタプルの中に記述することで複数指定できる。
isinstance(False, bool)
isinstance(False, (int, str))
id(object)
オブジェクトの識別値(ID)を返す。
算術
abs(number)
絶対値を返す関数

モジュール

以下にいくつか便利なモジュールの使い方を説明する。詳細は情報はhelpコマンドによるドキュメントを参照されたし。

re
正規表現を扱うためのモジュール。
一致
import re
r = re.match("h.*o", "hello")
if r is None:
  print("Not match")
else:
  print("match")
抽出
>>> import re
>>> r = re.match("^\s*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)\s*$", "apple, 100, 5")
>>> if r is not None:
...   r.group(0)
...   r.group(1)
...   r.group(2)
...   r.group(3)
... 
'apple, 100, 5'
'apple'
'100'
'5'
置き換え
>>> re.sub("([^ ,]+)", "hoge", "foo, bar")
'hoge, hoge'
sys
システム系のモジュール。
コマンドライン引数の取得
import sys
print("program name: " + sys.argv[0])
print(" argument 1 : " + sys.argv[1])
print(" argument 2 : " + sys.argv[2])
標準出力
標準エラー出力
import sys
sys.stderr.write("error message\n")
これを利用すると次のようにリダイレクトができる。
import sys
out = sys.stdout
f = open("/tmp/test.txt", "w")
sys.stdout = f
cnt = sys.stdout.write("fuga\n")
print("hoge")
f.close()
exit
import sys
sys.exit(0)
os
システムコールのモジュール。
ディレクトリの生成
import os
os.mkdir("/tmp/hoge", 755)
exec系関数
dup
pipe
fork
import sys
import os

r, w = os.pipe()
pid = os.fork()
if pid:
  os.close(w)
  out = os.read(r, 10)
  while True:
    buf = os.read(r, 10)
    if buf:
      out += buf
    else:
      break
  os.write(sys.stdout.fileno(), out)
  os.close(r)
else:
  os.close(r)
  os.dup2(w, sys.stdout.fileno())
  os.close(w)
  os.execlp("ls", "ls", "-l")


特殊関数

編集中

一覧