らずぱい日記

定年したので日記でもかくか。って感じ

【Python基礎】🤔最適な道具を選ぶ! list, array, ndarray の使い分け総まとめ

Python基礎】🤔最適な道具を選ぶ! list, array, ndarray の使い分け総まとめ

 

これまで数回の学習メモで、#Python# が用意してくれているデータの「整理棚」、list、array、ndarray の三兄弟について、それぞれの特徴を見てきました。

 

万能選手の listメモリ節約家の array、そして計算の王様 ndarray。それぞれに得意なこと、不得意なことがあると分かりました。そこで今回は、どの場面でどの棚を選ぶべきか、私なりの「使い分けの指針」として、考えをまとめておきたいと思います。道具は、適材適所で使ってこそ真価を発揮するものですからね。


 

📦 ① 普段使いの万能選手なら list

list は、#Python# プログラミングにおける基本の道具箱です。

  • 推奨される場面:

    • 様々な種類のデータを一緒にまとめたいとき。(例:[1, "犬", True]

    • データ量がそれほど多くなく、手軽さや柔軟性を重視したいとき。

    • とりあえず、どの型を使うか迷ったら、まずは list を選んでおけば間違いは少ないでしょう。

ひとことで言えば、「日常的な、たいていの用途」で活躍してくれる、最も頼りになる存在です。


 

🔩 ② メモリ節約の専門家なら array

array は、特定の状況下で輝く専門家です。

  • 推奨される場面:

    • 非常に大量(数万〜数百万)の、種類が同じ数値データ(整数か小数)を扱いたいとき。

    • 特に、プログラムが使うメモリ(記憶領域)を節約することが重要なとき。

list ほどの柔軟性はありませんが、「大量の数値を、とにかくコンパクトに格納したい」という明確な目的がある場合に、その真価を発揮します。


 

🚀 ③ 高速な数値計算なら ndarray

ndarray は、データを使って何かを「計算」することが主目的の場合に選ぶ、最強の電動工具です。

  • 推奨される場面:

    • 配列に入った数値全体に対して、一括で計算(足し算や掛け算など)を行いたいとき。

    • データ分析機械学習画像処理、シミュレーションなど、高度で専門的な計算が必要なとき。

    • 2次元の表(行列)や3次元のデータなど、多次元のデータを扱いたいとき。

#Numpy#ndarray は、現代の科学技術計算を支える、まさに縁の下の力持ちと言える存在です。


 

📊 フローチャート風まとめ

どの型を選ぶか、簡単な判断の流れを考えてみました。

  1. 扱いたいデータはどんなもの?

    • いろいろな型が混ざっている → list を使う。

    • 大量の、同じ型の「数字」である → 次の質問へ

  2. その数字データで、何がしたい?

    • 高度な数学計算や行列計算が必要(速度が重要) → ndarray を使う。

    • シンプルに格納できればよく、メモリ効率を優先したい → array を使う。


 

💡 最後に

この一連の学習を通して、なぜ #Python# に似たような機能を持つものが複数存在するのか、その理由がよく分かりました。それは、プログラマが直面する様々な問題に対して、常に最適な「道具」を提供しようという、言語の設計思想の表れなのですね。

自分が今、何をしたいのかを明確にし、それに最も合った道具は何かを考える。この習慣を身につけることが、良いプログラムを書くための第一歩なのだと感じています。

 

 

【Python基礎】🤔データ分析の主役! ndarray の強み「多次元配列」と「高速演算」

Python基礎】🤔データ分析の主役! ndarray の強み「多次元配列」と「高速演算」

 

こんにちは。

前回までのメモで、#Python# のデータをまとめる三兄弟、list、array、ndarray を比較しました。list が万能選手、array がメモリ効率の専門家だとすれば、三男坊の #ndarray# は、まさに「データ分析界の主役」と呼ぶにふさわしい、圧倒的なパワーを秘めていることが分かってきました。

今回は、ndarray をスターダムに押し上げている二つの強力な武器、「多次元配列」と「高速演算」について、詳しく見ていきたいと思います。


 

🌐 特徴①:自在に広がる「多次元」の世界

listarray が、データを一列に並べることしかできない「単なる棚」だったのに対

し、ndarray はデータをタテ・ヨコ・高さに自由に広げられる「立体的な棚」を作る

ことができます。これが 多次元配列 です。

  • 1次元配列: [1, 2, 3, 4] のような、シンプルな一列のデータです。(listarray と同じ)

  • 2次元配列: [[1, 2], [3, 4]] のような、エクセルのシートのような**表(行列)**形式のデータです。

  • 3次元配列: 2次元の表をさらに束ねたような、立体的なデータ構造です。

例えば、画像データは「(縦のピクセル数)x(横のピクセル数)」の2次元配列として、またカラー画像なら「(縦)x(横)x(色情報RGB)」の3次元配列として扱うことができます。

ndarray で2次元配列を作る

Python
 
import numpy as np

# 2行3列の2次元配列を作成
grid = np.array([[1, 2, 3],
                 [4, 5, 6]])

print("作成した2次元配列:\n", grid)
print("\n配列の形状 (行, 列):", grid.shape)

出力結果:

作成した2次元配列:
 [[1 2 3]
 [4 5 6]]

配列の形状 (行, 列): (2, 3)

.shape を見ることで、配列がどんな形をしているのか一目で分かります。この多次元データを扱える能力こそ、ndarray がデータ分析に不可欠な理由の一つです。


 

🚀 特徴②:魔法のような「高速演算」

 

ndarray のもう一つの、そして最大の強みが、配列全体に対する数学的な計算が非常に高速である点です。

例えば、[10, 20, 30] というリストの全要素を2倍したい場合、list では for ループを使って一つずつ計算する必要があります。

しかし、ndarray なら、まるで配列全体に魔法をかけるように、たった一行で、しかも驚くほど速く計算を終えてしまいます。これを「ブロードキャスト」や「ベクトル化演算」と呼ぶそうです。

ndarray の高速な演算

Python
 
import numpy as np

# ndarrayを作成
numbers = np.array([10, 20, 30])

# 配列の全要素を一度に2倍する
doubled_numbers = numbers * 2

print(f"元の配列: {numbers}")
print(f"2倍した配列: {doubled_numbers}")

# もちろん、足し算や引き算なども同様に可能
added_numbers = numbers + 5
print(f"5を足した配列: {added_numbers}")

出力結果:

元の配列: [10 20 30]
2倍した配列: [20 40 60]
5を足した配列: [15 25 35]

for 文を書く必要がないためコードが非常にシンプルになり、内部的には高度に最適化された計算が実行されるため、処理速度が劇的に向上します。大量のデータを扱うほど、この恩恵は計り知れません。


 

💡 まとめ - ndarray は科学計算の原動力

ndarray の強みをまとめると、以下の二点に集約されます。

  1. 多次元データを自在に扱える柔軟性

  2. 配列全体に作用する、驚異的に高速な演算能力

この二つの強みがあるからこそ、#ndarray# は、#データ分析##機械学習# といった、現代のIT技術の根幹を支えるライブラリの「エンジン」として活躍しているのですね。

正直なところ、私の現在のレベルでは、この性能をフルに引き出すようなプログラムを

書く機会はまだないです。しかし、#Python# がこれほど強力な計算能力

を秘めていると知るだけで、これから先の学習への期待がますます膨らみます。実に、

面白い世界です。

 

【Python基礎】🤔専門家ならではの潔さ! array が持つ「同じ型のみ」「一次元」という特徴

Python基礎】🤔専門家ならではの潔さ! array が持つ「同じ型のみ」「一次元」という特徴

 

こんにちは。

前回のメモで、#Python# にはデータをまとめて扱うための「整理棚」として、list、array、ndarray の三兄弟がいることを学びました。その中で、array は「同じ種類の部品専用の棚」と表現しましたが、今回はこの array が持つ、専門家ならではの「こだわり」とも言える二つの特徴について、もう少し詳しく見ていきたいと思います。

この「こだわり」を理解することで、array をどのような場面で使うべきかが、より明確になりました。


🔩 特徴①:同じ種類のデータしか受け付けない

array の一つ目の、そして最大のこだわりは、「同じデータ型の要素しか格納できない」という点です。

万能な list が、数値や文字列をごちゃ混ぜにして入れられるのとは対照的に、array は最初に「この棚は整数専用です」「この棚は小数専用です」と、型を宣言してから使います。

array は型を厳密にチェックする

Python
 
import array

# 'i' は「符号付き整数」を意味する型コード。整数専用のarrayを作成。
int_array = array.array('i', [10, 20, 30])
print(f"作成成功: {int_array}")

# この整数専用のarrayに、文字列を追加しようとすると…
try:
    int_array.append("hello")
except TypeError as e:
    print(f"エラーが発生! -> {e}")

出力結果:

作成成功: array('i', [10, 20, 30])
エラーが発生! -> an integer is required (got type str)

このように、「整数(integer)が必要です」と、厳しく怒られてしまいました。

一見不便に見えるこの仕様ですが、これこそが array の存在意義です。入れるものの種類を限定することで、list よりも効率よくデータをメモリに格納できるのです。何百万個という大量の数値を扱う際には、このメモリ効率の良さが大きなメリットになります。


 

📏 特徴②:データは一列に並ぶ「一次元」のみ

array の二つ目のこだわりは、「データは一次元の列としてしか並べられない」という点です。

これはつまり、array は常に一本の長い列であり、エクセルのような表(2次元)や、立体的なデータの塊(3次元)を作ることはできない、ということです。

  • OK: [1, 2, 3, 4, 5, ...] (一本の長い列)

  • NG: [[1, 2], [3, 4]] (2x2の表のような構造)

この点が、複雑な行列計算などを得意とする #Numpy#ndarray との大きな違いですね。array はあくまで、シンプルな一列のデータを効率よく扱うことに特化しているのです。


 

💡 まとめ - array はどんな時に輝くのか?

これら二つの特徴から、array の得意な場面が見えてきました。

それは、「大量の、種類が同じ数値を、一次元のシンプルな列として、メモリを節約しながら扱いたいとき」です。

例えば、センサーから送られてくる大量の温度データや、音声ファイルのようなバイナリデータを扱う場合などが、まさに array の出番と言えるでしょう。

何でもできる万能選手 list も便利ですが、array のように一つのことに特化した専門家の「潔さ」もまた、魅力的です。道具の特性を正しく理解し、適材適所で使い分けていくのが、良いプログラミングへの近道なのかもしれませんね。

 

 

【Python基礎】🤔似ているようで大違い! list、array、ndarray の特徴と使い分け

Python基礎】🤔似ているようで大違い! list、array、ndarray の特徴と使い分け

 

複数のデータをまとめて扱える「#list#」は、何でも入る便利な「整理棚」として大変重宝していました。しかし最近、調べていると「array」や「ndarray」といった、リストによく似た言葉を目にするようになりました。

どれもデータを並べて格納するもののようですが、一体何が違うのでしょうか。調べてみたところ、これらはそれぞれ得意なことが違う、特徴的な「整理棚」であることが分かりました。今回は、この三兄弟の違いと使い分けについて、自分なりに整理してみます。


 

① 基本の「list」- 何でも入る万能な整理棚 📦

まずは、おなじみの #list# です。これは #Python# に標準で備わっている、最も基本的で汎用的な整理棚です。

  • 特徴: どんな種類のデータでも一緒に入れておくことができます。数値、文字列、さらには別のリストまで、何でもござれです。

    Python
     
    my_list = [1, "りんご", True, [2, 3]]
    
  • 長所: 非常に柔軟で、プログラムの中で気軽に使えるのが最大の魅力です。

  • 短所: 柔軟な反面、たくさんの数値を扱う計算などでは、後述する専門の棚に比べて、動作が少し遅かったり、記憶領域(メモリ)を多く使ったりすることがあるようです。

  • 使い分け: 「とりあえずデータをまとめたい」「色々な種類のデータを扱いたい」という、日常的なほとんどの場面で活躍します。


 

② 📦型を揃える「array」- 同じ種類の部品専用の棚 🔩

次に、array モジュールが提供する「array」です。これを使うには import array と宣言が必要です。

  • 特徴: list との最大の違いは、同じ種類のデータしか入れられない点です。最初に「この棚は整数専用」「この棚は小数専用」というように、データの型を決めてから使います。

    Python
     
    import array
    
    # 'i' は符号付き整数を意味する型コード
    my_array = array.array('i', [10, 20, 30, 40])
    
  • 長所: データ型が揃っているため、list に比べて記憶領域の節約になります。大量の数値を扱う際には、この差が効いてくるそうです。

  • 短所: 入れられるデータの種類に制限があり、list ほど柔軟ではありません。

  • 使い分け: 大量の数値を扱う必要があり、かつ記憶領域を効率的に使いたいが、後述するような高度な数学的計算は不要、という少し専門的な場面で出番がありそうです。


 

数値計算の王様「ndarray」- 高性能な計算機付きの棚 🧮

最後に、#Numpy# という、数値計算の分野で絶大な人気を誇るライブラリが提供する「ndarray」(N-dimensional array)です。使うには import numpy as np のように書くのが一般的です。

  • 特徴: array と同様に、同じ種類のデータを格納します。しかし、その真価は別のところにあります。

  • 長所: なんといっても、高速な数値計算が最大の武器です。リストに入った数値全部を2倍する、といった計算が、驚くほど速く実行できます。また、2次元(行列)や3次元といった、より複雑なデータの塊を簡単に扱えるのも大きな特徴です。

    Python
     
    import numpy as np
    
    # Numpyの配列(ndarray)を作成
    my_ndarray = np.array([1, 2, 3, 4])
    
    # 配列の全要素を一度に2倍する
    doubled_array = my_ndarray * 2 
    # -> [2, 4, 6, 8] という結果が得られる
    
  • 短所: 外部ライブラリなので、別途インストールが必要です。また、単純なデータ整理に使うには少し大掛かりかもしれません。

  • 使い分け: データ分析機械学習科学技術計算など、専門的な数値計算を行うなら、ほぼ一択と言える強力な道具です。


 

💡 まとめ

 

三つの「整理棚」の特徴を、私なりに一言でまとめてみました。

  • #list# : 柔軟で万能。普段使いの基本の棚。

  • #array# : メモリ効率が良い。同じ種類の大量の数値を格納したい時の専門棚。

  • #ndarray# : 計算が非常に高速。データ分析など、数値計算のプロ用ツール。

どの道具も一長一短があり、場面に応じて最適なものを選ぶのが重要だということがよく分かりました。まるで日曜大工で、ただの金槌と、精密ドライバー、そして電動ドリルを使い分けるのに似ていますね。道具の特性を知ることで、プログラミングの幅がまた一段と広がりそうです。

【Python基礎】リストを使いこなす! for文でのループと、決まった値での初期化テクニック

Python基礎】リストを使いこなす! for文でのループと、決まった値での初期化テクニック

 

前回は、データの整理棚である「#リスト#」の作り方と、要素を一つずつ出し入れする方法を学びました。

 

今回はその続きとして、リストをさらに便利に使いこなすための二つのテクニック、「

ストの中身を一つずつ順番に処理する方法」と、「最初に決まった要素を持つリストを

効率よく作る方法」について学んだことをメモしておきます。


 

🔂 リストの要素を一つずつ取り出す - for文との組み合わせ

リストに入っているたくさんの要素を、一つひとつ取り出して何か処理をしたい、ということは頻繁にあります。例えば、買い物リストの品目を順番に画面に表示する、といった具合です。

そんな時に絶大な威力を発揮するのが #for# です。#Python#for 文は、リストと組み合わせると非常に直感的で読みやすく書くことができます。

Python
 
# 買い物リストを用意
shopping_list = ["にんじん", "じゃがいも", "たまねぎ", "牛肉"]

print("--- 今日の買い物リスト ---")

# 'shopping_list'から要素を一つずつ取り出し、'item'という変数に入れて処理を繰り返す
for item in shopping_list:
    print(f"・{item}")

print("-----------------------")

出力結果:

--- 今日の買い物リスト ---
・にんじん
・じゃがいも
・たまねぎ
・牛肉
-----------------------

このように、リストの中身がなくなるまで、自動で要素を一つずつ取り出して処理を繰り返してくれます。まるで整理棚から商品を一つずつ手に取って確認していくようなイメージですね。これは非常に便利です。


 

🔢 決まったリストを効率よく作る - 初期化のテクニック

前回は空のリストを作ったり、最初からいくつかの要素を入れたりする方法を学びましたが、「最初から同じ値が10個入ったリスト」や「0から9までの数字が入ったリスト」が欲しい場合もあります。そんな時に使える、賢い初期化の方法がありました。

 

1. 同じ値を繰り返して初期化

リストに対して *アスタリスク)を使うと、その要素を繰り返した新しいリストを作ることができます。

