関数(かんすう)を学ぼうmap配列の下は、こちら↓
これは、pygameライブラリ内にある「関数」を実行しています。 実は、最初に使った print("Hello, world") も「関数」で、最初からPython言語にある「関数」を実行していました。 「関数」の内部では様々な処理が行われていますが、使う側は、「その結果どうなるか」を知っていればOKです。 因みに、pygame.mixer.init は、ざっくり言うと「曲を初期化する処理」です。 尚、pygame.mixer.init や print の部分が「関数名」で、 その後の、44100 や "Hello, world" のことを、「引数(ひきすう)」と言います。 <引数について> ・もし、「関数」に「引数」が無い場合は、print() という記述になります。 ・「引数」が複数ある場合は、 ,(カンマ)で区切ります。 例えば、文字列1つと数値2つが必要な「関数」の場合、 関数名("文字列", 数値1, 数値2) という感じです。 ・「引数」には、数値(44100等)の場合と文字列(Hello, world等)の場合がありますが、 数値の時は、そのまま記入し、文字列の時は、"(ダブルクォーテーション)で括るというルールがあります。 次に進みます。 ↓で、「新しい関数を定義(=関数を作る)」しています。
Pythonで「関数」を作るには、def 〜(): を使う、という決まりがありまして、 実際に「関数」を作っているのが、この部分→ def BGM_Play(fname): この行で、「関数名」と「引数が1つ必要」であることを定義しています。 その後の2行が、この関数内で行っている処理です。 プログラム内のコメントにもありますが、音楽ファイルを読み込んで、それを再生させる処理ですね。 <どこまでが関数の範囲か?> Pythonでは、関数名の直ぐ下の行に、「スペースで間を空けてから」、処理を記述していきます。 なので、改行後、「スペースで間を空け続ければ」、それが関数の範囲となります。 例えば、↓の様に記述した場合、関数内の処理は、2行分ですが、
↓の様に記述してしまうと、Test関数実行時に、1行分しか処理されません。
※注意点:Pythonでは「Tabを使わないこと」。 他の言語では、Tabで間を空けるのが一般的ですが、何故かPythonでTabを使うとエラーになってしまいます。 なので、私の場合は、Tabの代わりに、スペースを4つ入れています。 (エディターによっては、Tabを押した時にスペースを4つ挿入するように設定できます) 今回も読んでるだけじゃ身に付かないので、実際に試してみましょう! テキストエディターで新規のファイルを作り、↓を入力してみてください。
その後、例えば test.py というファイル名で保存します。(拡張子は必ず .py で) そのファイルを実行すると、Pythonのウインドウに 6 と表示され、入力待ち状態になります。 Enterキーを押すとウインドウが閉じます。 では、1行ずつ説明していきましょう。 ・1行目で、Testという関数と引数 n を定義しています。 ・2行目で、引数 n に、1を足す処理です。 ・3行目が、n の値を表示する処理です。 ・4行目は改行のみ。(改行しなくてもOKですが、見やすくする為に改行してます) ・5行目は、スペースで空けてないので、「Test関数の定義」を終わらせつつ、Test関数の引数に 5 を入れて実行しています。 ・6行目も改行のみ。 ・7行目の関数は、入力待ちをする関数です。 プログラムの流れは上から下に進みますので、 まず、1行目〜3行目でTest関数が定義され(Pythonが認識してくれる)、 次に5行目、6行目という順番で実行されました。 Test関数に渡した引数は 5 なので、関数内で 5+1 が行われ、6 を表示した、という感じです。 (次のページで、数値の演算方法を紹介します) 以上が関数の「定義方法」と「実行方法」です。 これも、いろいろ試して、理解を深めてください。 関数のラッピングについて関数の豆知識ということで、「ラッピング」という手法をご紹介します。今回の曲の関数も、「ラッピング」する為の関数です。 この2つの関数定義ですね↓
これを定義することによって、以降、BGM_Play("ファイル名") とするだけで曲を再生でき、 BGM_Stop() とするだけで、曲を停止できます。 この方が、pygame専用の関数を実行するよりも楽ですよね。 これが、「ラッピング(又はラップ)」と呼ばれる手法です。 「ラッピング」にはもう一つメリットがあって、例えば、「曲を再生させる」というだけでも、 使うライブラリや言語、OSによって、記述の仕方が全く異なります。 これを全部覚えるのは大変ですし、時間と脳内メモリの無駄ですよね。 なので、「自分なりの関数名でラッピングし、細かい処理を気にせずプログラミングできるようにする」 これが重要です。 |