Python-1

=====================================================================================

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

<< BACK >>

=====================================================================================

 時刻取得

  • 基本的な日時取得 → datetime.now()
  • 時刻の計算や変換を楽にしたい → arrow
  • タイムゾーンを考慮したい → pytz
  • 処理時間計測 → timeit.default_timer() or time.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

<< BACK >>

=====================================================================================