Python
 
# [0] というリストを10回繰り返す -> 0が10個入ったリストが作られる
zero_list = [0] * 10
print(f"ゼロが10個のリスト: {zero_list}")

# 'A'という文字が5個入ったリスト
a_list = ["A"] * 5
print(f"Aが5個のリスト: {a_list}")

出力結果:

ゼロが10個のリスト: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Aが5個のリスト: ['A', 'A', 'A', 'A', 'A']

[0, 0, 0, ...] と手で書く必要がないので、とても効率的です。

 

2. range() を使って連続した数値のリストを作る

0, 1, 2, 3, ... のような、連続した数値のリストが欲しい場合は、range() という関数と list() という関数を組み合わせます。

Python
 
# range(10) は0から9までの連続した数値を生成する
# list() はそれをリストに変換する
number_list = list(range(10))

print(f"0から9までのリスト: {number_list}")

出力結果:

0から9までのリスト: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range() は、for 文と組み合わせてもよく使われる、非常に便利な関数だそうです。これも覚えておきたいですね。


 

💡 まとめ

  • リストの全要素を処理するには for item in my_list: がとても便利。

  • 同じ値でリストを初期化するには [value] * n という書き方ができる。

  • 連続した数値のリストは list(range(n)) で作れる。

一つひとつのテクニックは小さいですが、これらを組み合わせることで、データ処理の

