🐍

精読「独習Python」(Pythonの基本)

2024/12/24に公開



独習Python
「独習Python」は、初心者から中級者までを対象に、Pythonの基礎から応用までを体系的に学べる入門書で、豊富な例題と練習問題を通じて実践的なスキルを身につけられる一冊です。

関連記事

変数

変数の宣言

  • 変数に初めて値を格納したタイミングで、変数のための領域自動的にメモリ上に確保される(変数の宣言
name = "山田" # ”変数の宣言”と”代入”
print(name) # 変数の”参照”

識別子の命名規則

  • 識別子[1]の命名規則を知っておく
命名規則
ルール 説明
英文字、数字、アンダースコアのみ使用可能 アルファベットまたはアンダースコアで始める必要があります。数字で始めることはできません。
大文字と小文字を区別する 例: myVarmyvar は別の識別子として扱われる
予約語は使用不可 例: if, else, class などのPythonキーワードは使えない
特殊文字は使用不可 記号(例: @, $, % など)は使用できない
長さの制限なし ただし、可読性を考慮することが推奨

よりよい識別子のためのルール

  • コードを読みやすくするために識別子のルールを設ける
よりよい識別子のためのルール
ルール
名前からデータの内容を類推できる ◯: score, birth ✕: m,n
長すぎない、短すぎない ◯: paassword, name ✕: pw, real_name_handle_name
ローマ字での命名を避ける ◯: name, age ✕: namae, nenrei
見た目に紛らわしくない △: tel/Tel. user/usr
記法を統一する mainAddress/main_address/MailAddress
戦闘のアンダースコア(_)には意味があるので、普通の識別子には使わない ◯: price ✕: _price

また、識別子の記法には、以下のようなものがある

記法 説明
キャメルケース 最初の単語は小文字、以降の単語の先頭を大文字にする(主に一部のスタイルで使用) userName
パスカルケース 各単語の先頭を大文字にし、単語を連結(クラス名に使用) UserName
アンダースコア記法 特殊な意味を持たせるためにアンダースコアを使用。以下の種類があります: user_name, USER_NAME

変数の破棄

  • del命令で変数の破棄もできる
name = "山田"
del name # 変数を"破棄"

定数

  • pythonには定数[2]という仕組みはないが、紳士協定としての定数を使う
price = 100
TAX_RATE = 1.1 # 定数(大文字にして一般的な変数と区別)
print(price * TAX_RATE)

データ型

  • JavaやC#のようなデータ型を強く意識する言語は、静的型付け言語と呼ばれる
  • Pythonのようなデータ型に対して寛容な言語は、動的型付け言語と呼ばれる
data = "りんご" # 最初に文字列を格納した変数に、
data = 100    # あとから数値をセットしてもOK

データ型の分類

  • Pythonの主な組み込み型[3]
分類 概要 変更可能 反復可能 順序
数値 int 整数型 × × ×
float 浮動小数点型 × × ×
complex 複素数型 × × ×
データ str 文字列型 ×
bytes バイナリデータ ×
コンテナー list 順序を持つリスト
tuple 順序を持つリスト(変更不可) ×
dict キー/値の辞書 ×
set 順序を持たない値の集合 ×
その他 bool 論理型(True, または False) × × ×
NoneType 値がない × × ×

論理型(bool)

  • True/Falseのいずれかの状態しか持たない

整数型(int)

  • 私達が普段使っている10進数リテラル[4]の他にも、16進数、8進数、2進数も表現できる

浮動小数点型(float)

  • 小数点数だけでなく、指数表現[5]がある
    <仮数部>×10の<符号><指数部>で、本来の小数値に変換できる
a = 1.23e4   # 1.23 × 10^4 = 12300.0
b = 5.67e-3  # 5.67 × 10^-3 = 0.00567

数値セパレーター

  • Python3.6以降では、桁数の大きな数値の可読性を改善するために、数値リテラルの中に桁区切り文字(_) を記述できるようになった(数値セパレーター
a = 1_000_000 # あくまで人間の可読性を助けるためなので、
print(a)      # 1000000が出力される

文字列型(str)

  • エスケープシーケンス:改行(\n)/タブ文字(\t)など特別な意味を持つ文字
  • 複数行文字列シングルクォート3つ、もしくはダブルクォート3つで複数行の文字列を表現できる
print('''Hello, 
World!''') # 出力:Hello,(改行)World!
  • raw文字列\xxをエスケープシーケンスとみなさず、表記のままに解釈する文字列リテラル
# 通常の文字列
normal_string = "C:\\Users\\UserName\\Documents"

# raw文字列
raw_string = r"C:\Users\UserName\Documents"

print(normal_string)  # C:\Users\UserName\Documents
print(raw_string)     # C:\Users\UserName\Documents
  • フォーマット文字列:Python3.6以降では、文字列リテラルの先頭に「f」または「F」を付けることで、文字列中に{…}の形式で変数を埋め込める(フォーマット文字列
name = "Alice"
print(f"My name is {name}.")  # 出力: My name is Alice.

リスト(list)

  • 複数の値を収めることができる仕切りのある入れ物
  • 要素[6]のそれぞれには番号が振られ、互いを識別できる(他の言語では、配列と呼ばれる)
  • ブラケット([…])でくくられた部分は、インデックス番号(または添え字)と呼ばれる
fruits = ["apple", "banana", "cherry"]

# 1番目の要素を取得
print(fruits[0])  # 出力: apple

# 最後の要素を取得
print(fruits[-1])  # 出力: cherry
  • 最後の要素のカンマ:リストを複数行で表す場合は、最後のカンマを付与した方が読みやすくて良い[7]
my_list = [
    "apple",
    "banana",
    "cherry", # 最後の要素にカンマを付ける
]
  • 入れ子のリストリストそのものも要素として格納できる(多次元リスト
boxes = [
    ["red ball", "blue ball", "green ball"],  # 1番目の箱
    ["yellow ball", "pink ball", "white ball"],  # 2番目の箱
    ["black ball", "orange ball", "purple ball"],  # 3番目の箱
]

print(boxes[1][0]) # 出力: yellow ball
  • ジャグ配列的:2時限目以降の要素数が不揃いなリストも定義できる(言語によってはジャグ配列と呼ぶ)
jagged_array = [
    [1, 2, 3],         
    [4, 5],    # 要素数が違ってもOK
]

参考


脚注
  1. 名前のこと。変数、関数、クラスなどプログラムに登場するすべての要素はなんらかの名前を持ってる ↩︎

  2. 一度格納した値を入れ替えできない(参照のみ) ↩︎

  3. インタプリターに標準で組み込まれている ↩︎

  4. 変数に格納できる値そのもの、または値の表現方法のこと ↩︎

  5. <仮数部>e<符号><指数部>の形式で表されるリテラルのこと ↩︎

  6. 仕切りで区切られたスペース ↩︎

  7. リストを一行で表す場合は冗長なので、最後のカンマは省略した方が良い) ↩︎

Discussion