仮想通貨自動売買botを作ろうシリーズ_14---関数を使おう(前編)---

※以降は全て、windows10を前提にお話しています。
※不明な所は、都度ググって確かめる癖をつけておきましょう。
※読んでみて価値が無いと思われた方は、「返金申請」をしてください。

前号はこちら


<再利用するコードは関数化してしまおう>

今回はいきなり実践!
下記のコードを「test14.py」に書いてください。

「import time」
「import datetime」
「」
「while True:」
「    print(datetime.datetime.now())」
「    time.slepp(5)」

さあ実行してみましょう!
って、おいおい俺たちを馬鹿にしてるのか?
そんな物実行する前から結果分かるわボケナス!
って声が聞こえてきそうですね。

着実にレベルアップしてそうで何よりです。
では、実行するのはやめて、「test14.py」のコードを下記にしてください。

「import time」
「import datetime」
「」
「def get_time():」
「    print(datetime.datetime.now())」
「」
「while True:」
「    get_time()」
「    time.slepp(5)」

さあ新しいコードが登場しました。
今度は文句を言わずに実行してみましょう!

「c:\bot>python test14.py」
「」
「2020-03-12 16:25:16.910834」
「2020-03-12 16:25:21.910834」
「2020-03-12 16:25:26.910834」
「延々と止まらない。。。」

どうでしょう。
実行しなかった「最初のコードと同じ結果」になっていないでしょうか。

ちょっと順番を変えて、下の行から見ていきます。

「    get_time()」

この部分です。
どうやら「get_time()」と言う命令を実行している様です。

それでは、上に目を向けましょう。

「def get_time():」
「    print(datetime.datetime.now())」

この部分です。
ここでも「get_time()」と言う命令が登場しています。
でも、先頭は「def」と言う言葉になっていますし、最後の文字は「:コロン」ですよね。
「:コロン」と言えば、if文とかwhile文で登場する「子供のプロセスが存在する印」でしたよね。

実行結果から既に想像できているかもしれませんが、この「def」の部分で「get_time()」命令の「実行する中身」を定義しているんです。
つまり、日本語で翻訳していくと。

「timeを使用(import)宣言するよ」
「datetimeを使用(import)宣言するよ」
「」
「get_time()って言う命令の中身を定義(def)するよ」
「 現在時刻をprintするよ」
「」
「whileで延々繰り返すよ」
「 『上で定義している』get_time()命令を実行するよ」
「 5秒間待て」

と言う感じになります。
この「defで定義された命令セットの事を『関数』と呼び」ます。
何度も繰り返すような命令は、関数化しておいた方が便利なんです。
なぜか。
今回はたったの1行だけの関数の中身でしたが、もちろん何行でも何十行でも関数の中身を複雑化できますので、そんな面倒くさい事を毎回コードの中で書くのはナンセンスです。

できるだけ繰り返す命令は、関数化してしまいましょう。

「def」 → 各種の命令をまとめてを関数として定義する

ここで既にお気づきでしょうか?
今回作成した「get_time()関数」ですが、「timeパッケージのsleep()命令」なんかと同じ様な書き方になっていますよね。
実は、「timeパッケージのsleep()命令」と言うのは、命令ではなく、正確には関数(timeパッケージのsleep()関数)だったんです。
逆に言うと、パッケージと言うのは、命令セットと言うよりは、関数セットの事だったんです。

つまりパッケージのimportと言うのは、誰かが作った関数セットを定義している。
パッケージを定義していないけど使いたい関数は、「自分でdefで関数を作って定義」している。

なので、「定義する」ので必ず「get_time()関数を実際に使う前に定義(def命令で書いていく)のが必要」になってきます。

試しに、下記に書き換えて確かめてみてください。

「import time」
「import datetime」
「」
「while True:」
「    get_time()」
「    time.slepp(5)」
「」
「def get_time():」
「    print(datetime.datetime.now())」

実行結果は書きませんが、「get_time()なんて知らねーぞエラー」が出るかと思います。
なぜそうなるかは、importの説明の時に出てきましたよね。

なお、defで定義する関数は、importと同じで「いくつでも定義できます」ので、よく使うコードは関数化しておけば、他のプログラムに「コピペで簡単に再利用」が可能です。
ここにも関数化のメリットがあります。

また、今回の例の様に、「関数(get_time)の中で違う関数(printやdatetime)を使う」事も可能ですので、やはり繰り返し使用する命令は関数化しておいた方が便利かと思います。


以降の有料部分に書かれているのは、
<関数から結果を返してもらおう>
<関数に電卓の代わりをしてもらう>
<複数の引数>


※※※無料※※※

ここから先は

3,700字

¥ 100

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?