CrossBridge Lab

技術ネタ、デバイスネタを...

今からでも遅くないPython入門

はじめに

 Pythonは読みやすく効率がよいコードをなるべく簡単に書けるようにするという思想のもと開発されたため、文法が極力単純化しておりコードの可読性が高く読み書きがし易いという言語的な特性があります。昨今ではデータ分析、機械学習などの盛り上がりとともに名前を聞く機会が増えた言語です。2017/8現在最新のバージョンは3.6.2になります。

インタラクティブシェル

 Pythonには対話的にコードを実行する機能があり、引数無しでPythonコマンドを実行することでインタラクティブシェルという対話的にコードを実行するモードになります。インタラクティブシェルは言語を学ぶときにも便利な機能です。

$ python
Python 3.6.2 (default, Sep  1 2017, 13:15:44)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

コードの書き方

ステートメントの区切り

 Pythonステートメントの区切りは改行またはセミコロン「;」になります。次の2つのコードは同じものとなります。

a = 5
b = 10
print(a + b)
a = 5; b = 10; print(a + b)

コメント

 コメントは「#」に続けて書きます。

# 初期化処理
min = 5 # 取り得る最小値
max = 10 # 取り得る最大値

 複数行のコメントは3個続けたダブルクォーテーションまたはシングルクォーテーションで囲みます。

"""
複数行の
コメントアウト
"""

本来3個続けたダブルクォーテーションまたはシングルクォーテーションで囲まれたものは複数行の文字列という扱いです。Pythonに複数行のコメントアウトの仕組みはないのですがコードの中に記述された文字列は実行に影響を及ぼさないという仕様のため複数行のコメントとして利用しています。

数値型

整数、浮動小数点、複素数

 数値型には整数(int)、浮動小数点(float)、複素数(complex)の3種類があります。

切り捨てた整数を得たい時は「//」演算子を使います。

数値演算子

演算子 説明
+ 足し算
- 引き算
* 掛け算
/ 割り算
// 切り捨て割り算
** べき乗

文字列

 文字列をstr型とbytes型の2種類の型で扱います。str型はUnicode文字列を、bytes型はバイト列で文字列を扱います。基本的には文字列操作はstr型で行い、ファイルへの読み書きやネットワークへの読み書きはbytes型で行います。

文字列の検索

 指定した文字列を検索して個数を返すメソッドと、最初に見つけたインデックス(位置)を返すメソッドがあります。それぞれ開始位置、終了位置を指定することもできます。両方共省略した場合は文字列全てから、終了位置を省略した場合は指定した開始位置から文字列の終わりまで検索します。

文字列が含まれる個数を返すcountメソッド

count("検索する文字列")
count("検索する文字列", 開始位置)
count("検索する文字列", 開始位置, 終了位置)

文字列を検索してインデックスを返すfindメソッド

find("検索する文字列")
find("検索する文字列", 開始位置)
find("検索する文字列", 開始位置, 終了位置)

文字列の分割

splitメソッドで区切り文字を指定して文字列を分割することができます。

split("区切り文字")

文字列の結合

 +演算子またはリストのjoinメソッド使って文字列の結合を行います。

>>> a = "Hello"
>>> b = "World"
>>> a + b
'HelloWorld'

 リストのjoinメソッドはリストをCSVファイルとして出力する際などに役立ちます。

>>> array = ["one", "two", "three"]
>>> ",".join(array)
'one,two,three'

制御構文

条件分岐:if

 if文で条件分岐を行うことができます。他の言語と違う特徴的なところは{}でスコープを表すのではなくインデントで表します。Pythonでインデントはソースコードを読みやすくするという意図だけでなく、スコープを表すという重要な役割を持っています。

if 条件式:
    処理1

 複数の条件を指定する時は「elif」を用いります。

if 条件式1:
    処理1
elif 条件式2:
    処理2
else:
    処理3

 条件式には次のものが使うことができます。

説明
a == b aとbが等しい場合に真
a != b aとbが等しくない場合に真
a < b aがbより小さい場合に真
a <= b aがb以下の場合に真
a > b aがbより大きい場合に真
a >= b aがb以下の場合に真
a and b aとbの両方が真の場合に真
a or b aもしくはbの一方でも真の場合に真
not a aが偽の場合に真
a is b aとbが同じオブジェクトの場合に真
a is not b aとbが異なるオブジェクトの場合に真

繰り返し:for / while

 繰り返しを行う制御構文はfor文とwhile文があります。それぞれ繰り返しの処理の中で繰り返しのループを抜けるbreak文とループの先頭に戻って繰り返すcontinue文を使うことができます。

for文

for 変数 in リスト/タプル/文字列など:
 処理
else:
    最後に行う処理

while文

while 条件式:
 処理
else:
    最後に行う処理

 リストをfor文で繰り返し処理する場合は次のように記述します。

for x in [1,2,3]:
    print(x)

 単純に指定した回数実行したい場合もあります。その場合はrange関数を使います。

for x in range(5):
    print(x) # 0から4まで順に出力される

関数とクラス

関数

 関数の定義はdef文を使います。インデントがスコープを表すことを忘れないようにしましょう。

def 関数名():
    # 処理を記述

 他の言語と同じく引数も指定することができ、戻り値として値を返すこともできます。デフォルト引数も指定することができます。

def sum(a, b=0):
    result = a + b
    print(result)
    return result
result = sum(2,3) # 5が出力され、戻り値として5を受け取る

型ヒント (Type Hints)

 Pythonの関数では引数や戻り値の型を指定することはできません。ただ次のように注釈(型アノテーション)を付けることができます。これを型ヒント (Type Hints)と言います。

def sum(a: int, b: int) -> int:
    result = a + b
    print(result)
    return result

 アノテーションはあくまでコメントのようなもので実行時にはチェックされないので注意が必要です。エディタによってはソースコードを記述した際に警告が出たり、入力の補完に型の情報が使われたりするのでアノテーションを付けることは有用です。