Pythonを使ってプログラミングをしたい初心者や、他の言語からPythonを学習したい方を対象にしたPythonの入門編になります。
そのため、Pythonのインストールから基本的な処理の書き方などをサンプルを交えて解説しています。
Pythonのインストール
Pythonをインストールするには、WindowsとMacでインストールする方法は基本同じです。
Pythonのパッケージをダウンロードして、インストーラーを実行するだけでインストールが完了します。
モノによっては、コンパイルしたりしないといけない場合もありますが、通常の使い方では特にインストーラーを利用するのが無難です。
Windows
Windowsでインストールする場合は、インストーラーを利用してインストールした方がカンタンです。
まず、Pythonの公式サイトよりインストーラーをダウンロードします。
赤枠のダウンロードボタンからダウンロードしてください。
ダウンロードが完了したらexeファイルを実行してインストールを開始します。
インストーラーを実行すると上記の画面が表示されるので、Add Ptyhon Pathにチェックを入れて「Install now」をクリックしてください。
ここでチェックを入れないと環境変数に自分でPythonの実行パスを通す必要があります。
めんどくさいので、ここで必ずチェックを入れてください。
インストールが開始されると下記の画面が表示されます。
Setup was successfulと表示されるとインストールは無事完了したことになります。
「close」ボタンをクリックして閉じます。
Pythonのパスがしっかり通っているか確認します。
Windowsキー + R でファイル名を指定して実行の画面を表示します。
そこにcmdと入力して実行します。
コマンドプロンプトの画面が表示されたら、下記のバージョンを確認するコマンドを入力してください。
python -V
下記の様にバージョンが表示されると正常にインストールされています。
Mac
Macの場合もWindowsと同様にインストーラーからインストールできます。
しかし、毎回バージョンアップするたびにインストールをやり直すのもめんどくさいので、バージョン管理ツールを使ってインストールします。
MacやLinuxではバージョン管理ツールとしてanyenvを利用することができます。
anyenvについては、こちらの記事を確認ください。
-
プログラミング言語のバージョン管理を行うためにanyenvをインストール
各言語のバージョン管理を行うためにanyenvをインストールします。 anyenvで管理できるのは、Node.jsやPython、PHP、Golangなどがあります。 anyenvとは バージョン管理を行うツールのバージョンを管理します。 ...続きを見る
anyenvがインストールされているかチェックします。
$ which anyenv
/usr/local/bin/anyenv
このような表示がされていればOKです。
次にPythonのバージョン管理ツールであるpyenvがインストールされているか確認します。
$ anyenv versions | grep pyenv
pyenv:
上記のように表示されていれば、なにかしらのバージョンがインストールされています。
何も表示されなかった場合は、下記のコマンドでインストールを行います。
$ anyenv install pyenv
$ exec $SHELL -l
execを実行して環境への反映を行っています。
$ which pyenv
/Users/ユーザ名/.anyenv/envs/pyenv/bin/pyenv
上記の様にパスが表示されればOKです。
次にインストールされているPythonのバージョンを確認します。
$ pyenv versions
* system
何もインストールしていないと元々あるインストールされているpythonがsystemとして表示されます。
なので他のバージョンをインストールする場合は、下記のコマンドでインストールできるバージョンを確認します。
$ pyenv install --list
インストールできるバージョン一覧が表示されたと思います。
そこからインストールしたいバージョンを選びます。
インストールするには下記のコマンドになります。
$ pyenv install 3.9.6
3.9.6の部分がインストールしたいバージョンになります。
pypyとかanacondaとかインストールしたい場合は、3.9.6の部分を書き換えてインストールします。
もう一度、versionsで確認を行います。
$ pyenv versions
* system
3.9.6
3.9.6が追加されていると思いますが、この状態では利用できていません。
利用するには、*の位置を3.9.6に変更する必要があります。
変更するには、localオプションを指定して変更します。
$ pyenv local 3.9.6
$ pyenv versions
system
* 3.9.6
$ python -V
Python 3.9.6
Pythonのバージョンを確認してPython 3.9.6が表示されればインストールが完了しています。
書き方
どのプログラミング言語を書くにしても、書き方にはお作法があります。
Pythonはインデントの処理や改行によって、コードの範囲などを分けたりします。
下記のプログラムを実行すると問題なく表示されます。
print('テスト')
実行するには、python ファイル名で実行できます。
他にもインタラクティブモード(いわゆる対話モード)でも実行することができます。
インタラクティブモードは下記の様な使い方をします。
$ python
Python 3.9.6 (default, Aug 26 2021, 20:40:05)
[Clang 12.0.5 (clang-1205.0.22.11)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print('テスト')
テスト
>>>
インタラクティブモードを終わらせるには、exit()を入力して終わらせます。
ファイルを実行するには、下記になります。
$ python ファイル名
テスト
エラーもなく、無事に「テスト」と表示されました。
しかし、インデントによってエラーが表示されることもあります。
下記の様な形で書くとエラーになります。
print('テスト')
print('テスト1')
2行目はワザとインデントをつけています。
PHPとかJavaなどの言語では問題なく表示することができますが、Pythonはこのインデントでエラーが表示されます。
File "/Users/ユーザ名/プロジェクト/パス/ファイル名.py", line 2
print('テスト1')
IndentationError: unexpected indent
IndentationErrorと表示されてエラーになります。
そのため、関数や条件式、ループ、クラスといった構造の時には注意が必要なってきます。
他の言語から来ると若干戸惑います。
数値と文字列と型
数値と文字列の違いについて、数値は0から9を使います。
しかし、シングルクォーテーションやダブルクォーテーションで括ると文字列の扱いになります。
下記は、100の数値を表示するプログラムです。
print(100)
print(type(100))
2行目のtype関数は、値の型を表す関数になります。
そのため上記のプログラムは、int(数値)として表示されます。
100
<class 'int'>
しかし、この100をシングルクォーテーションまたはダブルクォーテーションで括るとstr(文字列)として型が変わります。
print('100')
print(type('100'))
結果はstrになります。
100
<class 'str'>
そのため、値は数字でもシングルまたはダブルクォーテーションで括ると文字列になります。
このintやstrの値が型になります。
初心者が覚えておくべきPythonの型
Pythonの型はいろいろありますが、初心者が覚えておくべき型は下記になります。
覚えておくべき型
- 文字列型(str)
- 数値型(intやfloatなど)
- 論理型(bool)
- リスト型(list)
変数とは
データ入れる箱的な入れモノです。
Pythonでの変数の書き方は、下記の様になります。
a = 10
b = 'あいうえお'
c = []
d = ()
e = True
f = lambda a, b : (a + b)
print(a)
print(b)
print(c)
print(e)
print(f)
print(f(1, 2))
aからfまでの変数に、さまざまな値を定義しています。
aの変数には数値を入れています。
bの変数には文字列を入れています。
cの変数には、リストの値を入れています。
dの変数には、タプルという値を入れています。
eの変数は、論理値の値を入れています。
fの変数ですが、何してるの?って思った方もいると思います。
これはラムダ式(lambda式)で、無名関数を入れた処理になります。
結果を見ると、functionとして表示されます。
これを関数として利用するには、fに対して2つの引数を入れることで利用できます。
引数については、後ほど関数のところで解説します。
10
あいうえお
[]
True
<function <lambda> at 0x1040890d0>
3
Pythonでは定数の定義する方法なく、命名規則によって定数であると判断します。
命名規則については、PEP8というルールがあります。
ラムダ式とは
ラムダ式とはコードの量を減らすことができる処理です。
1度しか使わないので、別ファイルでクラスを作ったり関数を作ったりするのがめんどくさいですよね。
そのような時に利用するのが、ラムダ式を使った無名関数だったりします。
定数とは
変数と同じ様に値を入れますが、一度入れた値は変更することができないのが定数になります。
しかし、Pythonではこの定数を定義する方法はなく、命名規則によって判断する必要があります。
ちなみにJavaだとfinalで、PHPだとdefineとconstで定義できます。
PEP8とは
Pythonのコードスタイルのガイドラインです。
変数の名前の付け方やクラスの名前の付け方など、さまざまなルールがあります。
興味がある方は、PEP8の公式をぜひご確認ください。
演算
Pythonでは、算術演算やビット演算、比較演算や論理演算を行うことができます。
演算種類
- 算術演算
- ビット演算
- 割り当て演算
- 比較演算
- 論理演算
算術演算
四則演算を行うことができます。
書き方としては、他の言語とほとんど同じで違いはほとんどありません。
足し算の書き方
x = 1 + 2
print(x)
# xは3になる
減算の書き方
x = 3 - 2
print(x)
# xは1になる
乗算の書き方
x = 3 * 2
print(x)
# xは6になる
除算の書き方
x = 3 / 2
print(x)
# xは1.5になる
ちなみに//にすると値が切り捨てされた値になります。
x = 3 // 2
print(x)
# この場合のxは1になる
剰余の書き方
x = 3 % 2
print(x)
# xの値は1になる
ビット演算
ビット演算は、IoTなどの制御系の処理でよく使われます。
論理積や論理和、ビットシフトなどを行うことができます。
論理積の書き方
x = 0b101 & 0b110 # 5と6の値
print(x) # 4になる
'''
計算の仕方
101
110
---
100
0b100となって4になる
'''
0bは二進数表記で十進数表記は0oです。
十六進数は、0xの表記で表します。
論理和の書き方
x = 0b101 | 0b110
print(x) # 7になる
比較演算
比較演算は、TrueまたはFalseを返します。
そのため、if文やwhile文の中でよく使います。
x = 1 == 1
print(x) # True
y = 1 == 0
print(y) # False
a = 2
b = 1
z = a > b
print(z) # True
xは1=1は同じなのでTrueを返しています。
yは1=0は同じではないのでFalseを返しています。
zはaはbよりも大きのでTrueになります。
他にも等しくない場合にTrueを返す!=があります。
x = 1 != 1
print(x) # Falseを返す
==だったら1と1は同じ値なのでTrueを返しますが、!=では等しくなかったらTrueになるためFalseを返しています。
論理演算
JavaやPHP、Javascriptだと&&や||を使いますが、Pythonの場合は、andとor、notを使います。
久しぶりにPython書くとよく間違います。自分だけ?(笑)
x = True and True
print(x) # どちらもTrueなので結果はTrue
y = True and False
print(y) # Falseがあるので結果はFalse
z = True or False
print(z) # どちらか一方がTrueなので結果はTrue
コメントアウトの書き方
プログラムを書いていると、この処理はこういうモノですとコメントを入れたい場合があります。
そう言った場合に利用するのが#になります。
1行コメントアウトの書き方
#はインラインコメントになります。
1行だけをコメントするのであれば#(ハッシュ記号)を使いましょう。
x = 1 + 2 # この合計は3になります。
複数行のコメントアウトをするには?
#(ハッシュ記号)を利用して、ひとつずつコメントしたものを、コメントアウトをするのはめんどくさいです。
複数行のコメントアウトを行うことも可能です。
複数行にわたるコメントをしたい場合は、'(シングルクォーテーション)を3つ並べて使います。
コメントが書き終わったら、またシングルクォーテーションを3つ並べて閉じます。
そうすることで、複数行のコメントアウトを行うことができます。
''' これはコメントです。
これもコメントです。
テストコメントです。
x = 1 + 2
print(x)
'''
コメントアウトの中にあるので、x = 1 + 2とprintの表示処理はされません。
条件式
条件式とは、値や式などの比較、論理演算などを組み合わせたモノです。
そのため条件式の結果によって、「データベースの登録を行いたい」もしくは「エラーなのでやりなおし」といった処理をする時にIF文を使って処理をします。
IF文の書き方
IF文の書き方は下記になります。
x = 10
y = 10
if x == y:
print('xとyは同じ')
yのあとに:(コロン)がIF文の区切りになります。
IF文のあとはインデントをする必要があります。
OKの場合
if x == y:
print('xとyは同じ')
NGの場合
if x == y:
print('xとyは同じ')
これはインデントがないのでエラーになります。
そのため、下記のエラーが表示されます。
IndentationError: expected an indented block
複数の条件による書き方
IF文では条件によって処理を変える場合に利用しますが、1つ1つではなく1つの処理の流れで書くことができます。
まず、下記はxとyが同じだった場合と、同じではない場合の処理をしています。
x = 10
y = 5
if x == y:
print('xとyは同じ')
else:
print('xとyは同じではない')
このコードの結果は、10と5は同じではないので「xとyは同じではない」が表示されます。
elseは、どの条件にも当てはまらない場合に入る処理になります。
さらに条件を追加したのが下記になります。
x = 10
y = 5
if x == y:
print('xとyは同じ')
elif x > y:
print('xはyより大きい')
else:
print('xとyは同じではない')
xはyより大きいかどうかという条件式を追加しています。
この条件を追加するには、elifを使います。
この処理の結果は、x(10)はy(5)より大きいので「xはyより大きい」が表示されます。
ループ文
ループ文とは同じ処理を繰り返し行いたい場合に、利用する処理です。
ループ文の書き方として、forとwhile文があります。
Pythonではこの2つしかないため、do whileといったループは一手間加えないといけません。
for文
JavaやPHP、Javascirptのfor文は下記のように書くことができますが、Pythonは下記のように書くことはできません。
for (変数の初期化; 条件式; インクリメント) {
処理
}
Javascriptだと
for (let i = 0; i < 10; i++) {
}
Pythonでは下記のように書きます。
'''
for インデックス, 変数 in enumerate(リスト):
'''
list = [1, 2, 3]
for i, x in enumerate(list):
print(list[i])
print(x)
# for inの書き方
list = [1, 2, 3]
for x in list:
print(x)
インデックス番号を使いたい場合は、enumerateを使います。
インデックス不要であればenumerateを使う必要がなく、for inの書き方のようにシンプルに書くことができます。
while文
while文は条件式がTrueの状態であれば、ループを続ける処理を書くことができます。
下記は、indexという変数が10以上になるまでループする処理をしています。
index = 0
while index < 10:
print(index)
index += 1
index += 1をすることで、ループするたびに1を加算し続けます。
indexが10になると、index < 10という条件がFalseになるのでループの処理が終了します。
Pythonではインクリメントは使えない(++やーーといった処理)
breakとcontinue
ループの処理を途中で抜けたい場合に、breakの処理を使います。
index = 0
while index < 10:
print(index)
if index == 5:
break
index += 1
if文を使ってindexが5になったら、breakをつかってループを抜ける処理をしています。
こうすうることで、本来は0から9まで表示していた処理が、0から5まで表示する処理に変わります。
continueはループを抜けるのではなく、ループの最後まで処理をせずに進める処理をします。
そのため下記のコードは、偶数の時はprintの処理で表示するけど奇数の時はprintの処理まで到達しません。
index = 0
while index < 10:
index += 1
if (index % 2) == 1:
continue
print(index)
関数の書き方
関数とは特定の処理をひとまとまりにする処理のことです。
ひとまとまりにすることで、同じ処理を作成することなく再利用することで、コードの保全や利便性が高まります。
どの様にして関数を書くのかというと、defというキーワードを使います。
下記の様にカンタンに作成することが可能です。
def 関数名():
これが一番シンプルな関数の書き方になります。
例えば、表示するだけの関数は下記になります。
def view():
print('表示したよ')
view() # 結果は表示したよ
引数と戻り値
関数には引数と戻り値を設定することができます。
引数とは、関数に値を渡したい場合に設定する項目のことです。
def 関数名(引数, ...引数):
戻り値とは、関数が値を返したい場合に設定する項目のことです。
def 関数名():
return 戻り値
戻り値を返すためには、returnを使います。
下記は、引数と戻り値を使ったカンタンなサンプルになります。
def sum(a, b):
return a + b
total = sum(1, 2)
print(total) # 3が表示される
sumという名前の関数に引数aと引数bがあり、戻り値としてaとbの足した値を戻す関数になります。
引数のアスタリスクが1つの場合(*)
引数にアスタリスクが1つついた場合は、その引数はタプルとして動作します。
タプルとは、値を変更することができないリストのようなモノです。
def sum(*a, b):
total = b
for d in a:
total += d
return total
total = sum(1, 2, 3, b=4)
print(total)
タプルにすることで、引数を何個でも入れることが可能な関数になる。
そのため、bの引数にはb=という形で直接指定する必要がある。
そのため、b=を設定しないと下記の様にエラーが発生する。
total = sum(1, 2, 3)
TypeError: sum() missing 1 required keyword-only argument: 'b'
bの引数を設定しなくてもエラーを出さない様に解消するには、b引数にデフォルト値を設定します。
def sum(*a, b=0):
total = b
for d in a:
total += d
return total
bの引数にイコールで0をセットすることで、bの引数が無ければ0であるという値になります。
引数のアスタリスクが2つの場合(**)
引数にアスタリスクを2つ設定すると、辞書型になります。
そのため関数の引数に何も設定しなくても、柔軟に引数の設定を行うことができます。
def TestFunc(**a):
print(a)
TestFunc(a=1, b=2)
# 結果 {'a': 1, 'b': 2}
モジュール
ここでいうモジュールとは、Pythonのコードで記述されたファイルのことで、importを使って利用します。
基本的には、複数の関数を1つのモジュールにまとめたりします。
例として、mod.pyというファイルを作ります。
def View():
print('モジュールテスト')
中のコードは、Viewという関数です。
このモジュールを呼び出すための実行ファイル、main.pyを作ります。
import mod
mod.View() # 結果: モジュールテスト
importでmodを呼び出して、mod.View()の形で使います。
他にもモジュールの中に複数の関数があるが、1つだけを読み込みたいという場合は、fromを使ったimportをします。
from mod import View
View()
このようにピンポイントで読み込むことで、読み込みデータを軽減することができます。
クラスの書き方
Pythonはオブジェクト指向型の言語です。
私は関数型の言語と勘違いしていましたが、オブジェクト指向型の言語でした。
オブジェクトを作るには、クラスが必要になります。
では、実際にクラスを作るにはclassキーワードを使って作成します。
class クラス名:
あとはクラスの中に変数や関数を定義していけば、再利用性やメンテナンス性があるオブジェクトが出来上がります。
下記は、時間と文字を表示するクラスになります。
import datetime
class View:
def log(self, data):
print("[" + str(datetime.datetime.now()) + "]: " + data)
v = View()
v.log('表示')
オブジェクト指向とは
オブジェクト指向を語ると、1冊の本ができるくらい説明が必要になりそうなので超カンタンに説明します。
オブジェクト指向とは、データとコードをひとつにまとめてオブジェクトとして、さまざまなオブジェクトを組み合わせてシステムを構築していく手法のことです。
クラスとは
ここでいうクラスとは、オブジェクトの設計図のことです。
オブジェクトはクラスから生成されるため、オブジェクトを作るにはクラスを定義する必要があります。
エラー処理
プログラムが複雑になってくると、エラーが発生します。
サービスを提供していると、エラーが出てプログラムが止まることで致命的な損失につながる可能性があります。
そのため、エラーが出ても止まらない様にするために、try exceptを使ってエラー処理をします。
下記はZeroDivisionErrorになるプログラムです。
ZeroDivisionErrorとは、数値を0で割ることはできません。
そのような処理をするとエラーになることです。
a = 10
b = 0
print(a / b)
上記のコードを実行すると下記のエラーが表示されます。
ZeroDivisionError: division by zero
このエラーを出さない様にするために、try exceptを使います。
try
プログラムのコード
except: エラーコード as 変数:
エラー処理
as 変数は、必要が無ければ記載しなくても問題ありません。
try:
a = 10
b = 0
print(a / b)
except ZeroDivisionError:
print('ゼロでは割れません') # 結果: ゼロでは割れませんが表示される
変数をセットするとエラ〜メッセージを取得することが可能です。
try:
a = 10
b = 0
print(a / b)
except ZeroDivisionError as e:
print('ゼロでは割れません', e # 結果: ゼロでは割れません division by zero
まとめ
今回、Pythonのインストールから変数や関数、クラスといった基本的な書き方の解説を行なってきました。
Pythonは初心者でもカンタンにコードを書くことができます。
もっと踏み込んで学習していけば、データサイエンスで利用するコードやAIといった機械学習や強化学習も扱える様になります。
ぜひ学びを深めて、Pythonのスキルを伸ばしてください。
今後の人生を豊かにする為にキャリアアップのステップとして、自分への投資をしてみませんか?