Python 関数・モジュール・クラス・__変数

関数の定義

def 関数名(引数):
    実行する処理
    return 返り値
  • 返り値は「 , 」で複数の値を指定可能
  • 受け取り側も「 , 」で複数の変数を準備しておく( 受け取り側が1つの変数で受け取った場合はタプルになる )

デフォルト引数値

引数が与えられなかった場合に使用されるデフォルト値を設定

def 関数名(変数=値,...):
    処理

モジュールの利用

モジュールを導入( インポート )

import モジュール名

# 別名をつけてインポート
import モジュール名 as 別名

# 関数名だけで利用可能にするインポート(どのモジュールか分からなくなるため乱用禁止)
from モジュール名 import *
# モジュールの関数などを使用する
モジュール名.定数や関数

クラス

クラスの定義

class クラス名():
    メソッドなどの定義
  • クラス名は頭文字を大文字、複数の単語がある場合はそれぞれの頭文字を大文字にするのが慣習
  • 必ず引数を記述(通常、引数をselfと記述)
  • 呼び出しの際は自動で引数に値を与えるため、第一引数は書かなくてOK

メソッドの定義

コンストラクタ( __init__ )

クラスのオブジェクトが生成される際に実行されるメソッド

def __init__(引数):
    処理
  • アンダースコア×2( __ )で始まるメソッドや変数などに特殊な役割を持たせることが多い

クラス型オブジェクト

変数 = クラス名()

クラス変数

クラスの定義でメソッドの外側で宣言

アクセス:クラス型オブジェクトを生成しなくても参照可

クラス名.変数名

インスタンス変数

self.変数名
  • クラスのオブジェクトが生成されるごとにオブジェクト固有で、オブジェクトの中では永続的に使える変数

__変数

外からのアクセスを制限する方法 ( クラス変数、インスタンス変数ともに外から参照、書き換え可能 )

メインプログラムとして実行された場合にのみ実行する

if __name__ == "__main__":
    処理

Python try文・端末からの入力・文字数値変換・文字列の結合と繰り返し・format

try文

try:
    例外処理の対象処理
except 例外:
    例外が発生した際の処理
except:
    上記以外の例外が発生した際の処理
  • exceptで例外を指定しない場合はすべての例外に対して機能する

input( 端末からの入力 )

input( "端末に表示する文字列" )
  • 返り値は文字列となる

文字列⇔数値

int()
float()
str()

文字列の結合と繰り返し

文字列の結合

"Hoge" + "Huga" # "HogeHuga"
"Hoge" + str(10) # "Hoge10"

文字列の繰り返し

"Hoge" * 3 # "HogeHogeHoge"

format

文字列や数値を書式で指定する

フォーマット.format(表示する文字列や値)

オプション 説明
s 文字列(デフォルトのため省略する)
d 整数(10進数)
b 2進数
o 8進数
x 16進数
e(E) 浮動小数点(指数表記)
f(F) 浮動小数点(小数点表記)
g(G) 数値が大きくなった時にe(E)に切り替わる

文字列の位置

オプション 説明
< 左詰め
> 右詰め
^ 中央寄せ

数字の符号

オプション 説明
+ 正数、負数の符号をつける
- 負数に対して符号をつける(デフォルト)
空白 正数の前に空白、負数に符号をつける

カンマとパーセント表示

オプション 説明
{:,} 千の位のセパレータにカンマ
{:.小数点以下の表示する桁数%} パーセント表示

公式サイト

https://docs.python.org/ja/3/library/string.html

Python for文・while文・if文

for文

for 変数 in データの集合:
    実行したい処理
  • 変数は複数指定可能
  • データの集合を1つずつ変数に入れていく
for i in range(3):
    print(i)
# 実行結果    
# 0
# 1
# 2

range

for i in range([始まりの数値,]最後の数値[,増加する量]):
引数の数
1|終了値
2|開始値, 終了値
3|開始値, 終了値, 変化量
range(n)
# 0 ~ (n-1)番まで
コード 説明
break 繰り返しから抜ける
continue 残りの実行処理をスキップして次の繰り返しに移る

rangeとlen(リストの長さ)を組み合わせる

range(len(リスト名)):

for文でリストの要素を取得

for 変数 in リスト名:
    print(リスト名)

リストの要素が順番にprintされる

enumerate( 添え字と値を使う )

for 変数1, 変数2 in enumerate(リスト名):
    print(変数1, 変換2)

添え字・値の順で表示される

for文でリストの内包表記

リスト = []
for 変数 in range(数値):
    リスト.append(変数 * 変数)

上記をまとめて記述

リスト = [変数*変数 for 変数 in range(数値)]

while文

条件がtrueであれば実行し続ける

while 条件:
    trueの時に実行する処理

無限ループになるためbreakは必須な上、注意が必要( 必ず1度は実行される )

while True:
    break 実行処理

if文

if 条件式:
    実行したい処理
  • 改行して処理内容を記述
  • 処理内容を記述するときは必ず空白4桁入れる

複数の条件がある場合

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

比較演算

演算子 説明
==
!=
<
>
<=
>=
in 左辺が右辺の文字列に含まれていればtrue

論理演算

演算子
and
or
not

Python 変数・リスト・タプル・辞書

変数

変数の値を入れ替える

a = 1
b = 2
tmp = a
a = b
b = tmp

下記のように省略可能

a = 1
b = 2
a, b = b, a

リスト( 配列のようなもの )

