見出し画像

非エンジニアのスタートアップ 0 年生 ( 3. Python の基本 )

こんにちは、株式会社ピケでサーバサイドエンジニアをしている古内です。

こちらの記事は【 3. Python の基本 】になります。

1. サービス開発に必要なこと
2. HTML、CSS、JavaScript の基本
3. Python の基本 ( 本記事 )
4. Docker の基本
5. Django で開発
6. GCP にデプロイ


目次

1. この記事について
2. Python
3. 変数
4. 四則演算
5. if 文
6. 関数
7. クラス
8. まとめ


1. この記事について

最初の記事を読んでいただいた方はわかると思いますが、このシリーズの記事の目標は勉強ではなくリリースなので多少わからないことがあっても進んでください。

必要なときに調べましょう!

それでは本題に入ります。

この記事では様々なプログラミング言語の共通概念を知ってもらうための記事になります。

一例として Python 言語で進めますが JavaScript や PHP、Ruby などにも通用するように書くつもりなので細かいことは考えず概念と用語を覚えてください。

また、あとの記事「 5. Django で開発 」で Python を使うのでウォーミングアップの気分で読んでみてください。


2. Python

Python はプログラミング言語です。

最近では深層学習に最も用いられる言語として注目されています。

深層学習以外にも Web サービスにも使われることがあり、インスタグラムも Python と Django ( Web フレームワーク ) を使っています。( 現在は不明 )

個人的にも Python をよく使っていて、ライブラリが豊富だったり、記法がわかりやすいのでおすすめです。

注意点としてはバージョンが 2 系列と 3 系列があり、結構違います。

それでは Python を例に変数、関数、クラスの解説をします。


3. 変数

変数とは何かを保存するための箱です。

以下のコードが Python で変数の宣言と保存をしています。

name = 'furuuchi'
age = 24

このコードでは

name という箱に 'furuuchi' を保存、
age という箱に 24 を保存

しています。

お気付きかもしれませんが変数の構文は

変数名 = 値

です。

注意点として「 = 」記号は等価ではなく代入の意味になります。

プログラミング言語の「 = 」は右辺を左辺に代入する意味であることが多いです。


4. 四則演算

四則演算は足し算、引き算、掛け算、割り算です。

以下のコードが Python で四則演算しています。

a = 1 + 2
b = 2 - 1
c = 2 * 2
d = 4 / 2

結果は

・変数 a に 1 + 1 の結果の 2 が代入される
・変数 b に 2 - 1 の結果の 1 が代入される
・変数 c に 2 × 2 の結果の 4 が代入される
・変数 d に 4 ÷ 2 の結果の 2 が代入される

になります。

プログラミング言語の掛け算は「 * 」、割り算は「 / 」であることが多いです。

上記は数値計算ですが、文字列に対して「 + 」を使うこともできます。

name = 'furuuchi' + 'takahiro'

変数 name に 'furuuchi' と 'takahiro' が文字列連結されて 'furuuchitakahiro' が代入されます。

大体のプログラミング言語で「 + 」記号で文字列連結ができます。

5. if 文

if 文は条件分岐です。

以下のコードが Python の条件分岐です。

age = 24
osake = 'NG'

if age > 19:
    osake = 'OK'

このコードは

先頭の 1 ~ 2 行目で age に 24 を代入、 osake に 'NG' を代入します。

次に if 文がきて、

if age > 19:

このコードで age が 19 より大きければ osake に 'OK' が代入されます。

if の構文は以下です。

if 値もしくは変数 比較演算子 値もしくは変数:

比較演算子については後ほど書きます。

このコードを以下のように少し変更します。

age = 24
osake = 'NG'

if age == 20:
    osake = 'ぎりぎりOK'
elif age > 19:
    osake = 'OK'

このコードの変更点は 2 つあります。

1 つは

if age > 19:

のコードが

elif age > 19:

に変更されました。 ( 先頭に el が追加された )

もう一つは

if age == 20:
    osake = 'ぎりぎりOK'

が追加された点です。

elif について解説します。