幅がぐっと広がる気がします。面倒な繰り返し作業をコンピュータに任せられるのが、

プログラミングの醍醐味の一つだと、改めて実感しました。

【Python基礎】データの整理棚! リスト の作り方と、要素の出し入れ方法

Python基礎】データの整理棚! リスト の作り方と、要素の出し入れ方法

 

これまでは、name = "ポチ" のように、一つの変数に一つの値を入れる方法を学んでき

ました。しかし、例えば「買い物リスト」や「テストの点数一覧」のように、関連する

複数のデータをまとめて扱いたい場合はどうすれば良いのでしょうか。

その答えが、今回学んだ「リスト(list)」でした。これは、様々なデータを一つの場所

にまとめて整理できる、非常に便利な道具です。


 

📦 リストとは? - データをしまえる「整理棚」

#Python##リスト# とは、その名の通り、複数のデータを順序よく一列に並べたものです。私は、番号が振られた「整理棚」のようなものだと理解しました。

  • いろいろな種類のデータ(数値、文字列など)を自由に入れられる。

  • それぞれの棚には「インデックス」という 0 から始まる番号がついており、場所を指定して中身を取り出せる。

この「インデックスが0から始まる」というのは、プログラミングの世界ではよくあるお作法のようですね。慣れるまで少し意識が必要そうです。


 

