=====================================================================================
Pythonのf文字列
Python 3.6から導入された強力な機能。文字列内に直接Python式を埋め込みコードの可読性と効率を大幅に向上。
変数の値を文字列に挿入
name = "太郎"
age = 30
print(f"私の名前は{name}で、{age}歳です。")
実行結果:
私の名前は太郎で、30歳です。
式の評価
x = 10
y = 20
print(f"{x} + {y} = {x + y}")
実行結果:
10 + 20 = 30
メソッドの呼び出し
name = "python"
print(f"大文字: {name.upper()}")
実行結果:
大文字: PYTHON
辞書のアクセス
person = {"name": "花子", "age": 25}
print(f"{person['name']}さんは{person['age']}歳です。")
実行結果:
花子さんは25歳です
条件式(三項演算子)
x = 15
print(f"{x}は{'偶数' if x % 2 == 0 else '奇数'}です。")
実行結果:
15は奇数です。
フォーマット指定子の使用
pi = 3.14159
print(f"円周率は{pi:.2f}です。")
実行結果:
円周率は3.14です
左寄せ、中央寄せ、右寄せ
name = "Python"
print(f"{name:<10}|") # 左寄せ
print(f"{name:^10}|") # 中央寄せ
print(f"{name:>10}|") # 右寄せ
実行結果:
Python |
Python |
Python|
日付のフォーマット
from datetime import datetime
now = datetime.now()
print(f"現在時刻: {now:%Y-%m-%d %H:%M:%S}")
実行結果(実行時の日時により異なります):
現在時刻: 2024-07-28 12:34:56
2進数、8進数、16進数表現
num = 42
print(f"10進数: {num}")
print(f"2進数: {num:b}")
print(f"8進数: {num:o}")
print(f"16進数: {num:x}")
実行結果:
10進数: 42
2進数: 101010
8進数: 52
16進数: 2a
デバッグ用の=指定子
x = 10
y = 20
print(f"{x=}, {y=}")
実行結果:
x=10, y=20
=====================================================================================
時刻取得
- 基本的な日時取得 →
datetime.now() - 時刻の計算や変換を楽にしたい →
arrow - タイムゾーンを考慮したい →
pytz - 処理時間計測 →
timeit.default_timer()ortime.perf_counter() - UNIXタイムが必要 →
time.time()
| 用途 | 適したライブラリ |
|---|---|
| 現在の日時を取得 (ローカルタイム) | datetime.datetime.now() |
| 現在の時刻をエポック秒で取得 | time.time() |
| 時刻を特定のフォーマットで表示 | time.localtime() + time.strftime() |
| タイムゾーンを考慮した時刻取得 | datetime.now(pytz.timezone(…)) or arrow.now() |
| WebAPIや時刻処理を簡単に扱いたい | arrow.now() |
| 時間計測 (コードの実行時間) | timeit.default_timer() or time.perf_counter() |
1. datetime.datetime.now()
用途・シチュエーション:
- 一般的な日時取得: 日付や時刻を扱うシンプルな処理に最適.
- フォーマットの自由度:
.strftime()を使ってフォーマットを変更しやすい. - ローカル時刻の取得:
datetime.now()はデフォルトでシステムのローカルタイムを取得する.
注意点:
- タイムゾーン情報は含まれないため,グローバルな処理には
pytzとの併用が必要.
from datetime import datetime
# 現在の日時を取得
time_datetime= datetime.now()
print(time_datetime)
# 2025-03-20 16:25:35.654095
2. time.time()
用途・シチュエーション:
- エポック秒(Unix時間)の取得: 1970年1月1日からの経過秒数で時刻を扱いたいときに最適.
- 時間差の計測: 2つの
time.time()の差を取ることで処理時間を計測できる.
注意点:
- 可読性が低いため,直接ユーザー向けに表示する用途には適さない.
import time
# 現在の時刻(エポック秒)を取得
time_time = time.time()
print(time_time)
print(f"{time_time:.3f}") # 小数点以下3桁まで表示
# 1742455535.6543741
# 1742455535.654
3. time.localtime() + time.strftime()
用途・シチュエーション:
- ローカル時刻を文字列として扱う:
strftime()によりフォーマットを簡単に変更できる. - ログ出力やUI表示:
YYYY-MM-DD HH:MM:SSのような形に整えやすい.
注意点:
datetimeに比べると直感的でない場合がある.
import time
# 現在の時刻をフォーマットして表示
local_time = time.localtime()
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print(formatted_time)
# 2025-03-20 16:25:35
4. datetime.now(pytz.timezone("Asia/Tokyo"))
用途・シチュエーション:
- タイムゾーンを明示的に指定する必要がある場合: タイムゾーンが重要なアプリケーション(例: グローバル対応のWebサービス).
- 異なるタイムゾーン間での時刻変換:
pytz.timezone("UTC").localize(dt).astimezone(pytz.timezone("Asia/Tokyo"))などが可能.
注意点:
pytzは標準ライブラリではないため,pip install pytzが必要.
from datetime import datetime
import pytz
# タイムゾーンを指定して現在時刻を取得
time_pytz = pytz.timezone("Asia/Tokyo")
tokyo_time = datetime.now(time_pytz)
print(tokyo_time)
# 2025-03-20 16:25:35.943172+09:00
5. arrow.now()
用途・シチュエーション:
datetimeより直感的な時刻操作:.shift(days=1)で簡単に1日後の時刻を取得可能.- タイムゾーンを簡単に扱える:
.to('Asia/Tokyo')で変換できる. - WebアプリやAPIでの時刻処理: ISO 8601 形式 (
YYYY-MM-DDTHH:MM:SS+TZ) の出力が容易.
注意点:
arrowは標準ライブラリではなく,pip install arrowが必要.
import arrow
# 現在の時刻を取得
time_arrow= arrow.now()
print(time_arrow)
# 2025-03-20T16:25:36.045942+09:00
6. timeit.default_timer()
用途・シチュエーション:
- コードの実行時間計測:
start = timeit.default_timer(); do_something(); elapsed = timeit.default_timer() - start - 高精度な時間測定:
time.time()より精度が高い(環境によって異なる).
注意点:
datetimeやtimeとは異なり,時刻取得の用途には適さない.timeit.default_timer()は Windows ではtime.perf_counter(),Linux/macOS ではtime.monotonic()を内部的に使用する為,環境ごとに挙動が異なることがある.
import timeit
# 現在の時刻をエポック秒で取得
timestamp = timeit.default_timer()
print(timestamp)
# 15251.0218552
7. time.perf_counter()
用途・シチュエーション:
- 高精度な時間計測:
timeit.default_timer()同様,処理時間の測定に適している. - システムの時計と無関係に動作: システムの時刻とは無関係に動作する為,プロセスの実行時間の測定等に適しており,精度が高い.
注意点:
- 絶対的な時刻を取得するのではなく,相対時間の測定向け.
import time
# 高精度な時刻取得
current_time = time.perf_counter()
print(current_time)
# 15251.0220795
=====================================================================================