SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

レトロ風ゲームを作って学ぶPython入門

【作って学ぶPython】プログラムを書いて、モジュールやパッケージで整理しよう!

レトロ風ゲームを作って学ぶPython入門 第3回


  • X ポスト
  • このエントリーをはてなブックマークに追加

 自動化やAIなどさまざまな分野で活用され、需要が高いPython。この連載では、小さなレトロ風ゲームを作りながら、Pythonを学ぶことができます。第3回は、第2回の続きでPythonの文法として、関数、モジュールとパッケージを学びます。そして、Pygameのさまざまな機能を確認していきます。今回のテーマは、プログラムを「書く」ことと「整理する」ことです。さまざまな処理を関数としてまとめて、モジュールやパッケージで整理していけるようにしましょう!

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 前回は、次のようなことを学びました。

  • Pythonの文法 単純な型
  • Pythonの文法 複数の値を格納する型
  • Pythonの文法 条件分岐
  • Pythonの文法 繰り返し処理
  • Pygameの基本コードの読み解き

 今回は、まだ残っているPythonの文法として、関数、モジュールとパッケージを学びます。そして、Pygameのさまざまな機能を確認していきます。

 そして今回のテーマは、プログラムを「書く」ことと「整理する」ことです。さまざまな処理を関数としてまとめて、モジュールやパッケージで整理していけるようにしましょう。

関数

 プログラムでは、自分で関数を定義することで、処理をまとめて使いやすくすることができます。

 関数には、外部から値を受け取る引数と、呼び出し元に結果を返す戻り値があります。関数の基本的な構造は、引数を受け取り、処理をおこない、戻り値を返すというものです。

関数
関数

関数の定義

 Pythonではキーワードdefを使い、関数を定義します。def 関数名(引数名):と書き、次の行からインデントして処理のグループを書きます。複数の引数を受け取るときは、,区切りで並べて書きます。引数は、通常の変数と同じように利用できます。

 関数は、return文が実行されると終了します。return 戻り値と書くことで、値を返すことができます。戻り値を書かなかったときの戻り値はNone(値なし)です。また関数は、処理のグループのインデントが解除されても終了します。

 プログラムの例を示します。2つの数値を足す関数を、定義して利用します。この関数は、引数と戻り値を持ちます。argargument(引数)の略です。

関数の定義と利用
def add(arg1, arg2):
    res = arg1 + arg2
    return res

print(add(10, 20))  # 「30」と表示
関数
関数

 プログラムの例を示します。引数を型とともに出力する関数です。戻り値を持ちません。

戻り値のない関数
def print_type(arg):
    print(arg, type(arg))

print_type(10)  # 「10 <class 'int'>」と表示

 プログラムの例を示します。1から4までの累乗を返す関数です。引数を持ちません。

引数のない関数
def get_powers():
    data = []
    for i in range(1, 5):   # 1から1ずつ5未満まで(1, 2, 3, 4)
        data.append(i ** i) # 各値の累乗を求める
    return data

print(get_powers())     # 「[1, 4, 27, 256]」と表示

 空の関数を書きたいときはpassを使います。このときの戻り値はNone(値なし)です。

空の関数
def test():
    pass

print(test())   # 「None」と表示

関数の引数

 関数を利用するときは、引数の書いた順番に値を書く以外に、引数名を書いて値を書くこともできます。

 引数名を書くときには、それぞれの順番は前後しても構いません。値だけ書く書き方と混ぜることもできます。ただし混ぜるときは、引数名で書くものをあとにする必要があります。

 プログラムの例を示します。

さまざまな引数の書き方
def print_prof(name, age):
    print(f"名前は{name}、{age}歳です")

print_prof(name = "ポチ", age = 10) # 「名前はポチ、10歳です」と表示
print_prof(age = 9, name = "タマ")  # 「名前はタマ、9歳です」と表示
print_prof("ココア", age = 11)      # 「名前はココア、11歳です」と表示
# print_prof(name = "ミカン", 8) ← こういう順番は駄目

アスタリスク

 Pythonの関数を見ていると、*(アスタリスク)が出てくることがあります。*には、いくつかの使い方があります。

 まずは、関数を呼び出すときの*です。*を使えば、リストや辞書を展開して関数の引数にできます。リストを展開するときは*変数名と書きます。辞書を展開するときは**変数名と書きます。

 プログラムの例を示します。*でリストを展開します。

リストを展開
def add(arg1, arg2):
    res = arg1 + arg2
    return res

data = [10, 20]
print(add(*data))   # 「30」と表示

 プログラムの例を示します。**で辞書を展開します。

辞書を展開
def print_prof(name, age):
    print(f"名前は{name}、{age}歳です")

data = {"name": "きなこ", "age": 6}
print_prof(**data)  # 「名前はきなこ、6歳です」と表示

 次に*の使い方の2つ目を説明します。関数で値を受け取るときの*です。

 引数の前に*を付ければ、引数をリストや辞書の形で受け取れます。リストとして受け取るときは*引数名と書きます。辞書として受け取るときは**引数名と書きます。

 プログラムの例を示します。まずは*を使いリストとして受け取ります。

リストとして受け取る
def add(*args):
    res = 0
    for i in args:  # 引数のリストを1要素ずつ処理
        res += i    # 要素をresに足していく
    return res

print(add(10, 20, 30))   # 「60」と表示

 プログラムの例を示します。次は**を使い辞書として受け取ります。

辞書として受け取る
def print_prof(**kwargs):
    text = ""
    for k, v in kwargs.items():
        text += f"{k}は{v} "
    print(text)

print_prof(name = "ハナ", age = 7)  # 「nameはハナ ageは7」と表示

次のページ
モジュールとパッケージ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
レトロ風ゲームを作って学ぶPython入門連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19457 2024/06/10 12:26

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング