Python
基礎知識
コメント
- 一行コメントはシャープを一つ使います:
# コメント内容 - 複数行コメントは三つのダブルクォートを使います:
""" コメント内容 """
基本文法
Python は動的型付け言語なので、型を明示的に宣言する必要はありません。 変数定義:変数名 = 変数値
python
name = "Alice" # 文字列
age = 25 # 整数
pi = 3.14159 # 浮動小数点数
is_student = True # ブール値命名規則(Java と共通)
- 英字またはアンダースコアで始めます。数字で始めることはできません。
- 英字、数字、アンダースコアだけを含めます。
- 大文字小文字を区別します(
name≠Name)。 - キーワード(例:
if,for)の使用を避けます。 - camelCase(
userName)または snake_case(user_name)をすすめます。
print() 関数
Java と違い、print メソッドで複数内容を出力する時は、カンマで区切ります。
python
print("Hello", "World") # 出力:Hello World
print(10 + 5) # 出力:15データ型
主要データ型
| データ型 | 説明 | 可変性 | 例 | 注意点 |
|---|---|---|---|---|
| Number | 数値型(整数、浮動小数点、複素数、ブール値) | 不可変 | age=25, pi=3.14 | ブール値は Number のサブクラスです。True=1, False=0 |
| String | 文字列シーケンス | 不可変 | s="Hello" | エスケープ文字 \n をサポートします。raw 文字列は r"..." を使います |
| List | 順序付き可変シーケンス | 可変 | lst=[1,2,"a"] | 追加、削除、変更、検索をサポートします。要素は異なる型でもよいです |
| Tuple | 順序付き不可変シーケンス | 不可変 | t=(1,2,"a") | 単一要素にはカンマが必要です:(5,)。可変オブジェクトのネストは可能です |
| Set | 順序なし一意集合 | 可変 | s={1,2,3} | {} または set() で作ります。空集合は必ず set() を使います |
| Dictionary | key-value マッピング | 可変 | d={"name":"Alice"} | key は不可変である必要があります。value は任意の型でよいです |
データ型の詳細
1. Number 型
python
a = 10 # int
b = 3.14 # float
c = 2 + 3j # complex
d = True # bool (True=1, False=0)注:type(3.14) は <class 'float'> を返し、type(True) は <class 'bool'> を返します。
2. String 型
python
s = "Python" # 基本文字列
s2 = 'It\'s ok' # エスケープ文字
s3 = r"C:\path" # raw 文字列3. List 型
python
fruits = ["apple", "banana", 3] # 混合型
fruits.append("orange") # 要素を追加
fruits[0] = "pear" # 要素を変更4. Tuple 型
python
point = (10, 20) # 不可変
mixed = ("a", [1,2], 3.14) # 可変オブジェクトをネスト5. Set 型
python
nums = {1,2,2,3} # 自動重複削除 -> {1,2,3}
s = set() # 空集合
s.add(5) # 要素を追加6. Dictionary 型
python
user = {"name": "Bob", "age": 25}
user["email"] = "bob@example.com" # key-value を追加
del user["age"] # key-value を削除型変換
| 関数 | 用途 | 例 | 注意点 |
|---|---|---|---|
int(x) | 整数へ変換 | int("123") → 123 | 浮動小数点数を整数へ変換すると小数部分を切り捨てます(int(3.9)=3) |
float(x) | 浮動小数点へ変換 | float("3.14") → 3.14 | 整数を浮動小数点へ変換すると .0 が付きます |
str(x) | 文字列へ変換 | str(123) → "123" | すべての型を変換できます |
list(x) | リストへ変換 | list("abc") → ['a','b','c'] | iterable は変換できます |
tuple(x) | タプルへ変換 | tuple([1,2,3]) → (1,2,3) | |
set(x) | 集合へ変換 | set([1,2,2]) → {1,2} | 自動で重複を削除します |
dict(x) | 辞書へ変換 | dict([("a",1),("b",2)]) | iterable な key-value ペアが必要です |
演算子
Java と同じです。
整数除算演算子 //
- 切り下げ規則:結果は負の無限大方向へ丸められます(Java のゼロ方向丸めとは違います)。
python
print(9 // 2) # 出力4 (Java と同じ)
print(-9 // 2) # 出力-5 (Java では -9/2=-4)
print(9.5 // 2) # 出力4.0応用場面:
- ページング計算:
total_pages = total_items // items_per_page - 時間変換:
minutes = total_seconds // 60
指数演算子 **
- 浮動小数点指数をサポート:
2 ** 0.5 → 1.4142(Python は標準でサポートし、Java ではMath.pow()が必要) - 連鎖演算:
2 ** 2 ** 3 → 256(右結合)
python
# a**b a の b 乗
# 科学記数法
print(1e3 ** 2) # 出力1000000.0
# 負の指数
print(2 ** -3) # 出力0.125制御文
条件文
python
# 単一分岐
if condition:
# 4スペースでインデントしたコードブロック
# 二分岐
if condition:
# 成立時に実行
else:
# 不成立時に実行
# 多分岐
if condition1:
# 条件1が成立
elif condition2:
# 条件1は不成立だが条件2が成立
else:
# すべての条件が不成立特性
- 条件式:ブール判定です。比較演算子(
>,==,!=)と論理演算子(and,or,not)をサポートします。 - 暗黙変換:非ゼロ数値と非空シーケンスは
Trueと見なされ、ゼロ値/空値はFalseと見なされます。 - 短絡評価:
andの左側がFalseの場合、右側を計算しません。orの左側がTrueの場合、右側をスキップします。
二、ループ構造
1. while ループ
python
while condition:
# 条件が True の時に繰り返し実行
# 無限ループを避けるため、条件更新文が必要
# 例
count = 0
while count < 5:
print(count)
count += 1
else:
print("ループが正常終了しました")特性:
- 条件更新:ループ本体内で条件関連の変数を変更する必要があります。
- else 句:ループが正常終了した時(
breakで中断されていない時)に実行されます。
2. for ループ
python
for item in iterable:
# iterable オブジェクトを走査(リスト/文字列/辞書など)
# 辞書を走査する例
user = {"name": "Bob", "age": 25}
for key in user:
print(f"{key}: {user[key]}")range 関数:
| パラメータ形式 | 例 | 出力シーケンス |
|---|---|---|
range(stop) | range(5) | 0-4 |
range(start, stop) | range(2,7) | 2-6 |
range(start, stop, step) | range(1,10,2) | 1,3,5,7,9 |
関数
python
# 関数定義
def 関数名 (仮引数リスト):
関数本体
return 戻り値None 型
None は特殊なリテラルで、Java の null に相当します。 <class 'NoneType'>
関数ドキュメント:
python
# 複数行コメントを関数本体の前に書く
def function(x,y):
"""
全体説明
:param x: 仮引数 x の説明
:param y: 仮引数 y の説明
:return: 戻り値説明
"""関数の規範性
1. 複数の戻り値
python
def test_return():
return 1,2
x, y = test_return()2. 構造化された戻り値
python
def get_user_info():
"""構造化データを返す"""
return {
"name": "Alice",
"age": 25,
"email": "alice@example.com"
}
user = get_user_info()
print(user["name"]) # 出力:Alice3. キーワード引数
python
def create_user(name: str, age: int, gender: str = "不明"):
"""ユーザー情報を作成"""
return {
"name": name,
"age": age,
"gender": gender
}
# キーワード引数で呼び出す
user = create_user(name="山田", age=28, gender="男")可変長引数
python
def sum_numbers(*numbers):
"""任意個数の数値の合計を計算"""
return sum(numbers)
print(sum_numbers(1,2,3,4)) # 出力:10
print(sum_numbers()) # 出力:0キーワード可変長引数(kwargs)
python
def print_person_info(**info):
"""人物情報を表示"""
for key, value in info.items():
print(f"{key}: {value}")
print_person_info(name="佐藤", age=35, job="エンジニア")匿名関数(lambda 関数)
python
lambda 引数リスト: 式
square = lambda x: x**2
print(square(5)) # 出力25コンテナ
リスト(List)
- 順序付き可変:要素順は固定で、追加、削除、変更、検索をサポートします。
- 混合保存:異なる型の要素(数値/文字列/オブジェクト)を保存できます。
- スライス対応:
[start:end:step]のスライス操作をサポートします。
python
# 定義
listName = [要素1,要素2,要素3...]
# 空変数を定義
listName = []
listName = list()リストには異なる型の要素を保存できます。
listName[1]は二つ目の要素を取り出します。 逆方向インデックスも使えます。最後の要素は -1 で、順に前へ戻ります。
| メソッド | 機能説明 |
|---|---|
index(要素) | ある要素の添字を探し、その添字を返します。ない場合は ValueError になります |
append() | 末尾に要素を追加します |
extend() | 別のリストを結合します |
insert() | 指定位置に要素を挿入します |
remove() | 最初に一致した要素を削除します |
pop() | 指定インデックスの要素を削除して返します(デフォルトは末尾) |
sort() | その場でソートします(昇順) |
reverse() | その場で要素順を反転します |
タプル(Tuple)
- 順序付き不可変:要素順は固定で、作成後は変更できません。
- 混合保存:異なる型の要素をサポートします。
- ハッシュ可能性:辞書の key として使えます。
python
# 定義方法
(要素,要素,要素)
変数名 = (要素,要素,要素)
# 空タプルを定義
変数名 = ()
変数名 = tuple()| メソッド | 機能説明 |
|---|---|
index() | 要素のインデックスを探します |
count() | 要素の出現回数を数えます |
文字列(String)
- 文字シーケンス:各文字を一つの要素として扱います。
- 不可変性:どの変更も新しい文字列を生成します。
- エンコード対応:UTF-8/GBK などのエンコードをサポートします。
python
text = "Hello, 世界!"
unicode_text = text.encode('utf-8') # b'Hello, \xe4\xb8\x96\xe7\x95\x8c!'| メソッド | 機能説明 | 例 |
|---|---|---|
split() | 区切り文字で分割 | text.split() → ["Hello,", "世界!"] |
replace() | 部分文字列を置換 | text.replace("World", "Python") |
strip() | 先頭と末尾の空白を削除 | "\t text \n".strip() → "text" |
集合(Set)
- 順序なし一意:自動で重複を削除し、要素順は固定されません。
- 数学的集合演算:和集合、積集合、差集合などをサポートします。
- 可変性:要素を動的に追加、削除できます。
python
# 集合の定義
{要素,要素,要素}
変数名 = {要素,要素,要素}
# 空集合を定義
変数名 = set()| メソッド | 機能説明 |
|---|---|
add() | 追加 |
remove() | 削除 |
Object pop() | ランダムに一つの要素を取り出し、削除します |
clear() | 空にします |
集合1.difference(集合2) | 二つの集合の差集合を取り出します |
集合1.difference_update(集合2) | 差集合を反映して更新します |
集合1.union(集合2) | 二つの集合を結合します |
len() | 集合内の要素数を数えます |
辞書(Dict)
- key-value 保存:key は一意で、value は変更できます。
- ハッシュテーブル実装:O(1) 時間計算量で検索できます。
- 動的拡張:key-value を動的に追加、削除できます。
python
# 辞書の定義
{key: value,key: value,key: value}
dictName = {key: value,key: value,key: value}
# 空辞書を定義
dictName = {}
dictName = dict()辞書の key に辞書は使えません。それ以外は基本的に制限がありません。
| メソッド | 機能説明 |
|---|---|
value = dictName[key] | key で value を取得します |
dict[Key] = Value | 新規追加/更新 |
pop(Key) | 要素を取得して削除します |
len(dict) | 辞書内の要素数を数えます |
clear() | 辞書を空にします |
keys() | 辞書内のすべての key を取得します |
values() | 辞書内のすべての value を取得します |
items() | 辞書内のすべての key-value ペアを取得します |
get() | 安全に値を取得します。例:user.get("address", "不明") |
まとめ
五つのデータコンテナはすべて for ループで走査できます。
len(コンテナ):コンテナ内の要素数を数えます。max(コンテナ):コンテナ内の最大要素を探します。min(コンテナ):コンテナ内の最小要素を探します。list(コンテナ):コンテナをリストへ変換します。str(コンテナ):コンテナを文字列へ変換します。tuple(コンテナ):コンテナをタプルへ変換します。set(コンテナ):コンテナを集合へ変換します。sorted(コンテナ,[reverse=True]):コンテナをソートします。
| コンテナ型 | 可変性 | 順序性 | 要素一意性 | 典型的な用途 |
|---|---|---|---|---|
| リスト | 可変 | 順序あり | 重複可 | 動的データ集合、キュー/スタック実装 |
| タプル | 不可変 | 順序あり | 重複可 | 固定設定パラメータ、関数の複数戻り値 |
| 文字列 | 不可変 | 順序あり | 重複可 | テキスト処理、文字シーケンス操作 |
| 集合 | 可変 | 順序なし | 一意 | 重複削除、集合演算、メンバー検査 |
| 辞書 | 可変 | 順序なし | key は一意 | key-value 保存、高速データ検索 |
ファイルエンコード
open()
python
open(
file, # ファイルパス(絶対/相対パスをサポート)
mode='r', # アクセスモード(必須パラメータ)
encoding='utf-8' # エンコード形式(テキストモードでは必須)
)| 基本モード | 拡張モード | 機能説明 |
|---|---|---|
| 'r' | 'rt' | テキスト読み取り専用(デフォルト) |
| 'w' | 'wt' | テキスト上書き書き込み |
| 'a' | 'at' | テキスト追記書き込み |
| 'b' | 'rb'/'wb' | バイナリモード |
| '+' | 'r+' | 読み書きモード(他のモードと組み合わせが必要) |
読み取り
python
# 全内容を読み取る
content = f.read() # 文字列(テキストモード)または bytes(バイナリモード)を返す
# 指定バイト数を読み取る
chunk = f.read(100) # 先頭100バイトを読み取る
# 行ごとに読み取る
line = f.readline() # 一行を読み取る(改行文字を保持)
lines = f.readlines() # すべての行を読み取る(リストを生成)
# 反復読み取り(大きなファイルで推奨)
for line in f:
process(line) # 自動で一行ずつ読み取り、メモリにやさしい書き込み
python
# 基本書き込み
f.write("Hello World") # 文字列を書き込む
f.writelines(["line1\n","line2"]) # 文字列リストを書き込む
# ファイルポインタ制御
f.seek(0) # ファイル先頭へ移動(テキストモード)
f.tell() # 現在のポインタ位置を取得コンテキストマネージャ(with 文)
python
with open("test.txt", "r") as f:
content = f.read()
# ファイルは自動で閉じるため、明示的に close() を呼ぶ必要はない
# 等価コード(内部実装)
f = open("test.txt", "r")
try:
content = f.read()
finally:
f.close()例外
指定例外を捕捉する
python
try:
# エラーが発生する可能性があるコード
except NameError as e::
# 指定例外が発生した後のコード複数例外を捕捉する
python
# 複数例外はタプルで宣言して捕捉する
try:
# エラーが発生する可能性があるコード
except (NameError,ZeroDivisionError):
# 指定例外が発生した後のコード例外 else
python
# 例外 else。例外が発生しなかった場合に実行するコード
try:
# エラーが発生する可能性があるコード
except:
# 例外発生後のコード
else:
# 例外が発生しなかった後のコード例外 finally
python
# 例外 finally。例外が発生してもしなくても実行するコード
try:
# エラーが発生する可能性があるコード
except:
# 例外発生後のコード
else:
# 例外が発生しなかった後のコード
finally:
# 例外の有無に関係なく実行するコードモジュールとパッケージ
モジュール
- 本質:拡張子が
.pyの Python ファイルです。 - 主な役割:
- コードのカプセル化と再利用
- 名前空間の分離(名前衝突を避ける)
- モジュール化開発をサポート
| 構文形式 | 機能説明 | 例 |
|---|---|---|
import module | モジュール全体をインポート | import math |
from module import func | 特定メンバーをインポート | from math import sqrt |
import module as m | モジュール別名 | import numpy as np |
パッケージ
パッケージ定義規則
tex
my_package/
├── __init__.py # パッケージ初期化ファイル
├── module_a.py # モジュールA
├── module_b.py # モジュールB
└── subpackage/ # サブパッケージ
├── __init__.py
└── module_c.py__init__.py:ディレクトリが Python パッケージであることを示し、パッケージの初期化動作を制御します。- モジュールファイル:インポート可能な関数/クラス/変数を含みます。
- サブパッケージ構造:多層のパッケージネストをサポートします。