🛠️ リストの作り方(宣言)

リストを作るのは非常に簡単です。角括弧 [] で全体を囲み、各データ(要素)をカンマ , で区切って並べます。

Python
 
# 空のリスト(空っぽの整理棚)を作る
scores = []

# 最初にいくつか要素を入れてリストを作る
shopping_list = ["にんじん", "じゃがいも", "たまねぎ"]

print(scores)
print(shopping_list)

出力結果:

[]
['にんじん', 'じゃがいも', 'たまねぎ']

 

📥 リストへの要素の追加

作ったリストに後から要素を追加するには、主に二つの方法があるようです。

1. append() - 末尾にポンと追加

append() を使うと、リストの一番最後に新しい要素を追加できます。

Python
 
shopping_list = ["にんじん", "じゃがいも", "たまねぎ"]
print(f"追加前: {shopping_list}")

# 'カレールー'をリストの末尾に追加
shopping_list.append("カレールー")
print(f"追加後: {shopping_list}")

出力結果:

追加前: ['にんじん', 'じゃがいも', 'たまねぎ']
追加後: ['にんじん', 'じゃがいも', 'たまねぎ', 'カレールー']

 

2. insert() - 場所を指定して挿入

insert() を使うと、0 から始まるインデックス番号で場所を指定して、要素を挿入することができます。