elif は else if の略で、意味としては

elif 文の手前にあった条件 ( if または elif ) に一致しなかった場合に条件を評価します。

文章ではわかりにくいので上記のコードを例に解説します。

最初に age と osake に代入がされます。

次に

if age == 20:

の if 文の条件を評価します。

この if 文の 「 == 」は左辺と右辺が等しいを意味します。
算数の「 = 」と同じですね。

今回 age には 24 が代入されているので 20 とは等しくないです。

そのため、

osake = 'ぎりぎりOK'

のコードは実行されません。

次に以下のコードが実行されます。

elif age > 19:

先程の if 文では 20 と 24 は等しくなかったので今回のこのコードが実行されます。

仮に先頭の代入を age = 20 にした場合はこの if 文評価されず、osake に 'OK' は代入されません。

繰り返しになりますが if や elif の条件が正しくなかったときだけ次の elif が実行されます。

if 文の構文解説で触れた比較演算子についても少し解説します。

比較演算子はその名の通り比較するための記号です。

・> ( より大きい )
・< ( 未満 )
・>= ( 以上 )
・<= ( 以下 )
・== ( 等しい )
・!= ( 等しくない )

などあります。

基本的にこれらの比較演算子は if 文で使うものと認識しましょう。

6. 関数

関数とは処理の塊です。

プログラミングの関数を数学の関数に例えて解説します。

y = x + 1 の数学の関数に例えると x が 1 の時 y が 2 になります。

この関数を文字で表現すると

渡された値 ( x = 1 ) に 1 を足した結果 ( y = 2 ) を返す関数

と表現できます。

この関数を Python で表現すると以下のコードになります。

def add_1(x):
    result = x + 1
    return result

これが y = x + 1 の関数を Python の関数で表現した場合です。

各行の解説をします。

def add_1(x):

このコードの def 部分は「関数定義開始の宣言」、add_1 部分は「名前」、x 部分は「この関数には x という値が渡されます ( 引数 ) 」になります。

result = x + 1

このコードは変数 result に 変数 x に 1 を足したものを代入します。

return result

変数 result をこの関数の結果として返します。( 戻り値 )

もちろんですが関数定義しただけでは動きませんので呼び出しが必要です。以下が、呼び出し例です。

def add_1(x):
    result = x + 1
    return result

number = add_1(2)

add_1 関数より下で add_1 関数を呼び出します。
HTML のときと同様 add_1 関数を読み込む前に呼び出すことはできません。

呼び出し方は関数名の後ろに「 ( ) 」をつけると関数呼び出しになります。

更に「 ( ) 」の中に 2 を渡すと、関数内の変数 x に代入されます。
( もちろんこの関数に 2 以外にも 100 とか -10 も渡せます )

最後に関数の結果を変数 number に代入しています。

また、値を渡されてきた変数 x ( 引数 ) は add_1 関数の終了とともに消えてしまいます。( 変数 x は add_1 関数内でしか使えない )


7. クラス

クラスは共通項の塊です。
1 年 1 組みたいなクラスではありません。

人間に例に解説します。

人間には「名前」と「性別」などがあり、「自己紹介の挨拶」も人それぞれで違います。

ですが、名前、性別、自己紹介の挨拶が違っていても人間です。

この人間の共通項 ( 名前、性別、自己紹介の挨拶 ) を抜き出したのが人間クラスになります。

私で例えると

・名前 : 古内
・性別 : 男
・自己紹介の挨拶 : 俺は古内です

となります。

人間クラスに具体的な名前、性別等を渡して古内を作りました。

この古内をインスタンスと呼びます。

そのため私は人間クラスのインスタンスです。
読者の方々も人間クラスのインスタンスです。

繰り返しになりますがクラスはものごとの共通項の塊なのです。

以下のコードは Python で人間クラスを表現したものです。

class Human:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def get_greeting_str(self):
        gender_text = '俺は'

        if self.gender == 'female':
            gender_text = '私は'

        return gender_text + self.name + 'です'

