はじめに
当記事はPythonの基礎構文をつらつらとまとめています。
何らか1つの言語を一通り経験した方をターゲットとしており
「コンストラクタとは~~」という初心者向け解説などはいらないので、流し読みで記法だけ確認できるような記事としています。
基礎構文
ファイルの実行
python pythonファイルのパス.py
pythonのファイルはコマンドプロンプト上から実行できます。
環境変数「python」の登録が必要。環境変数があるかどうかはコマンドプロンプト上で「set python」で確認ができます。
コメント
# 行コメント
"""
複数行コメント (ダブルクォーテーション3つ)
"""
コンソール操作
# コンソール出力
print("文字列")
# コンソール入力
# 数値列も文字列型で返却するので型変換関数int()などが必要。
str = input("文字列を入力してください。")
value = int(input("数字を入力してください。"))
演算子
算術演算子
# 基本形
value = 9 + 3 # 加算 : 12
value = 9 - 3 # 減算 : 6
value = 9 * 3 # 乗算 : 27
value = 9 / 3 # 除算 : 3
value = 9 % 3 # 剰余 : 0
# 省略形
value += 3
value -= 3
value *= 3
value /= 3
value %= 3
# インクリメント、デクリメント省略形は構文エラー(使用不可)
# value++
# value--
論理演算子
# and
value1 == 10 and value2 == 20
# or
value1 == 10 or value2 == 20
# not
not value1 == 10
pythonには他言語における「&&」「||」「!」が存在しません。
変数
初期値あり
# 定義
value1 = 2
value3 = MyClass()
pythonでは変数宣言時に型を明示する必要がありません。
また、プリミティブ型(int, float)やオブジェクト型(クラスなど)の区別もなく
新しく登場した変数名に「値を代入」することで、それが定義となります。
初期値なし
# 定義
value = None
pythonでは変数宣言と同時に初期値を設定しなければエラーになります(そのような変数はありませんというエラー)。
宣言時点で初期値が確定しない場合はNoneを設定することで、エラーを回避することができます。
定数
# CONST_VALUEはあくまでも「変数」として定義される。
CONST_VALUE = 100
pythonでは定数という概念が存在しないため、コード規約(変数名はすべて大文字)などにより区別します。
文字列操作
文字列結合
# 行コメント
print("abc" + "de") # abcde
print("123" + str("45") # 12345
結合には「+」を使用します。
文字列同士しか結合できないため、数値の場合はstr()で文字列に変換する必要があります。
文字列と数値を結合すると以下のエラーが発生します:
- (TypeError: can only concatenate str (not “float”) to str)
配列
配列
# 定義
arr1 = [] # 空配列
arr2 = [1, 2, "str"] # 型が混在してもOK
# 参照
arr2[2] # "str"
# 要素追加 (末尾へ)
arr2.append(100) # 1, 2, "str", 100
辞書
# 定義
map1 = {} # 空定義
map2 = {"key1":10, 2:"20", 3.0:30.0} # 型が混在してもOK
# 参照
map2["key1"] # 10
map2[2] # 20 定義時とキーの型が異なっていても参照可能。割と寛容。
map2[2.0] # 20
map2["2"] # 20
# 要素追加
map2["new_key"] = "new_value"
mapといったほうが分かりやすいかもしれません。
キーと値をセットで保持するようなデータ形式です。
制御文
if文
if 条件式:
処理
elif 条件式:
処理
else:
処理
- elifはelse if のことです。(分かりづらいですね…)
for文
# 指定回数ループ
# num : 0 ~ 4
for num in range(5):
# num : 5 ~ 9
for num in range(5, 10):
# 配列のイテレート (item : 10, 15, 20)
arr = [10, 15, 20]
for item in arr:
# 連想配列のイテレート (map_key: "key1", "key2)
map = {"key1":20, "key2":30}
for map_key in map:
while文
# 条件式を満たす間ループする
while 条件式:
処理
continue, break
# continue (0, 1, 2, 4)
for num in range(5):
if (num == 3):
continue # ループの先頭に戻る。
print(num)
# break (0, 1, 2)
for num in range(5):
if (num == 3):
break # ループを抜ける
print(num)
関数
# 戻り値なし
def myMethod():
処理
# 戻り値あり
def myMethod():
return 戻り値
# 引数あり
def myMethod(param1, param2):
処理
〇引数初期値
def myMethod(param1, param2 = 100):
処理
型変換
# 文字列型 ⇒ 数値型
int("100")
# 数値型 ⇒ 文字列型
str(100)
インデント
- pythonではブロックを{}で囲う必要はありませんが、代わりにインデントが文法上、必須になります。
- インデントの数に決まりはありませんが、可読性を考えきちんと統一しましょう。
# 見やすい例 (インデントを2つずつ)
for num in range(5):
if (num == 3):
print(num)
print(num)
# 見にくい例 (インデントがばらばら)
for num in range(5):
if (num == 3):
print(num)
print(num)
外部ファイル読み込み
class Animal:
pass
def method1():
処理
def method2():
処理
import
# インポート
import util
animal = util.Animal()
util.method1()
util.method2()
- import + ファイル名(.pyは不要)で外部ファイルを参照できます。
- しかし、接頭辞に毎回「ファイル名 + .」が必要になります。
from + import
# インポート
from Animal import util
from util import method1
animal = Animal()
method1()
method2() # このメソッドはインポートしていないので未定義エラーになる。
- from ファイル名 + import + クラスやメソッド名で外部ファイルから特定の機能のみ参照できます。
- 接頭辞のファイル名を省略できます。
クラス
定義
# 空定義
class Animal:
pass
何も処理がない場合にはpassを記載します。
定義いろいろ
# 空定義
class Animal:
# クラスフィールド
CLASS_PARAM = 100
# コンストラクタは関数名固定
def __init__(self):
# インスタンスフィールド
self.param1 = 10 # public
self._param2 = "20" # protected
self.__param3 = 30 # private
# インスタンスメソッド
def myMethod(self):
処理
- コンストラクタの関数名は必ず「__init__」
- インスタンスフィールドはコンストラクタ内での「self.変数名」で定義されます。
- インスタンスメソッドにも必ず引数「self」が必要。
- 「self」は他言語のthisと同様で自身のインスタンスの参照である。
- pythonにはアクセス修飾子が存在しない。そのため命名規則(アンダーバーの数)によって判別します。
- ⇒ public: self.param1, protected: self_param2, private:self.__param3
インスタンス生成
animal = Animal()
- クラスフィールドはクラス直下に定義します。
注意点
animal = Animal()
animal.tekitouParam = 9999
print(animal.tekitouParam) # 9999
python以外ではまずありえない仕様ですが、クラス定義の後から、存在しないフィールドへ代入を行うと、エラーにはならず、新しいフィールドとして追加されます。
継承
class Cat(Animal):
def __init__(self):
super().__init__()
- 子クラス(親クラス):と書きます。
- 親クラスのメソッドにアクセスをするにはsuper()と記載します。