はじめに
Pythonにはプログラムを書く上で頻繁に使われる便利な関数が組み込み関数として用意されています。
これらはインポートする必要がなく、どのスクリプトやプログラムでもすぐに利用可能です。
この記事では各組み込み関数の使い方を実際のコード例や注意点を交えながらまとめました!
参考:
abs()
絶対値を返します(負の数を正の数に変換します)。
print(abs(-5)) # 出力: 5
print(abs(3.14)) # 出力: 3.14
aiter()
非同期反復可能オブジェクトを返します。
import asyncio
class AsyncIterable:
def __init__(self, n):
self.n = n
def __aiter__(self):
self.count = 0
return self
async def __anext__(self):
if self.count < self.n:
self.count += 1
return self.count
raise StopAsyncIteration
async def main():
async for num in aiter(AsyncIterable(3)):
print(num)
asyncio.run(main())
# 出力:
# 1
# 2
# 3
all()
すべての要素が真ならTrueを返します。
print(all([True, True, False])) # 出力: False
print(all([1, 2, 3])) # 出力: True
使用時の注意点
引数の配列が空の場合はTrueになります。
print(all([])) # 出力: True
anext()
非同期イテレータから次の値を取得します。
import asyncio
class AsyncIterator:
def __init__(self, n):
self.n = n
def __aiter__(self):
self.count = 0
return self
async def __anext__(self):
if self.count < self.n:
self.count += 1
return self.count
raise StopAsyncIteration
async def main():
iterator = AsyncIterator(3)
print(await anext(iterator)) # 出力: 1
print(await anext(iterator)) # 出力: 2
asyncio.run(main())
any()
いずれかの要素が真の場合にTrue
を返します。
print(any([False, False, True])) # 出力: True
使用時の注意点
引数の配列が空の場合はFalseになります。
print(any([])) # 出力: False
ascii()
特殊文字をエスケープした文字列を返します。
例えば、日本語や特殊記号をUnicodeエスケープ(\uXXXX形式)に変換します。
print(ascii("こんにちは")) # 出力: '\u3053\u3093\u306b\u3061\u306f'
bin()
整数を2進数表記の文字列に変換します。結果は0b
で始まる文字列として返されます。
print(bin(10)) # 出力: '0b1010'
print(bin(-10)) # 出力: '-0b1010'
bool()
オブジェクトを真偽値に変換します。
print(bool(0)) # 出力: False
print(bool(1)) # 出力: True
print(bool("")) # 出力: False
print(bool("Hello")) # 出力: True
breakpoint()
デバッガを起動します。
開発中にコードの挙動を確認したいときに便利です。
breakpoint()を通るとPDBのデバッグモードに入ります。
def test():
a = 10
breakpoint() # デバッグモードに入る
print(a)
test()
callable()
オブジェクトが「関数として呼び出し可能」かどうかを判定し、TrueまたはFalseを返します。
普通の値(数値や文字列)はFalseを返します。
def example_function():
pass
class CallableClass:
def __call__(self):
pass
print(callable(example_function)) # 出力: True
print(callable(42)) # 出力: False
print(callable(CallableClass())) # 出力: True
chr()
指定されたユニコード値に対応する文字を返します。
print(chr(97)) # 出力: 'a'
print(chr(8364)) # 出力: '€'
classmethod()
クラスメソッドを定義します。メソッドの第1引数にクラス自体(cls)を渡します。
class MyClass:
value = 0
@classmethod
def set_value(cls, new_value):
cls.value = new_value
MyClass.set_value(10)
print(MyClass.value) # 出力: 10
compile()
ソースコード文字列をコンパイルして実行可能なコードオブジェクトを生成します。
code = "x = 5\ny = 10\nprint(x + y)"
compiled_code = compile(code, "<string>", "exec")
exec(compiled_code) # 出力: 15
complex()
複素数を生成します。
z = complex(3, 4)
print(z) # 出力: (3+4j)
print(z.real) # 出力: 3.0
print(z.imag) # 出力: 4.0
delattr()
指定したオブジェクトの属性を削除します。
class MyClass:
def __init__(self):
self.attribute = 42
obj = MyClass()
print(obj.attribute) # 出力: 42
dir()
オブジェクトが持つ属性やメソッドの一覧をリストとして返します。
print(dir([])) # 出力: ['__add__', '__class__', '__contains__', ...]
divmod()
商と剰余を同時に計算し、それをタプルとして返します。
print(divmod(10, 3)) # 出力: (3, 1)
print(divmod(10, -3)) # 出力: (-4, -2)
enumerate()
イテラブルの各要素にインデックスを追加して返します。
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(index, fruit)
# 出力:
# 0 apple
# 1 banana
# 2 cherry
eval()
引数として渡された文字列をPython式として評価し、その結果を返します。
expression = "3 + 5 * 2"
print(eval(expression)) # 出力: 13
exec()
引数として渡された文字列をPythonコードとして実行します。
code = """
for i in range(3):
print(i)
"""
exec(code)
# 出力:
# 0
# 1
# 2
filter()
イテラブルの要素を関数でフィルタリングし、条件を満たす要素を返します。
numbers = [1, 2, 3, 4, 5]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 出力: [2, 4]
float()
数値または数値表現の文字列を浮動小数点数に変換します。
print(float(10)) # 出力: 10.0
print(float("3.14")) # 出力: 3.14
format()
指定した書式で文字列をフォーマットします。
print("Hello, {}!".format("World")) # 出力: Hello, World!
print("{:.2f}".format(3.14159)) # 出力: 3.14
getattr()
オブジェクトの属性値を取得します。属性が存在しない場合は、デフォルト値を返します。
class MyClass:
def __init__(self):
self.name = "Example"
obj = MyClass()
print(getattr(obj, "name")) # 出力: Example
print(getattr(obj, "age", 30)) # 出力: 30
globals()
現在のグローバルシンボルテーブルを辞書形式で取得します。
x = 10
print(globals()["x"]) # 出力: 10
hasattr()
オブジェクトが指定された名前の属性を持つかどうかを確認します。
class MyClass:
def __init__(self):
self.name = "Example"
obj = MyClass()
print(hasattr(obj, "name")) # 出力: True
print(hasattr(obj, "age")) # 出力: False
hash()
オブジェクトのハッシュ値を計算して返します。
print(hash("example")) # 出力: ハッシュ値
print(hash((1, 2, 3))) # 出力: ハッシュ値
使用時の注意点
ミュータブル(変更可能なオブジェクトはhash化できずTypeErrorが出ます。
print(hash([1, 2, 3])) # TypeError: unhashable type: 'list'
help()
オブジェクトやモジュールに関するヘルプ情報を表示します。
class SampleClass:
"""
サンプルクラスです
"""
...
print(help(SampleClass))
# 出力
# Help on class SampleClass in module __main__:
#
# class SampleClass(builtins.object)
# | サンプルクラスです
# |
# | Data descriptors defined here:
# |
# | __dict__
# | dictionary for instance variables (if defined)
# |
# | __weakref__
# | list of weak references to the object (if defined)
#
# None
hex()
数値を16進数表記の文字列に変換します。
print(hex(255)) # 出力: '0xff'
print(hex(16)) # 出力: '0x10'
id()
オブジェクトの一意な識別番号を返します(通常はオブジェクトのメモリアドレスに基づきます)。
a = 42
b = 42
print(id(a)) # a と b の id は同じ(Pythonの最適化による)
print(id(b)) # 出力例: 139941421819920
input()
ユーザーから入力を受け取り、それを文字列として返します。
user_input = input("名前を入力: ")
print(f"こんにちは{user_input}!")
# 出力(名前はユーザーからの入力内容になります)
# 名前を入力: Qiita
# こんにちはQiita!
int()
数値または数値文字列を整数に変換します。
print(int(3.14)) # 出力: 3
print(int("42")) # 出力: 42
print(int("101", 2)) # 2進数として解釈: 出力: 5
isinstance()
オブジェクトが特定の型かどうかを確認します。
print(isinstance(42, int)) # 出力: True
print(isinstance("hello", str)) # 出力: True
print(isinstance([1, 2, 3], list)) # 出力: True
issubclass()
指定したクラスが他のクラスのサブクラスかどうかを確認します。
class A: pass
class B(A): pass
class C: pass
print(issubclass(B, A)) # 出力: True
print(issubclass(C, A)) # 出力: False
iter()
イテラブルからイテレータを返します。イテレータはnext()
を使用して次の要素を取得できます。
numbers = [1, 2, 3]
it = iter(numbers)
print(next(it)) # 出力: 1
print(next(it)) # 出力: 2
print(next(it)) # 出力: 3
len()
オブジェクトの要素数を返します(文字列、リスト、辞書などに対応)。
print(len("hello")) # 出力: 5
print(len([1, 2, 3, 4])) # 出力: 4
print(len({"a": 1, "b": 2})) # 出力: 2
locals()
現在のローカルシンボルテーブルを辞書形式で取得します。
ef example():
x = 10
print(locals())
example()
# 出力例: {'x': 10}
map()
関数をイテラブルの各要素に適用し、新しいイテラブルを返します。
numbers = [1, 2, 3]
squared = map(lambda x: x**2, numbers)
print(list(squared)) # 出力: [1, 4, 9]
max()
イテラブル内の最大値を返します。複数の引数を渡した場合はその中で最大の値を返します。
print(max([1, 2, 3])) # 出力: 3
print(max(10, 20, 30)) # 出力: 30
print(max("apple", "banana", "cherry")) # 出力: 'cherry'
min()
イテラブル内の最小値を返します。複数の引数を渡した場合はその中で最小の値を返します。
print(min([1, 2, 3])) # 出力: 1
print(min(10, 20, 30)) # 出力: 10
print(min("apple", "banana", "cherry")) # 出力: 'apple'
next()
イテレータの次の要素を返します。
it = iter([1, 2, 3])
print(next(it)) # 出力: 1
print(next(it)) # 出力: 2
print(next(it)) # 出力: 3
object()
基本オブジェクトを作成します。新しいスタイルのクラスの基底クラスとして利用されます。
obj = object()
print(obj) # 出力例: <object object at 0x7f0e1e6c2d30>
oct()
数値を8進数表記の文字列に変換します。
print(oct(8)) # 出力: '0o10'
print(oct(64)) # 出力: '0o100'
open()
ファイルを開き、ファイルオブジェクトを返します。読み取り、書き込み、追記モードなどが利用可能です。
# 読み取り
with open("example.txt", "r") as f:
content = f.read()
print(content)
# 書き込み
with open("example.txt", "w") as f:
f.write("Hello, World!")
ord()
文字をそのUnicodeコードポイント(整数)に変換します。
引数は1文字の文字列でなければなりません。
print(ord('A')) # 出力: 65
print(ord('あ')) # 出力: 12354
pow()
冪乗を計算します。オプションで3つ目の引数を指定すると、結果をその値で割った余りを返します。
print(pow(2, 3)) # 出力: 8
print(pow(2, 3, 5)) # 出力: 3 (2**3 % 5)
print()
指定されたオブジェクトを文字列に変換し、標準出力に表示します。
print("Hello", "World") # 出力: Hello World!
property
クラスの属性をプロパティとして定義します(ゲッター、セッター、デリーターを使用可能)
class MyClass:
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
@value.setter
def value(self, new_value):
self._value = new_value
obj = MyClass(10)
print(obj.value) # 出力: 10
obj.value = 20
print(obj.value) # 出力: 20
repr()
オブジェクトの公式文字列表現を返します。この文字列表現は、eval()で再びオブジェクトを生成するために使用できる形式を目指しています(可能な場合)。
x = [1, 2, 3]
print(repr(x)) # 出力: '[1, 2, 3]'
y = "Hello\nWorld"
print(repr(y)) # 出力: "'Hello\\nWorld'"
reversed()
与えられたシーケンス(リスト、文字列など)を逆順にするイテレータを返します。
lst = [1, 2, 3]
for item in reversed(lst):
print(item) # 出力: 3, 2, 1
text = "Hello"
print("".join(reversed(text))) # 出力: 'olleH'
round()
浮動小数点数を指定された桁数に丸めます。桁数を指定しない場合は整数に丸めます。
print(round(3.14159, 2)) # 出力: 3.14
print(round(3.5)) # 出力: 4
使用時の注意点
round()
関数は、ちょうど中間値(例: 0.5)の場合に「最も近い偶数」に丸めるという「偶数への丸め」規則を使用します。
一般的な四捨五入をする場合はdecimal
モジュールのquantizeなどを使用する必要があります。
print(round(2.5)) # 出力: 2
setattr()
オブジェクトの属性に値を設定します。
class MyClass:
pass
obj = MyClass()
setattr(obj, "name", "Qiita")
print(obj.name) # 出力: 'Qiita'
slice()
スライスオブジェクトを作成します。リストやタプルの一部を取得するのに使用します。
items = [0, 1, 2, 3, 4, 5]
s = slice(1, 5, 2) # 開始: 1, 終了: 5, ステップ: 2
print(items[s]) # 出力: [1, 3]
sorted()
イテラブルをソートした新しいリストを返します。
ソート基準を指定する場合はkey
引数を利用します。
nums = [5, 2, 9, 1]
print(sorted(nums)) # 出力: [1, 2, 5, 9]
print(sorted(nums, reverse=True)) # 出力: [9, 5, 2, 1]
words = ["apple", "banana", "cherry"]
print(sorted(words, key=len)) # 出力: ['apple', 'cherry', 'banana']
staticmethod()
クラス内でインスタンスやクラス自体を参照せずに使用できる静的メソッドを作成します。
class MyClass:
@staticmethod
def greet():
print("Hello, World!")
MyClass.greet() # 出力: 'Hello, World!'
sum()
イテラブル内の全ての要素を合計します。初期値を指定することもできます。
nums = [1, 2, 3, 4]
print(sum(nums)) # 出力: 10
print(sum(nums, 10)) # 出力: 20 (初期値を指定)
super()
親クラスを参照します。主に継承関係で親クラスのメソッドを呼び出すのに使用します。
class Parent:
def greet(self):
print("Hello from Parent")
class Child(Parent):
def greet(self):
super().greet() # 親クラスのgreet()を呼び出す
print("Hello from Child")
c = Child()
c.greet()
# 出力:
# Hello from Parent
# Hello from Child
type()
オブジェクトの型を返します。また、新しい型を作成することもできます。
print(type(10)) # 出力: <class 'int'>
print(type("hello")) # 出力: <class 'str'>
# 動的に新しいクラスを作成
MyClass = type('MyClass', (object,), {'x': 10})
obj = MyClass()
print(obj.x) # 出力: 10
vars()
オブジェクトの属性を辞書として返します。
class MyClass:
def __init__(self):
self.name = "Alice"
self.age = 30
obj = MyClass()
print(vars(obj)) # 出力: {'name': 'Alice', 'age': 30}
zip()
複数のイテラブルを並列に処理するためのイテレータを作成します。
a = [1, 2, 3]
b = ['a', 'b', 'c']
print(list(zip(a, b))) # 出力: [(1, 'a'), (2, 'b'), (3, 'c')]
# 長さが異なる場合
c = [10, 20]
print(list(zip(a, c))) # 出力: [(1, 10), (2, 20)]
使用時の注意点
長さの異なるイテラブルを渡した場合、短い方に合わせてトリミングされます。
a = [1, 2, 3]
# 長さが異なる場合
c = [10, 20]
print(list(zip(a, c))) # 出力: [(1, 10), (2, 20)]
まとめ
今回はPythonの組み込み関数についてまとめてみました。
個人的に使用時に注意するべきだと思うところには使用時の注意点として記載しているのでぜひ見てみてください