Pythonの組み込み関数についてまとめてみた

# はじめに

Pythonにはプログラムを書く上で頻繁に使われる便利な関数が**組み込み関数**として用意されています。
これらはインポートする必要がなく、どのスクリプトやプログラムでもすぐに利用可能です。

この記事では各組み込み関数の使い方を**実際のコード例**や**注意点**を交えながらまとめました！

参考:

https://docs.python.org/ja/3.13/library/functions.html#abs

## abs()
絶対値を返します(負の数を正の数に変換します)。
```python
print(abs(-5))  # 出力: 5
print(abs(3.14))  # 出力: 3.14
```

## aiter()
非同期反復可能オブジェクトを返します。
```python
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を返します。
```python
print(all([True, True, False]))  # 出力: False
print(all([1, 2, 3]))  # 出力: True
```

:::note warn
**使用時の注意点**
引数の配列が空の場合はTrueになります。
```python
print(all([]))  # 出力: True
```
:::


## anext()
非同期イテレータから次の値を取得します。
```python
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`を返します。
```python
print(any([False, False, True]))  # 出力: True
```

:::note warn
**使用時の注意点**
引数の配列が空の場合はFalseになります。
```python
print(any([]))  # 出力: False
```
:::

## ascii()
特殊文字をエスケープした文字列を返します。
例えば、日本語や特殊記号をUnicodeエスケープ（\uXXXX形式）に変換します。
```python
print(ascii("こんにちは"))  # 出力: '\u3053\u3093\u306b\u3061\u306f'
```

## bin()
整数を2進数表記の文字列に変換します。結果は`0b`で始まる文字列として返されます。
```python
print(bin(10))  # 出力: '0b1010'
print(bin(-10))  # 出力: '-0b1010'
```

## bool()
オブジェクトを真偽値に変換します。
```python
print(bool(0))  # 出力: False
print(bool(1))  # 出力: True
print(bool(""))  # 出力: False
print(bool("Hello"))  # 出力: True
```

## breakpoint()
デバッガを起動します。
開発中にコードの挙動を確認したいときに便利です。
breakpoint()を通ると[PDB](https://docs.python.org/ja/3/library/pdb.html)のデバッグモードに入ります。

```python
def test():
    a = 10
    breakpoint()  # デバッグモードに入る
    print(a)

test()
```

## callable()
オブジェクトが「関数として呼び出し可能」かどうかを判定し、TrueまたはFalseを返します。

普通の値（数値や文字列）はFalseを返します。
```python
def example_function():
    pass

class CallableClass:
    def __call__(self):
        pass

print(callable(example_function))  # 出力: True
print(callable(42))  # 出力: False
print(callable(CallableClass()))  # 出力: True
```

## chr()
指定されたユニコード値に対応する文字を返します。
```python
print(chr(97))  # 出力: 'a'
print(chr(8364))  # 出力: '€'
```

## classmethod()
クラスメソッドを定義します。メソッドの第1引数にクラス自体（cls）を渡します。
```python
class MyClass:
    value = 0

    @classmethod
    def set_value(cls, new_value):
        cls.value = new_value

MyClass.set_value(10)
print(MyClass.value)  # 出力: 10
```

## compile()
ソースコード文字列をコンパイルして実行可能なコードオブジェクトを生成します。
```python
code = "x = 5\ny = 10\nprint(x + y)"
compiled_code = compile(code, "<string>", "exec")
exec(compiled_code)  # 出力: 15
```

## complex()
複素数を生成します。
```python
z = complex(3, 4)
print(z)  # 出力: (3+4j)
print(z.real)  # 出力: 3.0
print(z.imag)  # 出力: 4.0
```

## delattr()
指定したオブジェクトの属性を削除します。
```python
class MyClass:
    def __init__(self):
        self.attribute = 42

obj = MyClass()
print(obj.attribute)  # 出力: 42
```

## dir()
オブジェクトが持つ属性やメソッドの一覧をリストとして返します。
```python
print(dir([]))  # 出力: ['__add__', '__class__', '__contains__', ...]
```

## divmod()
商と剰余を同時に計算し、それをタプルとして返します。
```python
print(divmod(10, 3))  # 出力: (3, 1)
print(divmod(10, -3))  # 出力: (-4, -2)
```

## enumerate()
イテラブルの各要素にインデックスを追加して返します。
```python
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(index, fruit)
# 出力:
# 0 apple
# 1 banana
# 2 cherry
```

## eval()
引数として渡された文字列をPython式として評価し、その結果を返します。
```python
expression = "3 + 5 * 2"
print(eval(expression))  # 出力: 13
```

## exec()
引数として渡された文字列をPythonコードとして実行します。
```python
code = """
for i in range(3):
    print(i)
"""
exec(code)
# 出力:
# 0
# 1
# 2
```

## filter()
イテラブルの要素を関数でフィルタリングし、条件を満たす要素を返します。
```python
numbers = [1, 2, 3, 4, 5]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers))  # 出力: [2, 4]
```

## float()
数値または数値表現の文字列を浮動小数点数に変換します。
```python
print(float(10))  # 出力: 10.0
print(float("3.14"))  # 出力: 3.14
```

## format()
指定した書式で文字列をフォーマットします。
```python
print("Hello, {}!".format("World"))  # 出力: Hello, World!
print("{:.2f}".format(3.14159))  # 出力: 3.14
```

## getattr()
オブジェクトの属性値を取得します。属性が存在しない場合は、デフォルト値を返します。
```python
class MyClass:
    def __init__(self):
        self.name = "Example"