リスト作成
# 値を入れてリストを作成
リスト名 = [値1, 値2, 値3] 
# 空のリストを作成
リスト名 = List() 
# 0~n未満の数値を要素にしてリスト生成
リスト名 = List(range(n)) 
# 文字列を分解して要素とする/ '文', '字', '列'
リスト名 = List('文字列') 

要素の取得
# リスト全体を取得
リスト名 
# リスト内から指定して取得
リスト名[インデックス番号] 

# リストの長さを取得
len(リスト名) 

split() 特定の文字で文字列を区切ってリスト作成

変数名 = "a bc def"
リスト名 = 変数名.split() 
# 'a', 'bc', 'def'の3つの要素があるリストとなる
  • 引数なしは空白区切りとなる

負の添え字

リストの要素を後ろから添え字の絶対値で指す

正の添え字 リスト[0] リスト[1] リスト[2]|リスト[3]
負の添え字 リスト[-4] リスト[-3] リスト[-2]|リスト[-1]

スライス

[先頭インデックス番号:終了インデックス番号]でリストの1部を取り出す * 終了インデックス番号の手前までとなる

リスト名 = [値0, 値1, 値2, 値3, 値4]
変数 = リスト名[1:4] # 値1, 値2, 値3を取得する

appendメソッド リストに要素を追加

# 値を追加
リスト名.append(値) 
# リスト1の要素の後ろにリスト2がリストとして要素に追加される
リスト1.append(リスト2) 

extendメソッド ( リストを統合 )

リスト1.extend(リスト2)
  • リスト1の後ろにリスト2の内容が追加される

リストの代入

リスト2 = リスト1
# 同じデータの所在を指しているためどちらかの要素を変更すると片方も変更される

リスト2 = リスト1.copy()
# コピーとなるためリスト1とリスト2は別々の独立したリストとなる

イミュータブル/ミュータブル

イミュータブル( 変更不能

  • 数値
  • 文字列
  • タプル
a = 1
b = a
b = 2
# a = 1, b = 2を指している

ミュータブル( 変更可能 )

  • リスト
  • 辞書
リスト1 = [1,2,3]
リスト2 = a
リスト2 = [9,8,7]
# リスト1 = [9,8,7] リスト2 = [9,8,7]
  • リスト2を変更するとリスト1も変更される

タプル

リスト同様に複数の要素からなるデータ

変数 = 1,2 
# 変数 = (1,2)でもOK

# リスト同様、添え字で要素を取得
変数[0] # 1

左辺が要素の個数と同じ場合、それぞれに代入される

変数1, 変数2 = 値1,値2
# 変数1 = 値1, 変数2 = 値2

イミュータブルのため後から要素に代入できない

変数 = 値1,値2
変数[0] = 値3
# エラーになる

辞書

キーと値で管理

# 辞書を生成
変数名 = {キー1:値1, キー2:値2,...}
# 指定したキーの値を取得
変数名[キー] 

# 新たにキーと値を追加
変数名[新キー名] = 値

キーの存在確認

キー名 in 変数名 # trueかfalse
形式 記述方法 要素取得
リスト リスト名 = [値1, 値2, ...] リスト名[インデックス番号]|ミュータブル
タプル タプル名 = (値1, 値2,...) タプル名[インデックス番号]|イミュータブル
辞書 辞書名 = { キー1:値1, キー2:値2,... } ミュータブル

PHP cookie/session

cookie

  • setcookieの前は何も出力してはいけない( echoやHTMLの記述など )

cookieをセット

setcookie('クッキー名', $値の変数);
$変数1 = $変数2 ?? filter_input(INPUT_COOKIE, 'クッキー名') ?? 'transparent';
  • 変数2に値がなければクッキーの値から入手、それもなければtransparentにしてという意味

cookieを削除

setcookie('クッキー名', '');
  • cookieに空文字を入れることで、cookieの有効期限を過去日時にセットしてくれるため削除される

SESSION

セッションの開始

session_start();

SESSIONに値を代入

$_SESSION['セッション名'] = 値;

変数にSESSIONの値を代入

$変数 = $_SESSION['セッション名'];

SESSIONの削除

unset($_SESSION['セッション名']);

SESSION用のファイルを削除

session_destroy();

セッションID

PHPSESSID

セッションIDの比較はシステム側で自動的に行われる

if (isset($_SESSION['セッション名'])){
  $変数 = $_SESSION['セッション名];
} else {
  $_SESSION['セッション名'] = 値;
}

PHP 別の記法(foreach/if/for/while/switch)

foreach

foreach (){
    処理;
    }
foreach ():
    処理;
endforeach;

if文

if (){
    処理;
} else if() {
    処理;
} else {
    処理;
}
if ():
    処理;
else if():
    処理;
else:
    処理;
endif;

for文

for () {
    処理;
}
for ():
    処理;
endfor;

while文

do~whileは不可

while () {
    処理;
}
while ():
    処理;
endwhile;

switch文

switch () {
    case 1:
        処理;
    case 2:
        処理;
}
switch ():
    case 1:
        処理;
    case 2:
        処理;
endswitch;

PHP 例外処理

try~catch ( 例外処理 )

if ($変数 <= 1) {
    // 例外を投げる
    throw new Exception('表示させるエラーメッセージ');
    // ExceptionクラスはPHPに組み込まれているためクラス定義が不要
}
try {
    例外が起きそうな処理;
} catch (Exception $e) {
    echo $e->getMessage();
}