1.1 人気のある組み込み関数一覧
すでに多くの組み込み関数に出会ってきたけど、今回はもう少し役に立つ関数を紹介するよ:
id()
hash()
dir()
以下にそれらについて少し詳しく説明するね:
関数 id()
id()
関数はオブジェクトのユニークな識別子(数値)を返すよ。この識別子は整数で、オブジェクトの存在期間中はユニークさを保つんだ。通常、この識別子はオブジェクトのメモリアドレスに対応しているけど、Pythonの仕様ではこれが保証されているわけではないよ。
オブジェクトのユニークな識別子を使って、多くの操作を理解するのに役立つことがある。例えば、どこでオブジェクトが複製されているのか、どこで同じオブジェクトへの参照があるのかを理解するのに役立つよ。同じオブジェクトでも異なる識別子を持つことがあるけど、同じオブジェクトへの参照は同じ識別子を示すよ。
プログラムのデバッグ時やPythonがメモリ内でオブジェクトを管理する方法を理解するのに使えるよ。
a = [1, 2, 3]
b = a
print(id(a)) # オブジェクト 'a' の識別子を出力
print(id(b)) # 同じ識別子を出力、なぜなら 'b' は同じオブジェクトを参照しているから
関数 hash()
hash()
関数は指定されたオブジェクトがハッシュ可能な場合、そのハッシュ値(数値)を返すよ。Pythonでハッシュ可能なオブジェクトは変更不可能で、そのライフサイクルの間はハッシュ値が一定でなければならない。
数字、文字列、タプル(その要素もハッシュ可能である場合)がその例だね。ハッシュ値は辞書やセットでの高速検索に使われるよ。データの検索を最適化し、等価性とユニーク性の高速なチェックが必要な場合に役立つね。
print(hash("hello")) # 文字列 "hello" のハッシュ値を返す
print(hash(42)) # 数字 42 のハッシュ値を返す
print(hash((1, 2, 3))) # タプル (1, 2, 3) のハッシュ値を返す
大事!
変更不可能なオブジェクトのハッシュ値はそのライフサイクルの間は変わらないよ。でも、リストや辞書のように変更可能なオブジェクトはハッシュ可能じゃなくて、辞書のキーやセットの要素として使えないよ。
関数 dir()
dir()
関数はオブジェクトの属性とメソッドをリストで返すよ。オブジェクトが指定されていないときは、dir()
は現在のローカルスコープ内の名前のリストを返す。この関数はオブジェクトの構造とその属性を調べるのに役立つよ。
オブジェクトのすべての属性とメソッドのリストを取得するのに使われ、オブジェクトの構造と利用可能な機能を理解するのに役立つね。特にドキュメントが限られているか入手できないとき、デバッグやオブジェクトの調査に頻繁に使われるよ。
class MyClass:
def __init__(self):
self.name = "Alice"
def greet(self):
print("Hello, " + self.name)
obj = MyClass()
print(dir(obj)) # オブジェクト 'obj' の属性とメソッドのリストを出力
print(dir()) # 現在のローカルスコープ内の名前のリストを出力
1.2 コレクションの操作
コレクションを操作するのに便利な関数が他にもあるよ。以前のレクチャーで触れたかもしれないけど、今回はもう少し詳しく説明するね。
zip()
min()
max()
sum()
count()
関数 zip()
zip()
関数は複数のイテラブル(例えば、リスト、タプル、文字列)を結合し、タプルのイテレーターを返すよ。各タプルはすべてのイテラブルの同じインデックスの位置から集められた要素を含んでいるんだ。
データを複数のイテラブルから結合して、同時にイテレートするのを簡単にしてくれるよ。また、キーと値のリストから辞書を作成するときにも使用されるね。
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
combined = zip(names, ages)
print(list(combined)) # 出力: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
関数 max()
max()
関数は渡されたイテラブルまたは複数の引数の中で最大の要素を返すよ。比較ルールを決めるキー関数を指定することもできるんだ。
numbers = [1, 2, 3, 4, 5]
print(max(numbers)) # 出力: 5
# キー関数を使って
words = ["apple", "banana", "cherry"]
print(max(words, key=len)) # 出力: 'banana'
関数 min()
min()
関数は渡されたイテラブルまたは複数の引数の中で最小の要素を返すよ。比較ルールを決めるキー関数を指定することもできるんだ。
numbers = [1, 2, 3, 4, 5]
print(min(numbers)) # 出力: 1
# キー関数を使って
words = ["apple", "banana", "cherry"]
print(min(words, key=len)) # 出力: 'apple'
関数 count()
count()
関数はリストや文字列のようなイテラブル内での要素の出現回数を数えるのに使われるよ。リスト、コレクション、またはイテレータで呼び出されるんだ。
numbers = [1, 2, 2, 3, 4, 2, 5]
print(numbers.count(2)) # 出力: 3
text = "hello world"
print(text.count("o")) # 出力: 2
関数 sum()
sum()
関数はイテラブル内のすべての要素の合計を返すよ。オプションで、合計に加えられる初期値を指定できるんだ。
numbers = [1, 2, 3, 4, 5]
print(sum(numbers)) # 出力: 15
# 初期値を設定して
print(sum(numbers, 10)) # 出力: 25
1.3 コードの実行
コードの実行に関して、初心者にも役立つかもしれない関数が2つあるよ:
eval()
exec()
これらは強力だけど、セキュリティリスクもあるので注意して使ってね。以下でそれぞれの詳細を説明するよ:
関数 eval()
eval(expression)
関数は文字列を受け取り、それをPythonの式として実行するよ。この関数は、その式の実行結果を返すんだ。文字列の式をPythonコードとして評価するために使われるよ。
例:
x = 10
result = eval("x + 5")
print(result) # 出力: 15
関数 exec()
exec()
関数は文字列を受け取り、それをPythonコードとして実行するよ。eval()
は式だけを実行するのに対し、exec()
は関数の定義やループ、モジュールのインポートなど、あらゆるPythonの命令を実行できるんだ。この関数は値を返さないよ。
動的なスクリプトを実行したり、プログラムの実行中に新しい関数やクラスを定義するのに使われるよ。
code = """
def greet(name):
print(f"Hello, {name}!")
greet("Alice")
"""
exec(code)
# 出力: Hello, Alice!
大事!
eval()
同様、exec()
は信頼できない入力データで使うと危険だよ。注意して使って、exec()
をproduction環境で使うのは避けてね。
GO TO FULL VERSION