obj = MyClass()
print(getattr(obj, "name"))  # 出力: Example
print(getattr(obj, "age", 30))  # 出力: 30
```

## globals()
現在のグローバルシンボルテーブルを辞書形式で取得します。
```python
x = 10
print(globals()["x"])  # 出力: 10
```

## hasattr()
オブジェクトが指定された名前の属性を持つかどうかを確認します。
```python
class MyClass:
    def __init__(self):
        self.name = "Example"

obj = MyClass()
print(hasattr(obj, "name"))  # 出力: True
print(hasattr(obj, "age"))  # 出力: False
```

## hash()
オブジェクトのハッシュ値を計算して返します。
```python
print(hash("example"))  # 出力: ハッシュ値
print(hash((1, 2, 3)))  # 出力: ハッシュ値
```

### 使用時の注意点
ミュータブル(変更可能なオブジェクトはhash化できずTypeErrorが出ます。
```python
print(hash([1, 2, 3]))  # TypeError: unhashable type: 'list'
```

## help()
オブジェクトやモジュールに関するヘルプ情報を表示します。
```python
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進数表記の文字列に変換します。
```python
print(hex(255))  # 出力: '0xff'
print(hex(16))   # 出力: '0x10'
```

## id()
オブジェクトの一意な識別番号を返します（通常はオブジェクトのメモリアドレスに基づきます）。
```python
a = 42
b = 42
print(id(a))  # a と b の id は同じ（Pythonの最適化による）
print(id(b))  # 出力例: 139941421819920
```

## input()
ユーザーから入力を受け取り、それを文字列として返します。
```python
user_input = input("名前を入力: ")
print(f"こんにちは{user_input}!")

# 出力(名前はユーザーからの入力内容になります)
# 名前を入力: Qiita
# こんにちはQiita!
```

## int()
数値または数値文字列を整数に変換します。
```python
print(int(3.14))       # 出力: 3
print(int("42"))       # 出力: 42
print(int("101", 2))   # 2進数として解釈: 出力: 5
```

## isinstance()
オブジェクトが特定の型かどうかを確認します。
```python
print(isinstance(42, int))           # 出力: True
print(isinstance("hello", str))     # 出力: True
print(isinstance([1, 2, 3], list))  # 出力: True
```

## issubclass()
指定したクラスが他のクラスのサブクラスかどうかを確認します。
```python
class A: pass
class B(A): pass
class C: pass

print(issubclass(B, A))  # 出力: True
print(issubclass(C, A))  # 出力: False
```

## iter()
イテラブルからイテレータを返します。イテレータは`next()`を使用して次の要素を取得できます。
```python
numbers = [1, 2, 3]
it = iter(numbers)
print(next(it))  # 出力: 1
print(next(it))  # 出力: 2
print(next(it))  # 出力: 3
```

## len()
オブジェクトの要素数を返します（文字列、リスト、辞書などに対応）。
```python
print(len("hello"))         # 出力: 5
print(len([1, 2, 3, 4]))    # 出力: 4
print(len({"a": 1, "b": 2}))  # 出力: 2
```

## locals()
現在のローカルシンボルテーブルを辞書形式で取得します。
```python
ef example():
    x = 10
    print(locals())

example()
# 出力例: {'x': 10}
```

## map()
関数をイテラブルの各要素に適用し、新しいイテラブルを返します。
```python
numbers = [1, 2, 3]
squared = map(lambda x: x**2, numbers)
print(list(squared))  # 出力: [1, 4, 9]
```

## max()
イテラブル内の最大値を返します。複数の引数を渡した場合はその中で最大の値を返します。
```python
print(max([1, 2, 3]))  # 出力: 3
print(max(10, 20, 30)) # 出力: 30
print(max("apple", "banana", "cherry"))  # 出力: 'cherry'
```

## min()
イテラブル内の最小値を返します。複数の引数を渡した場合はその中で最小の値を返します。
```python
print(min([1, 2, 3]))  # 出力: 1
print(min(10, 20, 30)) # 出力: 10
print(min("apple", "banana", "cherry"))  # 出力: 'apple'
```

## next()
イテレータの次の要素を返します。
```python
it = iter([1, 2, 3])
print(next(it))  # 出力: 1
print(next(it))  # 出力: 2
print(next(it))  # 出力: 3
```