なんだか一気に難しくなりました。
頑張って上から各行を解説します。

class Human:

これは Human クラスの定義の開始です。

def __init__(self, name, gender):

これは Human クラスのインスタンス初期化関数です。( コンストラクタ )
( def から始まっているのでこれは関数とわかります。 )

Python の仕様で、クラスからインスタンスを生成する時の関数名が __init__ と決まっています。

self は自身の値 ( オブジェクト ) を意味しています。

( 初期化時に自身の値を初期化関数に渡してる意味がわからないと思いますがとりあえず「そういうもの」と認識してください )

name、gender は名前と性別ですね。
( 「6. 関数」の時の x みたいなものです )

self.name = name
self.gender = gender

左辺に「 self. 」が先頭についていますがこれをつけるとインスタンスに値を保存できます。( インスタンス変数 )

右辺の「 self. 」が付いていない name、gender は初期化関数に渡された値になります。( 引数 )

つまり、初期化関数に渡されてきた値を保持するために自身 ( self ) に値を保存しているということです。self に保存されたものは消えません。
( __init__ 関数の終了時、渡されてきた name と gender ( 引数 ) は消えます。 )

気づいているかもしれませんが __init__ 関数に return がありません。

これは __init__ 関数だけでなく様々な関数でもありえます。

return のない関数の場合は処理の結果を特に返しません。

「処理結果を返さない関数とか意味あるの?」と疑問に思いますが __init__ 関数では結果を返していませんが、渡された変数の保存は行っています。

処理結果を返さないから意味がないということはありません。

次の解説に進みます。

def get_greeting_str(self):
    gender_text = '俺は'

    if self.gender == 'female':
        gender_text = '私は'

    return gender_text + self.name + 'です'

self が当たり前のように入っていますね。

Python ではクラス内で関数を書く際はほとんど self が入ります。
仕様です。

self.gender と self.name は __init__ 関数 ( インスタンス初期化関数 ) で代入されたものと同じものです。 

それではこのクラスを使ってプログラムを実行するために変更します。

class Human:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def get_greeting_str(self):
        gender_text = '俺は'

        if self.gender == 'female':
            gender_text = '私は'

        return gender_text + self.name + 'です'

furuuchi = Human('furuuchi', 'male')
print(furuuchi.get_greeting_str())

変更点は

furuuchi = Human('furuuchi', 'male')
print(furuuchi.get_greeting_str())

です。

furuuchi = Human('furuuchi', 'male') は変数 furuuchi に Human('furuuchi', 'male') を代入しています。

Human('furuuchi', 'male') は具体的な名前、性別、挨拶を持った値です。

Human('furuuchi', 'male') のことをインスタンス生成といいます。

print(furuuchi.get_greeting_str()) は挨拶を表示しています。

上記のプログラムにprint 関数が定義されてないと思いますが、print 関数が使えます。

こういった定義無しで実行できる関数のことを組み込み関数と呼びます。

このプログラムの実行結果は

俺はfuruuchiです

になります。


8. まとめ

処理をしたい時は関数を書いて、条件分岐したい時は if 文を書く。
値を保存しときたければ変数に入れておく。
共通項があればそれを抽出してクラスの概念にする。

今はこれを覚えておけば良いと思います。

変数、関数、引数、戻り値、if 文、比較演算子、クラス、コンストラクタなど用語が様々出ましたがこれらは大体のプログラミング言語にもあります。

各プログラミング言語ごとに記述は少し違いますが概念は一緒です。

逆に考えると 1 つの言語を覚えると、他の言語を覚えることが簡単になります。

「 Python の〇〇は JavaScript の〇〇 」のように類推できます。

最初は辛いですが頑張って 1 つの言語を覚えながらサービスを作りましょう!


=======================================
PR
古内開発教室始めてみました!
この記事読んだけどもうちょっと知りたい!
自分ひとりだと心細い!
そういった方がいましたらぜひこちらを見てください!
古内開発教室
=======================================


次の記事 4. Docker の基本
前の記事 2. HTML、CSS、JavaScript の基本


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