MQL5システムトレーダーの為のPython講座:第19回「組み込み関数について」

Python
スポンサーリンク
スポンサーリンク

はじめに

前回Pythonの「名前空間スコープ」について学びました。

今回は、Pythonプログラミングで頻繁に利用する「組み込み関数」について解説します。

組み込み関数とは、特別なインポートや設定をせずに、標準の状態で利用可能な関数のことを指します。Pythonには、多くの組み込み関数が用意されており、それぞれが異なる便利な機能を提供します。プログラミングを効率化するために、これらの関数を理解して活用することが重要です。

本記事では、主によく使用される組み込み関数を例を交えて紹介します。

組み込み関数とは

組み込み関数は、Pythonに標準で備わっている関数のことで、特別な設定やインポートなしにすぐ利用できます。これらの関数は、日常的なプログラミング作業を効率化するために設計されています。

例えば、以下のような場面で役立ちます。

  • 出力: 結果やデータを画面に表示する(例: print)。
  • データ型の確認: オブジェクトがどの型かを調べる(例: type)。
  • 変換: データ型を変更する(例: float)。
  • 計算や比較: 最大値や最小値を求める(例: maxmin)。

組み込み関数の特徴

組み込み関数の特徴は以下の通りです。

  • 手軽さ: 必要な場面で即座に使用できる。
  • 多機能性: 多くの場面に対応する多彩な機能を持つ。
  • 標準性: すべてのPython環境で利用可能。

これらの関数を活用することで、コードの可読性や開発速度を向上させることができます。

次のセクションでは、具体的な組み込み関数について詳しく説明します。

print関数

print関数は、Pythonで最もよく使用される関数の一つで、指定したデータや結果を出力するために使います。この関数は、デバッグや結果確認など、さまざまな場面で役立ちます。

以下は基本的な使い方の例です。

print("Python", "Ruby", "PHP")
print("Java")

このコードを実行すると、以下のように出力されます。

Python Ruby PHP
Java

デフォルトでは、print関数引数を半角スペースで区切り、最後に改行します。そのため、最初の行は半角スペースで区切られ、次の行に「Java」が表示されます。

引数 sep の利用

引数sep を指定すると、区切り文字を変更できます。

print("Python", "Ruby", "PHP", sep="-")

このコードを実行すると、以下のように出力されます。

Python-Ruby-PHP

sep のデフォルト値は半角スペースですが、上記の例ではハイフンに変更されています。

引数 end の利用

引数 end を指定すると、出力の末尾に表示される文字列を変更できます。

print("Python", end="-")
print("Java")

このコードを実行すると、以下のように出力されます。

Python-Java

デフォルトでは改行文字が使用されていますが、ここではハイフンに置き換えられています。

print関数は簡単な結果表示だけでなく、フォーマットやカスタマイズされた出力の場面でも大いに役立ちます。

type 関数

type関数は、引数として渡されたオブジェクトのデータ型を確認するために使用します。この関数は、プログラム中でオブジェクトの型を調べたり、型に応じた処理を実行する際に役立ちます。

以下は基本的な使い方の例です。

print(type("Hello"))  # 文字列
print(type(123))      # 整数
print(type([1, 2, 3]))  # リスト
print(type({"key": "value"}))  # 辞書

これを実行すると、以下のように出力されます。

<class 'str'>
<class 'int'>
<class 'list'>
<class 'dict'>

各オブジェクトの型が <class ‘型名’> の形式で表示されます。

is 演算子との組み合わせ

type関数は、is 演算子と組み合わせることで、オブジェクトの型が特定の型と一致するかを判定できます。

print(type("Hello") is str)  # True
print(type("Hello") is int)  # False

この例では、”Hello” が文字列型であるかどうかを確認しています。最初の判定では True が、次の判定では False が返されます。

type関数を使用することで、プログラムの動作確認や、型に応じた処理を簡単に実装することが可能です。

float 関数

float関数は、引数として渡された値を浮動小数点数に変換するための関数です。この関数は、数値を小数として扱いたい場合や、文字列から小数値を取得したい場合に使用されます。

以下は基本的な使い方の例です。

a = "10.5"
result = float(a)
print(result)  # 浮動小数点数の10.5
print(type(result))  # データ型を確認

このコードを実行すると、以下のように出力されます。

10.5
<class 'float'>

文字列 “10.5” が浮動小数点数 10.5 に変換されていることがわかります。また、データ型float関数に変換されていることも確認できます。

浮動小数点数の注意点

浮動小数点数はコンピューター内部で近似値として表現されるため、計算結果に若干の誤差が生じる場合があります。

以下の例を見てみましょう。