## object()
基本オブジェクトを作成します。新しいスタイルのクラスの基底クラスとして利用されます。
```python
obj = object()
print(obj)  # 出力例: <object object at 0x7f0e1e6c2d30>
```

## oct()
数値を8進数表記の文字列に変換します。
```python
print(oct(8))   # 出力: '0o10'
print(oct(64))  # 出力: '0o100'
```

## open()
ファイルを開き、ファイルオブジェクトを返します。読み取り、書き込み、追記モードなどが利用可能です。
```python
# 読み取り
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文字の文字列でなければなりません。
```python
print(ord('A'))  # 出力: 65
print(ord('あ')) # 出力: 12354
```

## pow()
冪乗を計算します。オプションで3つ目の引数を指定すると、結果をその値で割った余りを返します。
```python
print(pow(2, 3))        # 出力: 8
print(pow(2, 3, 5))     # 出力: 3 (2**3 % 5)
```

## print()
指定されたオブジェクトを文字列に変換し、標準出力に表示します。
```python
print("Hello", "World") # 出力: Hello World!
```

## property
クラスの属性をプロパティとして定義します（ゲッター、セッター、デリーターを使用可能）
```python
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()で再びオブジェクトを生成するために使用できる形式を目指しています（可能な場合）。
```python
x = [1, 2, 3]
print(repr(x))  # 出力: '[1, 2, 3]'

y = "Hello\nWorld"
print(repr(y))  # 出力: "'Hello\\nWorld'"
```

## reversed()
与えられたシーケンス（リスト、文字列など）を逆順にするイテレータを返します。
```python
lst = [1, 2, 3]
for item in reversed(lst):
    print(item)  # 出力: 3, 2, 1

text = "Hello"
print("".join(reversed(text)))  # 出力: 'olleH'
```

## round()
浮動小数点数を指定された桁数に丸めます。桁数を指定しない場合は整数に丸めます。
```python
print(round(3.14159, 2))  # 出力: 3.14
print(round(3.5))         # 出力: 4
```


:::note warn
**使用時の注意点**
`round()`関数は、ちょうど中間値（例: 0.5）の場合に「最も近い偶数」に丸めるという「偶数への丸め」規則を使用します。
一般的な四捨五入をする場合は`decimal`モジュールのquantizeなどを使用する必要があります。
```python
print(round(2.5))         # 出力: 2
```
:::


## setattr()
オブジェクトの属性に値を設定します。
```python
class MyClass:
    pass

obj = MyClass()
setattr(obj, "name", "Qiita")
print(obj.name)  # 出力: 'Qiita'
```

## slice()
スライスオブジェクトを作成します。リストやタプルの一部を取得するのに使用します。
```python
items = [0, 1, 2, 3, 4, 5]
s = slice(1, 5, 2)  # 開始: 1, 終了: 5, ステップ: 2
print(items[s])     # 出力: [1, 3]
```

## sorted()
イテラブルをソートした新しいリストを返します。
ソート基準を指定する場合は`key`引数を利用します。
```python
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()
クラス内でインスタンスやクラス自体を参照せずに使用できる静的メソッドを作成します。
```python
class MyClass:
    @staticmethod
    def greet():
        print("Hello, World!")

MyClass.greet()  # 出力: 'Hello, World!'
```

## sum()
イテラブル内の全ての要素を合計します。初期値を指定することもできます。
```python
nums = [1, 2, 3, 4]
print(sum(nums))  # 出力: 10
print(sum(nums, 10))  # 出力: 20 (初期値を指定)
```

## super()
親クラスを参照します。主に継承関係で親クラスのメソッドを呼び出すのに使用します。
```python
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()
オブジェクトの型を返します。また、新しい型を作成することもできます。
```python
print(type(10))  # 出力: <class 'int'>
print(type("hello"))  # 出力: <class 'str'>

# 動的に新しいクラスを作成
MyClass = type('MyClass', (object,), {'x': 10})
obj = MyClass()
print(obj.x)  # 出力: 10
```

## vars()
オブジェクトの属性を辞書として返します。
```python
class MyClass:
    def __init__(self):
        self.name = "Alice"
        self.age = 30

obj = MyClass()
print(vars(obj))  # 出力: {'name': 'Alice', 'age': 30}
```

## zip()
複数のイテラブルを並列に処理するためのイテレータを作成します。
```python
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)]
```

:::note warn
**使用時の注意点**
長さの異なるイテラブルを渡した場合、短い方に合わせてトリミングされます。
```python
a = [1, 2, 3]
# 長さが異なる場合
c = [10, 20]
print(list(zip(a, c)))  # 出力: [(1, 10), (2, 20)]
```
:::


## まとめ
今回はPythonの組み込み関数についてまとめてみました。
個人的に使用時に注意するべきだと思うところには**使用時の注意点**として記載しているのでぜひ見てみてください