Python
 
shopping_list = ["にんじん", "じゃがいも", "たまねぎ"]
print(f"挿入前: {shopping_list}")

# インデックス1(2番目)の場所に '牛肉' を挿入
shopping_list.insert(1, "牛肉")
print(f"挿入後: {shopping_list}")

出力結果:

挿入前: ['にんじん', 'じゃがいも', 'たまねぎ']
挿入後: ['にんじん', '牛肉', 'じゃがいも', 'たまねぎ']

元々2番目にあった「じゃがいも」が一つ後ろにずれて、きちんと間に挿入されました。


 

📤 リストからの要素の削除

追加があれば、もちろん削除もあります。こちらもいくつか方法があります。

1. remove() - 中身を指定して削除

 

remove() は、削除したい要素の中身そのものを指定します。

Python
 
shopping_list = ['にんじん', '牛肉', 'じゃがいも']
shopping_list.remove("牛肉")
print(f"削除後: {shopping_list}")

出力結果:

削除後: ['にんじん', 'じゃがいも']

 

2. pop()del - 場所を指定して削除

pop()del は、インデックス番号で場所を指定して要素を削除します。

Python
 
shopping_list = ['にんじん', '牛肉', 'じゃがいも', 'カレールー']

# pop()でインデックス2(3番目)の 'じゃがいも' を削除
shopping_list.pop(2)
print(f"pop後: {shopping_list}")