print(0.1 * 3)  # 結果を表示
print(0.1 * 3 == 0.3)  # 判定

これを実行すると、以下の結果になります。

0.30000000000000004
False

0.1 * 3 の計算結果は一見 0.3 のように見えますが、実際にはわずかな誤差を含んでいます。このため、0.1 * 3 == 0.3 の判定は False になります。

浮動小数点数を扱う際には、こうした特性を考慮し、必要に応じて丸め処理(round関数など)を行うことが重要です。

round 関数

round関数は、指定した数値を特定の桁で丸めるために使用されます。この関数は、小数点以下の桁数を調整したい場合や、数値を四捨五入して扱いたい場合に役立ちます。

以下は基本的な使い方の例です。

number = 1.234
result = round(number, 2)  # 小数点第2位で丸める
print(result)

このコードを実行すると、以下のように出力されます。

1.23

ここでは、1.234 の小数点第2位を基準に丸めた結果が得られます。

引数なしでの丸め

round関数では、第2引数を省略すると、整数に丸められます。

print(round(1.5))
print(round(2.5))

このコードを実行すると、以下のように出力されます。

2
2

これは、四捨五入ではなく、整数の偶数に丸める「偶数丸め」が適用されるためです。偶数丸めは、数値計算での誤差を最小限に抑える目的で使用されます。

負の桁での丸め

第2引数に負の値を指定すると、整数部の桁を基準に丸めます。

number = 1234.56
result = round(number, -2)  # 100の位で丸める
print(result)

このコードを実行すると、以下のように出力されます。

1200.0

ここでは、100の位を基準に数値が丸められています。

round関数を活用することで、数値を必要な精度に調整し、データ処理や計算の結果を適切に管理することができます。

bool 関数

bool関数は、引数として渡されたオブジェクトが真(True)か偽(False)かを判定するために使用されます。この関数は、条件式の評価やデータの存在確認などに役立ちます。

以下は基本的な使い方の例です。

print(bool(1))         # True: 0以外の数値
print(bool(0))         # False: 数値の0
print(bool("Hello"))   # True: 空でない文字列
print(bool(""))        # False: 空文字列
print(bool([1, 2, 3])) # True: 要素があるリスト
print(bool([]))        # False: 空のリスト

このコードを実行すると、以下の結果が得られます。

True
False
True
False
True
False

条件式の評価

bool関数は、条件式を評価する際にも利用できます。

print(bool(5 > 3))  # True: 条件が正しい
print(bool(2 > 5))  # False: 条件が間違っている

この例では、5 > 3 の評価結果は True で、2 > 5 の評価結果は False となります。

真と偽の判定基準

bool関数True または False が返される基準は以下の通りです。

  • True が返される場合:
  • False が返される場合:

bool関数を使うことで、データの状態を簡単に確認し、条件分岐やデータのフィルタリングなどの処理を効率的に行うことができます。

len 関数

len関数は、オブジェクトの要素数を取得するために使用されます。この関数は、文字列リスト辞書などに含まれる要素の数を確認したい場合に便利です。

以下は基本的な使い方の例です。

# 文字列の長さを取得
print(len("Hello"))

# リストの要素数を取得
print(len([1, 2, 3, 4]))

# 辞書の要素数を取得
print(len({"a": 1, "b": 2, "c": 3}))

これを実行すると、以下の結果が得られます。

5
4
3

それぞれのオブジェクトの要素数が正しく表示されています。

len 関数の対象

len関数は以下のようなオブジェクトに対して使用できます。

以下に複数のオブジェクトを対象にした例を示します。

# タプルの要素数
print(len((10, 20, 30)))

# 空のリスト
print(len([]))

# 空の辞書
print(len({}))

実行結果は以下の通りです。

3
0
0

len関数を使うことで、オブジェクトの状態を確認したり、処理の分岐条件を決定する際に役立てることができます。

sum 関数

sum関数は、リストタプルなどの要素の合計値を計算するために使用されます。この関数は、数値データを含むコレクションの合計を簡単に取得したい場合に便利です。

以下は基本的な使い方の例です。

# リストの要素の合計
numbers = [1, 2, 3, 4]
print(sum(numbers))

このコードを実行すると、以下の結果が得られます。

10

リストに含まれる数値の合計値が計算され、10 が表示されます。

初期値を指定する

sum関数では、合計の初期値を第2引数として指定することができます。この場合、指定した初期値が合計値に加算されます。

# 初期値を指定した場合の合計
numbers = [1, 2, 3, 4]
print(sum(numbers, 100))

このコードを実行すると、以下の結果が得られます。

110

初期値として 100 を指定したため、リストの合計値に 100 が加算されています。

