この記事では、Python の組み込み関数の使い方を解説します。
組み込み関数とは、プログラム言語にあらかじめ用意されている関数のことで、モジュールなどをインポートしなくても呼び出すことができます。
それでは、組み込み関数の使い方を見ていきましょう!
- 絶対値: abs()
- イテラブルオブジェクトの要素を判定する
- 文字列に変換する
- 2進数・8進数・16進数に変換
- 真偽値を生成・変換: bool()
- デバッガ: breakpoint()
- バイト配列
- 呼び出し可能オブジェクトか判定: callable()
- 文字コード
- クラスメソッド・スタティックメソッド
- コンパイルする
- 数値型
- 属性関連
- 配列
- 属性名の取得: dir()
- 商と剰余: divmod()
- 要素とカウントを取得: enumrate()
- 要素の抽出: filter()
- フォーマット: format()
- 属性の取得
- ハッシュ値: hash()
- ヘルプシステムの起動: help()
- 識別値の取得: id()
- 外部から値を受け取る: input()
- 指定したクラスのインスタンスかどうか: isinstance()
- 指定したクラスのサブクラスかどうか: issubclass()
- イテレータオブジェクト: iter()
- オブジェクトの長さ: len()
- 任意の関数を各要素に適用する: map()
- 最大値・最小値
- メモリビューオブジェクト: memoryview()
- 次の要素: next()
- オブジェクトクラス: object()
- ファイル操作: open()
- 累乗: pow()
- 出力: print()
- プロパティ: property()
- 範囲の生成: range()
- 並び替え
- 値を小数で丸める: round()
- スライス: slice()
- 合計: sum()
- 親クラスにアクセス: super()
- 型を確認: type()
- __dict__の取得: vars()
- イテラブルオブジェクトをまとめる: zip()
- __import__()
- まとめ
絶対値: abs()
引数に渡された値の絶対値を返します。引数には、int型、float型、complex型 の値を指定できます。
abs(x)
サンプル
試しに色々な型の絶対値を出力してみます。
print(f'int型: {abs(-1)}')
print(f'float型: {abs(-5.61)}')
print(f'complex型: {abs(2j+1)}')
実行結果
int型: 1
float型: 5.61
complex型: 2.23606797749979
自作クラスに __abs__
メソッド を定義することで abs
関数の引数に指定できます。
class Test:
def __abs__(self):
return 'absです'
obj = Test()
print(abs(obj))
実行結果
absです
イテラブルオブジェクトの要素を判定する
all()
引数に指定したイテラブルオブジェクトの要素が全て True
ならば True
、そうでなければ False
を返します。
all(iterable)
サンプル
flags = []
print(all(flags))
flags = [True, True]
print(all(flags))
flags = [True, False]
print(all(flags))
実行結果
True
True
False
any()
引数に指定したイテラブルオブジェクトの要素のいずれかが True
ならば True
、全ての要素が False
ならば False
を返します。
any(iterable)
サンプル
flags = []
print(any(flags))
flags = [True, True]
print(any(flags))
flags = [True, False]
print(any(flags))
flags = [False, False]
print(any(flags))
実行結果
False
True
True
False
文字列に変換する
ascii()
ascii()関数 は、引数に指定されたオブジェクトを文字列として返します。非ASCII文字(ひらがなや漢字など)が指定された場合は、Unicode文字 に変換された文字列が返されます。
ascii(object)
サンプル
n = 123
print(f'123: {ascii(n)}')
s = 'Python'
print(f'Python: {ascii(s)}')
s = 'パイソン'
print(f'パイソン: {ascii(s)}')
実行結果
123: 123
Python: 'Python'
パイソン: '\u30d1\u30a4\u30bd\u30f3'
repr()
repr()関数 は、引数に指定したオブジェクトの __repr__
メソッド を呼び出します。
__repr__
メソッド は、eval()
関数 に渡した際に同等の値を持つオブジェクトを生成する文字列を返します。
repr(object)
サンプル
class TestObject:
def __init__(self, arg):
self.arg = arg
def __str__(self):
return f'arg = {self.arg}'
def __repr__(self):
return f'TestObject({self.arg})'
# インスタンス化
obj = TestObject(1)
print(f'str: {obj}')
print(f'repr: {repr(obj)}')
# eval関数で同等のオブジェクトを生成できる
e = eval(repr(obj))
print(f'eval: {e}')
実行結果
str: arg = 1
repr: TestObject(1)
eval: arg = 1
str()
str()
関数 は、文字列型のオブジェクトを返します。この関数は引数に指定されたオブジェクトに定義されている __str__
メソッド を呼び出しています。
str(object)
サンプル
class Obj:
def __str__(self):
return 'Objがstrに変換されました'
obj = Obj()
s = str(obj)
print(s)
# print関数も__str__メソッドの戻り値を出力するので以下でも結果は同じ
print(obj)
実行結果
Objがstrに変換されました
Objがstrに変換されました
Link文字列の使い方
2進数・8進数・16進数に変換
bin()
bin()
関数は、引数に指定した整数を2進文字列に変換します。
bin(x)
サンプル
print(bin(2))
print(bin(-4))
実行結果
0b10
-0b100
oct()
oct()
関数 は、整数を8進文字列に変換します。
oct(x)
サンプル
print(oct(1))
print(oct(8))
実行結果
0o1
0o10
hex()
hex()
関数 は、整数を16進文字列に変換します。
hex(x)
サンプル
print(hex(1))
print(hex(16))
実行結果
0x1
0x10
真偽値を生成・変換: bool()
引数に渡された値を真理値判定手続きに基づいて True
か False
に変換します。引数が省略された場合は False
が返されます。
- None と False
- 数値型におけるゼロ
- 空文字や空の配列
bool(x)
サンプル
# 引数省略
print(f'引数無し: {bool()}')
# 数値型(整数)
print(f'整数: 0={bool(0)}, 1={bool(1)}')
# 文字列
print(f'文字列: ""={bool("")}, "abc"={bool("abc")}')
# 配列(リスト)
print(f'リスト: []={bool([])}, [1]={bool([1])}')
実行結果
引数無し: False
整数: 0=False, 1=True
文字列: ""=False, "abc"=True
リスト: []=False, [1]=True
デバッガ: breakpoint()
breakpoint()
関数 が呼び出された箇所からデバッガへ移行することができます。デバッガに移行することで1行ずつ処理を確認しながらデバッグすることが可能です。
※ バージョン3.7で追加
breakpoint(*args, **kwargs)
サンプル
arg = 1
breakpoint()
print(1)
print(2)
arg = 99
print(5)
実行結果
> /Users/user/Desktop/Python/test.py(7)<module>()
-> print(1)
(Pdb) arg
1
(Pdb) n
1
> /Users/user/Desktop/Python/test.py(8)<module>()
-> print(2)
(Pdb) n
2
> /Users/user/Desktop/Python/test.py(10)<module>()
-> arg = 99
(Pdb) n
> /Users/user/Desktop/Python/test.py(12)<module>()
-> print(5)
(Pdb) arg
99
(Pdb) n
5
--Return--
> /Users/user/Desktop/Python/test.py(12)<module>()->None
-> print(5)
(Pdb) n
バイト配列
bytearray()
ミュータブル(可変)なバイト配列を返します。
引数に指定する値によって以下のように初期化方法が変わります。
- 文字列の場合: 文字列をバイト配列に変換する際のencodingを指定する必要がある
- 整数の場合: 指定した整数のサイズの空バイト配列が生成される
- 配列の場合: 配列の要素が初期値として使用されます。ただし、0 <= x < 256内の整数でなければなりません
bytearray(source, encoding, errors)
サンプル
# 文字列
ba = bytearray('Hello', 'UTF-8')
print(ba)
# 整数
ba = bytearray(3)
print(ba)
# 配列
ba = bytearray([1, 2, 3])
print(ba)
実行結果
bytearray(b'Hello')
bytearray(b'\x00\x00\x00')
bytearray(b'\x01\x02\x03')
bytes()
イミュータブル(不変)なバイト配列を返します。この関数は、bytearray()
関数のイミュータブル版です。
bytes(source, encoding, errors)
サンプル
# 文字列
ba = bytes('Hello', 'UTF-8')
print(ba)
# 整数
ba = bytes(3)
print(ba)
# 配列
ba = bytes([1, 2, 3])
print(ba)
実行結果
b'Hello'
b'\x00\x00\x00'
b'\x01\x02\x03'
呼び出し可能オブジェクトか判定: callable()
引数に指定したオブジェクトが呼び出し可能であれば True
、でなければ False
を返します。インスタンスを指定した場合はクラスに __call__
メソッド が定義されている場合のみ True
を返します。
※ バージョン3.2で追加
callable(object)
サンプル
# 整数
print(f'整数: {callable(1)}')
# 組み込み関数
print(f'abs関数: {callable(abs)}')
# クラス
print(f'objectクラス: {callable(object)}')
# インスタンス(__call__メソッド無し)
obj = object()
print(f'インスタンス(callメソッド無し): {callable(obj)}')
# インスタンス(__call__メソッド有り)
class Obj:
def __call__(self):
return 'callしました'
obj = Obj()
print(f'インスタンス(callメソッド有り): {callable(obj)}')
実行結果
整数: False
abs関数: True
objectクラス: True
インスタンス(callメソッド無し): False
インスタンス(callメソッド有り): True
文字コード
chr()
引数に指定された文字コード(整数)を文字列に変換して返します。
chr(i)
サンプル
n = 97
print(f'文字コード: {n}, 文字: {chr(n)}')
n = 192
print(f'文字コード: {n}, 文字: {chr(n)}')
n = 33
print(f'文字コード: {n}, 文字: {chr(n)}')
実行結果
文字コード: 97, 文字: a
文字コード: 192, 文字: À
文字コード: 33, 文字: !
ord()
1文字の文字列を文字コードに変換して返します。
ord(c)
サンプル
print(ord('a'))
print(ord('A'))
print(ord('!'))
実行結果
97
65
33
クラスメソッド・スタティックメソッド
classmethod()
クラスメソッドを定義するためのデコレータです。cls
引数 からクラスにアクセスすることができます。メソッドの上部に記述します。
class クラス名:
@classmethod
def クラスメソッド名(cls):
なんらかの処理
サンプル
class C:
def __init__(self, arg=0):
self.arg = arg
@classmethod
def f(cls):
return cls(9)
t = C.f()
print(t.arg)
print(type(t))
実行結果
9
<class '__main__.C'>
staticmethod()
メソッドを静的メソッドに変換できます。デコレータとして使われます。
def クラス名:
@staticmethod
def メソッド名():
何かしらの処理
サンプル
class Obj:
@staticmethod
def static_method():
print('Objクラスのstatic_method')
Obj.static_method()
実行結果
Objクラスのstatic_method
コンパイルする
compile()
source
引数 に渡された値をコードオブジェクト、または ASTオブジェクト にコンパイルします。生成したコードオブジェクトは、exec()
で実行したり eval()
で評価することができます。
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
filename
コードの呼び出し元のファイルを指定する。ファイルから呼び出さないのであれば '<sting>'
を渡す。
mode
sourceによって指定する mode を変更します。
'exec'
: 一連の文からなる'eval'
: 単一の式'single'
: 単一の対話的文
サンプル
# 文
source = '''a = 1
b = 2
ab = a + b
'''
# sourceをコンパイルしてコードオブジェクトを生成
code_obj = compile(source, '<string>', 'exec')
# コードオブジェクトの実行
exec(code_obj)
print(a, b, ab) # コードオブジェクトを実行したことで生成された変数を呼び出す
# 単一の式
source = '1 + 2'
# sourceをコンパイルしてコードオブジェクトを生成
code_obj = compile(source, '<string>', 'eval')
# コードオブジェクトの実行
print(eval(code_obj))
実行結果
1 2 3
3
参考compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
eval()
文字列の式を評価できます。
eval(expression[, globals[, locals]])
サンプル
a = 1
b = 2
r = eval('a + b')
print(r)
実行結果
3
exec()
文字列の文をコードとして実行できます。
exec(object[, globals[, locals]])
サンプル
obj = '''a = 1
b = 2
c = a + b
'''
exec(obj)
print(a, b, c)
実行結果
1 2 3
数値型
complex()
複素数を生成したり文字列や数を複素数に変換できます。
complex(real, imag)
サンプル
c = complex('1j')
print(f"complex('1j') = {c}")
c = complex()
print(f"complex() = {c}")
c = complex(1)
print(f"complex(1) = {c}")
c = complex(1, 2)
print(f"complex(1, 2) = {c}")
実行結果
complex('1j') = 1j
complex() = 0j
complex(1) = (1+0j)
complex(1, 2) = (1+2j)
float()
空(0.0)の浮動小数点数を生成します。引数が指定されている場合はその値を float
型 に変換します。
float([x])
サンプル
f = float()
print(f'引数無し: {f}')
f = float('3.14')
print(f"'3.14': {f}")
f = float('3.14e-2')
print(f"'3.14e-2': {f}")
f = float(1)
print(f"1: {f}")
実行結果
引数無し: 0.0
'3.14': 3.14
'3.14e-2': 0.0314
1: 1.0
int()
整数オブジェクトを返します。
int(x)
サンプル
# 空
i = int()
print(f'int(): {i}')
# 文字列
i = int('2')
print(f"int('2'): {i}")
# 浮動小数点数
i = int(3.14)
print(f'int(3.14): {i}')
実行結果
int(): 0
int('2'): 2
int(3.14): 3
属性関連
delattr()
オブジェクトから指定された属性を削除できます。
delattr(object, name)
サンプル
# 空のクラス
class Obj:
pass
# インスタンス化
obj = Obj()
# 動的に属性の追加
obj.arg = 1
# 属性の出力
print(dir(obj))
# argの削除
delattr(obj, 'arg')
# 属性の出力
print(dir(obj))
実行結果
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'arg']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
getattr()
任意のオブジェクトから指定した名前の属性の値を取得します。指定された属性がない場合はデフォルトの値を渡しておくことでその値を返します。デフォルト値がない場合は AttributeError
が送出されます。
getattr(object, name, default)
サンプル
# rangeクラスのインスタンス生成
r = range(3)
# 属性の値の取得
stop = getattr(r, 'stop')
print(stop)
# 定義されていない属性(デフォルト有り)
length = getattr(r, 'length', len(r))
print(length)
# 定義されていない属性(デフォルト無し)
length = getattr(r, 'length')
print(length)
実行結果
3
3
AttributeError: 'range' object has no attribute 'length'
hasattr()
任意のオブジェクトに指定した文字列の属性が存在していれば True
、存在していなければ False
を返します。
hasattr(object, name)
サンプル
# rangeクラスのインスタンス生成
r = range(3)
# 定義されている属性
print(hasattr(r, 'stop'))
# 定義されていない属性
print(hasattr(r, 'length'))
実行結果
True
False
setattr()
任意のオブジェクトの属性を変更・追加することができます。
setattr(object, name, value)
サンプル
class Object:
pass
obj = Object()
setattr(obj, 'string', 'objです')
print(obj.string)
実行結果
objです
配列
dict()
辞書を生成します。
dict(**kwarg)
dict(mapping, **kwarg)
dict(iterable, **kwarg)
サンプル
d = dict()
print(d)
d = dict(one=1, two=2, three=3)
print(d)
d = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
print(d)
d = dict([('one', 1), ('two', 2), ('three', 3)])
print(d)
実行結果
{}
{'one': 1, 'two': 2, 'three': 3}
{'one': 1, 'two': 2, 'three': 3}
{'one': 1, 'two': 2, 'three': 3}
list()
リスト型のオブジェクトを返します。
list(iterable)
サンプル
l = list()
print(l)
# setから変換
l = list({1, 2, 3})
print(l)
実行結果
[]
[1, 2, 3]
set()
セット型のオブジェクトを生成して返します。
set(iterable)
サンプル
s = set([1, 2, 3])
# 重複する要素を持てない
s.add(1)
# 和集合
print(s.union([2, 3, 4]))
実行結果
{1, 2, 3, 4}
frozenset()
frozenset
オブジェクト を返します。frozenset は、イミュータブル(不変)な set
です。
frozenset(iterable)
サンプル
fs = frozenset([1, 2, 3])
# 和集合
union = fs.union({2, 3, 4})
print(union)
実行結果
frozenset({1, 2, 3, 4})
tuple
タプル型のオブジェクトを返します。
tuple(iterable)
サンプル
t = tuple([1, 2, 3])
print(t)
print(type(t))
実行結果
(1, 2, 3)
<class 'tuple'>
属性名の取得: dir()
属性名を取得します。引数無しの場合は自分自身の属性を取得し、引数有りの場合は引数に指定したオブジェクトの属性を取得します。
dir(object)
サンプル
print(dir())
# 新たに属性を生成
a = 10
l = []
print(dir())
# タプルの属性
print(dir(tuple))
実行結果
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'l']
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
商と剰余: divmod()
商とあまりをまとめて計算できます。
divmod(a, b)
サンプル
a = 3
b = 2
d, m = divmod(a, b)
print(f'{a} / {b} = {d}あまり{m}')
a = 4
b = 2
d, m = divmod(a, b)
print(f'{a} / {b} = {d}あまり{m}')
実行結果
3 / 2 = 1あまり1
4 / 2 = 2あまり0
要素とカウントを取得: enumrate()
ループ処理可能な enumrate
オブジェクトを返します。
引数にはイテラブルオブジェクトを取ります。
enumrate
オブジェクトは、ループ処理される際に引数で受け取ったイテラブルオブジェクトの要素とカウントを含んだタプルを返します。
start
引数を指定することでカウントの初期値を変更できます。
enumrate(iterable, start=0)
サンプル
l = ['a', 'b', 'c']
e = enumerate(l)
print(list(e))
for i, val in enumerate(l, start=1):
print(i, val)
実行結果
[(0, 'a'), (1, 'b'), (2, 'c')]
1 a
2 b
3 c
要素の抽出: filter()
引数で受け取ったイテラブルオブジェクトの要素を条件によって抽出することができます。function
引数 が None
ならイテラブルオブジェクトの False
の要素を全て除去できます。
filter(function, iterable)
サンプル
l = [0, 1, 2, 3, 4, 5, 6]
l = filter(lambda x: x % 2 == 0, l)
print(list(l))
l = [0, '', [], None]
l = filter(None, l)
print(list(l))
実行結果
[0, 2, 4, 6]
[]
フォーマット: format()
value
引数 に渡された値を書式指定文字列によって書式化します。
format(value, format_spec)
サンプル
# 2進数化
val = 8
print(format(val, 'b'))
# 中央寄せ
val = '文字列'
print(format(val, '!^8'))
実行結果
1000
!!文字列!!!
Link書式指定文字列の文法 — Python 3.9.1 ドキュメント
属性の取得
globals()
グローバル領域の属性を全て辞書形式で取得できます。
globals()
サンプル
def func():
pass
arg = '変数'
print(globals())
実行結果
{'__name__': '__main__', '__doc__': None, ...(省略), 'func': <function func at 0x10f57eb00>, 'arg': '変数'}
locals()
ローカル領域の属性を全て辞書形式で取得できます。
locals()
サンプル
def func():
arg = 1
print(locals())
func()
実行結果
{'arg': 1}
ハッシュ値: hash()
オブジェクトのハッシュ値を返します。
hash(object)
サンプル
print(hash(1))
print(hash('a'))
print(hash('a'))
実行結果
1
7360294545582337210
7360294545582337210
Linkバイト型のデータをハッシュ化する
ヘルプシステムの起動: help()
ヘルプシステムを起動します。引数を指定しなかった場合は対話的ヘルプシステムをコンソール上に起動します。
help(object)
サンプル
help(abs)
実行結果
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
識別値の取得: id()
オブジェクトの識別値を返します。
id(object)
サンプル
obj = object()
print(id(obj))
r = range(3)
print(id(r))
実行結果
4402905200
4404231888
外部から値を受け取る: input()
ターミナルやコマンドプロンプトから値を受け取ることができます。引数に文字列を指定することで標準出力にその値を出力してから値を受け取ります。
input(prompt)
サンプル
val = input('val: ')
print(val)
実行結果
val: valです
valです
指定したクラスのインスタンスかどうか: isinstance()
任意のインスタンスが指定したクラスのインスタンス化どうか、またはサブクラスのインスタンスかを判定します。
isinstance(object, classinfo)
サンプル
obj = object()
print(isinstance(obj, object))
l = []
print(isinstance(l, object))
実行結果
True
True
指定したクラスのサブクラスかどうか: issubclass()
任意のクラスが指定したクラスのサブクラスかどうかを判定できます。
issubclass(class, classinfo)
サンプル
print(isinstance(object, object))
print(issubclass(list, object))
実行結果
True
True
イテレータオブジェクト: iter()
イテレータオブジェクトを返します。引数を2つ指定した場合、第一引数の呼び出し可能オブジェクトを繰り返し呼び出し、第二引数に指定した値が返されるとループが終了します。
iter(object, sentinel)
サンプル
print(iter([1, 2, 3]))
実行結果
<list_iterator object at 0x1079eb410>
引数を2つ指定する
以下のコードは、exit
と入力することで終了できます。
l = []
for val in iter(input, 'exit'):
l.append(val)
print(l)
実行結果
a
b
c
exit
['a', 'b', 'c']
オブジェクトの長さ: len()
引数に指定したオブジェクトの長さを取得できます。
len(s)
サンプル
l = [1, 2, 3]
print(len(l))
s = 'abcde'
print(len(s))
実行結果
3
5
任意の関数を各要素に適用する: map()
第一引数で指定した関数を第二引数で指定したイテラブルオブジェクトの各要素に適用し、得られた結果のイテレータを返します。
map(function, iterable)
サンプル
r = map(abs, [1, -2, 3, -4])
print(list(r))
# ラムダ式を使ってみる
r = map(lambda x: x / 2, [1, 2, 3, 4])
print(list(r))
実行結果
[1, 2, 3, 4]
[0.5, 1.0, 1.5, 2.0]
最大値・最小値
max()
渡された複数の値の中で最大のものを返します。
max(iterable, key, default)
または
max(arg1, arg2, ..., argN, key)
- key: ソート時に使用される順序付け関数を変更できる。
- default: 渡されたイテラブルオブジェクトが空の場合に返す値を変更できます。
サンプル
# イテラブルオブジェクトを渡す
m = max([8, 1, 9, 2])
print(m)
# バラバラに値を渡す
m = max(8, 1, 9, 2)
print(m)
# keyを指定する
l = [range(2), range(3), range(1)]
m = max(l, key=lambda li: li.stop)
print(m)
実行結果
9
9
range(0, 3)
min()
渡された複数の値の中で最小のものを返します。
map(iterable, key, default)
または
map(arg1, arg2, ..., argN, key)
- key: ソート時に使用される順序付け関数を変更できる。
- default: 渡されたイテラブルオブジェクトが空の場合に返す値を変更できます。
サンプル
# イテラブルオブジェクトを渡す
m = min([8, 1, 9, 2])
print(m)
# バラバラに値を渡す
m = min(8, 1, 9, 2)
print(m)
# keyを指定する
l = [range(2), range(3), range(1)]
m = min(l, key=lambda li: li.stop)
print(m)
実行結果
1
1
range(0, 1)
メモリビューオブジェクト: memoryview()
任意のオブジェクトからメモリビューオブジェクトを生成します。引数には bytes、bytearray などのバッファプロトコルをサポートしているオブジェクトを指定します。
memoryview(obj)
サンプル
mv = memoryview(b'abcde')
print(mv[0])
print(mv[-1])
実行結果
97
101
参考メモリビュー
次の要素: next()
イテレータの __next__
メソッド を呼び出して次の要素を取得します。次の要素がなければ StopIteration
が送出されます。デフォルト値が設定されていればその値が返されます。
next(iterator, default)
サンプル
it = iter([1, 2, 3])
print(next(it))
print(next(it))
print(next(it))
print(next(it, 'デフォルト値'))
print(next(it))
実行結果
1
2
3
デフォルト値
StopIteration
オブジェクトクラス: object()
全てのクラスの基底クラスであるオブジェクトクラスを生成します。
object()
サンプル
obj = object()
print(obj)
実行結果
<object object at 0x10211a070>
ファイル操作: open()
任意のファイルを開いてファイルオブジェクトを返します。ファイルオブジェクトを使うことでファイルを読み込んだり書き込んだりすることができます。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
サンプル
file_name = 'test.txt'
# 書き込み
f = open(file_name, 'w')
f.write('テスト')
f.close()
# コンテキストマネージャを利用した読み込み
with open(file_name, 'r') as f:
print(f.read())
実行結果
テスト
累乗: pow()
任意の累乗を計算できます。base
の exp
乗 を返します。mod
引数 を指定することでbase
の exp
乗 % mod
を返します。
pow(base, exp, mod)
サンプル
# 2の3乗
p = pow(2, 3)
print(p)
# 2の3乗 % 5 と等価
p = pow(2, 3, 5)
print(p)
実行結果
8
3
出力: print()
任意のオブジェクトを標準出力に出力します。
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- sep: 区切り文字の指定
- end: 末尾の文字
- file: 出力先
- flush: 真ならストリームを強制的にフラッシュする
サンプル
# 標準出力に出力
print('Hello World')
# 区切り文字の指定
print('a', 'b', 'c', sep='/')
# 末尾の文字の指定
print('data', end=': ')
print('abc')
# 出力先の変更
f = open('test.txt', 'w')
print('printで出力', file=f)
f.close()
実行結果
Hello World
a/b/c
data: abc
プロパティ: property()
クラスにプロパティを定義できます。
property(fget=None, fset=None, fdel=None, doc=None)
または
@property
サンプル
class Object:
def __init__(self, arg):
self.__arg = arg
# setter
def _set_arg(self, arg):
self.__arg = arg
# getter
def _get_arg(self):
return self.__arg
# deleter
def _del_arg(self):
self.__arg = None
# プロパティの作成(引数に getter, setter, deleterの順で渡す)
arg = property(_get_arg, _set_arg, _del_arg)
# インスタンス化
obj = Object(1)
# getter呼び出し
print(obj.arg)
# setter呼び出し
obj.arg = 5
# deleter呼び出し
del obj.arg
# getter呼び出し
print(obj.arg)
実行結果
1
None
範囲の生成: range()
range
型 のオブジェクトを生成します。
range(stop)
または
range(start, stop, step)
サンプル
for i in range(3):
print(i)
実行結果
0
1
2
並び替え
reversed()
要素を逆順に返すイテレータオブジェクトを返します。
reversed(seq)
サンプル
l = [8, 1, 9, 2]
r_l = reversed(l)
print(list(r_l))
実行結果
[2, 9, 1, 8]
sorted()
イテラブルオブジェクトの要素を並び替えたリストを返します。
sorted(iterable, *, key=None, reverse=False)
サンプル
l = [8, 1, 9, 2]
# 昇順
s_l = sorted(l)
print(s_l)
# 降順
s_l = sorted(l, reverse=True)
print(s_l)
# keyの指定
s_l = sorted(l, key=lambda x: x % 2)
print(s_l)
実行結果
[1, 2, 8, 9]
[9, 8, 2, 1]
[8, 2, 1, 9]
値を小数で丸める: round()
引数に渡された値の小数を丸めます。
round(number, ndigits)
サンプル
f = 3.14
print(round(f))
f = 2.5
print(round(f))
実行結果
3
2
スライス: slice()
スライスオブジェクトを生成して返します。引数には range
関数 と同じ値を取ります。
slice(stop)
または
slice(start, stop, step)
サンプル
l = [1, 2, 3, 4, 5, 6]
# l[:3] と同様
print(l[slice(3)])
# l[1:6:2] と同様
print(l[slice(1, 6, 2)])
実行結果
[1, 2, 3]
[2, 4, 6]
合計: sum()
イテラブルオブジェクトの要素の合計を返します。
sum(iterable, start=0)
サンプル
# 1 + 2 + 3
r = sum([1, 2, 3])
print(r)
# 初期値を指定
r = sum([1, 2, 3], 100)
print(r)
実行結果
6
106
親クラスにアクセス: super()
親クラスにアクセスできます。
super()
サンプル
class A:
def __init__(self):
print('Aクラスのコンストラクタが呼び出されました!')
class B(A):
def __init__(self):
super().__init__()
print('Bクラスのコンストラクタが呼び出されました!')
b = B()
実行結果
Aクラスのコンストラクタが呼び出されました!
Bクラスのコンストラクタが呼び出されました!
型を確認: type()
オブジェクトの型を確認することができます。引数を3つ指定することで動的にクラスを定義することができます。
type(object)
または
type(name, bases, dict)
サンプル
print(type(1))
print(type('文字'))
実行結果
<class 'int'>
<class 'str'>
動的にクラスを定義する
引数にはクラス名、基底クラス、属性の定義を渡します。
# TestClassを動的に定義
TestClass = type('TestType', (object,), dict(arg=1))
# インスタンス化
tc = TestClass()
print(tc)
# クラス変数にアクセス
print(TestClass.arg)
実行結果
<__main__.TestType object at 0x10c47c490>
1
__dict__の取得: vars()
オブジェクトの __dict__
属性 を辞書型で返します。引数を指定しないことで locals
関数 と同じようにローカル領域の属性を取得できます。
vars(object)
サンプル
class Object:
a = 1
def __init__(self):
self.b = 2
self._c = 3
self.__d = 4
e = 5
def f(self):
pass
@property
def d(self):
return self.__d
@d.setter
def d(self, other):
self.__d = other
obj = Object()
print(vars(obj))
実行結果
{'b': 2, '_c': 3, '_Object__d': 4}
locals関数と同じ
print(vars() == locals())
実行結果
True
イテラブルオブジェクトをまとめる: zip()
複数のイテラブルオブジェクトの要素をまとめたイテレータを返します。
zip(*iterables)
サンプル
l = [1, 2, 3]
t = (4, 5, 6, 7)
lt = zip(l, t)
print(list(lt))
実行結果
[(1, 4), (2, 5), (3, 6)]
__import__()
この関数は import
文 により呼び出されます。
この関数を直接呼び出すことは推奨されていないので代わりにimportlib.import_module()を使ってください。
まとめ
この記事では、Python の組み込み関数について簡単に解説しました。
Python には、とても多くの組み込み関数が用意されていて便利ですが、まとめて覚えるのは大変なので使いかながら慣れていきましょう!
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ
参考組み込み関数