# delでインデックス0(1番目)の 'にんじん' を削除
del shopping_list[0]
print(f"del後: {shopping_list}")

出力結果:

pop後: ['にんじん', '牛肉', 'カレールー']
del後: ['牛肉', 'カレールー']

pop() は削除した要素を返してくれる(取り出す)機能があるのに対し、del はシンプルに削除するだけのようです。場面によって使い分けるのですね。


 

💡 まとめ

リストは、後から自由に追加したり削除したりと、非常に柔軟に扱えるデータ構造だということが分かりました。このような性質を「ミュータブル(変更可能)」と呼ぶそうです。

たくさんのデータをまとめて扱える #リスト# は、#Python# プログラミングの基本中の基本。まずはこの整理棚を自在に使いこなせるように、しっかりと練習していきたいと思います。

 

【Python基礎】プログラムに外から指示を出す! sys.argv でコマンドライン引数を受け取る方法

Python基礎】プログラムに外から指示を出す! sys.argv でコマンドライン引数を受け取る方法

 

#Python# でいくつか小さなプログラムを作っていると、「プログラムを実行するたび

に、少しだけ動作を変えたいな」と思うことが増えてきました。例えば、挨拶をしてく

れるプログラムに、実行の都度、違う名前を伝えたい、といった具合です。