注意点

sum関数は、数値データを含むリストタプルなどで使用されます。文字列やその他の型を含む場合、エラーが発生します。

以下の例ではエラーが発生します。

# 数値以外を含むリストでの使用例(エラー発生)
mixed_list = [1, "two", 3]
print(sum(mixed_list))

実行すると、エラーとなるため、数値以外の要素が混在しないよう注意が必要です。

sum関数を使用することで、数値データの合計を簡単に計算し、統計処理やデータ分析に役立てることができます。

max 関数

max関数は、リスト辞書文字列などのオブジェクト内から最大値を取得するために使用されます。この関数は、数値や文字列データの中から最も大きな要素を簡単に見つけるのに便利です。

以下は基本的な使い方の例です。

# 数値リストの最大値
numbers = [10, 20, 30, 40, 50]
print(max(numbers))

# 文字列リストの最大値
words = ["Python", "JavaScript", "PHP"]
print(max(words))

このコードを実行すると、以下の結果が得られます。

50
Python

数値の場合はその値が基準となり、文字列の場合はアルファベット順に評価されます。

key 引数の使用

max関数では、key 引数を指定することで、カスタマイズされた条件に基づいて最大値を決定できます。

# リスト内の文字列を長さで比較
words = ["Python", "JavaScript", "PHP"]
print(max(words, key=len))

実行結果は以下の通りです。

JavaScript

ここでは、文字列の長さを基準に比較しているため、最も長い文字列 “JavaScript” が返されています。

辞書での使用

辞書引数として渡すと、キーの中から最大値を取得します。

# 辞書のキーの最大値
data = {"a": 1, "b": 2, "c": 3}
print(max(data))

# 辞書の値の最大値
print(max(data.values()))

実行結果は以下の通りです。

c
3

辞書の場合、デフォルトではキーが評価対象となりますが、値を評価したい場合は values() メソッドを使用します。


min 関数

min関数は、max関数と対をなす関数で、リスト辞書文字列などのオブジェクト内から最小値を取得するために使用されます。最小値を簡単に見つけたい場合に便利です。

以下は基本的な使い方の例です。

# 数値リストの最小値
numbers = [10, 20, 30, 40, 50]
print(min(numbers))

# 文字列リストの最小値
words = ["Python", "JavaScript", "PHP"]
print(min(words))

このコードを実行すると、以下の結果が得られます。

10
JavaScript

数値の場合はその値が基準となり、文字列の場合はアルファベット順に評価されます。

key 引数の使用

min関数でも key 引数を指定することで、カスタマイズされた条件に基づいて最小値を決定できます。

# リスト内の文字列を長さで比較
words = ["Python", "JavaScript", "PHP"]
print(min(words, key=len))

実行結果は以下の通りです。

PHP

ここでは、文字列の長さを基準に比較しているため、最も短い文字列 “PHP” が返されています。

辞書での使用

辞書引数として渡すと、キーの中から最小値を取得します。

# 辞書のキーの最小値
data = {"a": 1, "b": 2, "c": 3}
print(min(data))

# 辞書の値の最小値
print(min(data.values()))

実行結果は以下の通りです。

a
1

辞書の場合、デフォルトではキーが評価対象となりますが、値を評価したい場合は values() メソッドを使用します。

max関数min関数を使うことで、データの最大値・最小値を効率的に抽出し、統計処理や条件分岐に役立てることができます。

range 関数

range関数は、連続した整数値を生成するために使用される便利な関数です。この関数を使うことで、指定した範囲の数値を順番に取得できます。ループ処理と組み合わせることが多い関数です。

以下は基本的な使い方の例です。

# 0以上5未満の整数を生成
for i in range(5):
    print(i)

このコードを実行すると、以下の結果が得られます。

0
1
2
3
4

デフォルトでは、range関数は 0 から始まり、指定した値の手前までの整数を生成します。

引数の指定方法

range関数は、1つから3つの引数を取ることができます。

  1. 1つの引数: 終了値を指定(開始値は 0、ステップは 1)。 for i in range(5): print(i)
  2. 2つの引数: 開始値と終了値を指定(ステップは 1)。 for i in range(5, 10): print(i) 実行結果は以下の通りです。 5 6 7 8 9
  3. 3つの引数: 開始値、終了値、ステップ(増加量または減少量)を指定。 for i in range(5, 10, 2): print(i) 実行結果は以下の通りです。 5 7 9

負のステップ値

ステップ値に負の値を指定すると、数値が減少します。

for i in range(10, 5, -1):
    print(i)

実行結果は以下の通りです。

10
9
8
7
6

注意点

range関数は整数のみをサポートしており、小数を指定するとエラーが発生します。