これまではその都度コードを書き換えていましたが、もっとスマートな方法はないもの

かと調べてみたところ、「コマンドライン引数」という仕組みがあることを知りまし

た。今回は、このコマンドライン引数を #Python# でどう扱うのか、調べたことをメ

モしておきます。


 

🗣️ コマンドライン引数とは?

コマンドライン引数(ひきすう)とは、プログラムを起動するときに、外から与えることができる追加情報のことです。

料理人に「カレーを作って」と頼むだけでなく、「カレーを辛口で、二人前作って」と具体的な指示を出すのに似ていますね。この「辛口で」「二人前」にあたるのが引数です。これにより、プログラムは実行されるその瞬間に指示を受け取り、動作を柔軟に変えることができるのです。


 

toolbox: sys.argv の登場

#Python# でこのコマンドライン引数を受け取るには、sys という**モジュール(便

利な道具箱)**を使います。まず、プログラムの冒頭で import sys と書いて、この道

具箱を使えるように準備します。

そして、sys.argv という変数に、渡された引数がリスト形式で自動的に格納されるの

です。argv とは "argument vector"(引数のベクトル)の略だそうです。難しく聞こ

えますが、単に「引数が入ったリスト」と考えれば良さそうです。


 

📝 sys.argv の中身と注意点

この sys.argv というリストの中身には、少し特徴があります。

  • sys.argv[0]: 1番目には、必ず実行したスクリプトのファイル名が入ります。

  • sys.argv[1]: 2番目に、1つ目の引数が入ります。

  • sys.argv[2]: 3番目に、2つ目の引数が入ります。

  • ...以下同様に続きます。

そして、非常に重要な注意点が一つ。sys.argv に格納される値は、すべて文字列として扱われます。もし数値として計算などで使いたい場合は、int()float() を使って、自分で数値に変換してあげる必要があります。


 

実践!引数を受け取るプログラム

実際に、名前と年齢を引数として受け取って挨拶を返すプログラムを作ってみました。

greet.py

Python
 
import sys

# 引数が足りない場合の使い方を表示して終了させる
if len(sys.argv) < 3:
    print("使い方: python greet.py [名前] [年齢]")
    sys.exit() # プログラムを終了

# sys.argvから値を取り出す
script_name = sys.argv[0]
name = sys.argv[1]
age_str = sys.argv[2] # この時点ではまだ文字列

# 年齢を文字列から整数に変換
age = int(age_str)

print(f"(実行されたスクリプトは {script_name} です)")
print(f"こんにちは、{name}さん! {age}歳なんですね。")

この greet.py を、ターミナル(コマンドプロンプト)で以下のように実行します。

$ python greet.py さくら 28

出力結果:

(実行されたスクリプトは greet.py です)
こんにちは、さくらさん! 28歳なんですね。

見事に、外から与えた「さくら」と「28」という情報を使って、プログラムの出力内容を変えることができました。


 

💡 まとめ

sys.argv を使うことで、プログラムの汎用性が一気に高まることが分かりました。

これまでコードの中に直接書いていた設定値などを外から与えられるようになると、プログラムが単なる自己完結したおもちゃから、柔軟な「道具」へと進化したように感じられます。

これもまた、#Python# の世界の奥深さを感じる、非常に面白い学習体験でした。