# エラー例
for i in range(0, 5, 0.5):
    print(i)

このコードを実行するとエラーになります。小数が必要な場合は他の方法(例えば NumPy の arange 関数など)を利用する必要があります。

range関数を活用することで、数値の連続処理やループを簡潔に記述でき、コードの効率化が図れます。

zip関数

zip関数は、複数のリストタプル要素を1つずつ組み合わせ、タプルの集合としてまとめるために使用されます。この関数を使うことで、関連するデータを効率的に扱うことが可能です。

以下は基本的な使い方の例です。

# 名前とスコアを組み合わせる
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]

zipped = zip(names, scores)
print(list(zipped))

このコードを実行すると、以下の結果が得られます。

[('Alice', 85), ('Bob', 90), ('Charlie', 95)]

ここでは、names の要素scores要素が1対1で対応付けられ、それぞれタプルとしてまとめられています。

for ループでの利用

zip関数はループ処理でよく利用されます。以下の例では、zip関数で生成されたデータを反復処理しています。

for name, score in zip(names, scores):
    print(f"{name} scored {score}")

実行結果は以下の通りです。

Alice scored 85
Bob scored 90
Charlie scored 95

ここでは、name と score にそれぞれ値が割り当てられ、ループ内で使われています。

要素数が異なる場合

zip関数に渡されたリストタプル要素数が異なる場合、少ない方の要素数に合わせられます。

names = ["Alice", "Bob"]
scores = [85, 90, 95]

zipped = zip(names, scores)
print(list(zipped))

実行結果は以下の通りです。

[('Alice', 85), ('Bob', 90)]

このように、余った要素は無視されます。

逆操作(アンパック)

zip関数でまとめたデータを逆に分解することもできます。

zipped = [('Alice', 85), ('Bob', 90), ('Charlie', 95)]
names, scores = zip(*zipped)

print(names)  # ('Alice', 'Bob', 'Charlie')
print(scores)  # (85, 90, 95)

実行結果は以下の通りです。

('Alice', 'Bob', 'Charlie')
(85, 90, 95)

ここでは、zip(*zipped) を使って、もとのリストタプルに分解しています。

zip関数を活用することで、複数のデータセットを効率的に操作でき、データの整列や統合に便利です。

enumerate 関数

enumerate関数は、リストタプルなどの反復可能なオブジェクトに対してインデックス番号を付加し、そのインデックス要素を組み合わせたデータを生成するための関数です。この関数を使うことで、ループ処理時にインデックスを簡単に扱うことができます。

以下は基本的な使い方の例です。

# 名前のリストにインデックスを付ける
names = ["Alice", "Bob", "Charlie"]

for index, name in enumerate(names):
    print(f"{index}: {name}")

このコードを実行すると、以下の結果が得られます。

0: Alice
1: Bob
2: Charlie

ここでは、リストnames の各要素に対してインデックス番号が付けられ、それが一緒に出力されています。

開始番号の指定

デフォルトではインデックス番号は 0 から始まりますが、start 引数を指定することで任意の番号から開始することができます。

# インデックスを1から開始
for index, name in enumerate(names, start=1):
    print(f"{index}: {name}")

このコードを実行すると、以下の結果が得られます。

1: Alice
2: Bob
3: Charlie

ここでは、インデックス番号が 1 から始まるように指定されています。

データ構造として利用

enumerate関数は、リストタプルに変換して利用することも可能です。

# enumerateの結果をリストに変換
indexed_names = list(enumerate(names, start=1))
print(indexed_names)

実行結果は以下の通りです。

[(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')]

このように、インデックス番号と要素をペアにしたタプルリストが作成されます。

応用例

enumerate関数は、データの整理やデバッグ時に役立ちます。例えば、エラーログにインデックス付きで情報を記録する際などに便利です。

# エラーリストの表示
errors = ["File not found", "Access denied", "Unknown error"]

for idx, error in enumerate(errors, start=1):
    print(f"Error {idx}: {error}")

実行結果は以下の通りです。

Error 1: File not found
Error 2: Access denied
Error 3: Unknown error

enumerate関数を使うことで、データのインデックス要素を同時に扱えるため、ループ処理の効率が向上し、コードを簡潔に記述できます。

おわりに

Python組み込み関数は、日常的なプログラミングを効率化するための強力なツールです。本記事では、代表的な関数を例とともに解説しました。

これらを活用することで、コードの簡潔さと可読性を向上させることができます。実際に試しながら、自分のプログラムでの活用方法を探してみてください。

MQL5システムトレーダーの為のPython講座:第18回「名前空間とスコープについて」

タイトルとURLをコピーしました