Open7

Pythonのお勉強

a.kitazawaa.kitazawa

シングルクォーテーションとダブルクォーテーションの違い

どちらも文字列を扱うためのもの。
文字列を扱うことについて機能的な差異はない。
シングルクォーテーションの中ではダブルクォーテーションがエスケープなしで利用でき、その逆も同様となる。

a.kitazawaa.kitazawa

おなじない(if name == "main":)の意味

python は __name__ という属性を持ち、python インタプリタに指定されて起動されたファイルはその属性値が __main__ になる。
そのため、以下の意味は python インタプリタによってこのファイルが起動された場合のみ if 内の処理を実行してくださいという意味になる。

if __name__ == "__main__":
    print("hello")

python はファイルの先頭から逐次実行されるので、上記のように書いておくとファイルがインポートされた際に余計な処理が実行されるのを防ぐことができる。

a.kitazawaa.kitazawa

モジュール

  • 他モジュールやmainモジュールからアクセスできる(importできる)変数や関係をまとめたもの
  • モジュールはファイルになる。ファイル名がモジュール名になる。
  • モジュールには初期化のための実行分を入れることができる
  • 各モジュールは各自のシンボルテーブルを持っているので、他モジュールとグローバル変数が衝突することはない
  • アンダースコアで始まるものはインポートされない
  • モジュールの検索パスは「ビルトイン」→「sys.path」の順
  • pycache はビルドされたモジュール。モジュール読み込みを高速化するために利用される(再ビルドが必要かどうかは更新日時などをもとにPythonが自動でやってくれる)
a.kitazawaa.kitazawa

パッケージ

  • モジュール名前空間を "ドット付きモジュール名" を使って構造化する手段
  • モジュール名 A.B は、 A というパッケージのサブモジュール B を表します
  • ディレクトリをパッケージとしてPythonに扱わせるには init.py が必要になる
  • パッケージのディレクトリ構造
  • サブモジュールのインポートパターン
    • import sound.effects.echo
      • 呼び出しの際は完全な名前で呼ぶ必要がある
    • from sound.effects import echo
      • echo で呼び出せる
a.kitazawaa.kitazawa

辞書型の扱い

# 存在チェック
if 'xxx' in d.keys(): #キー
if 'xxx' in d.values(): #値
a.kitazawaa.kitazawa

関数の定義

def name(param1, param2) -> type:
    process...
a.kitazawaa.kitazawa

インスタンスからクラス変数を変更した場合の挙動

直接クラス変数を変更した場合は全てのインスタンスに影響があるが、
インスタンス変数経由で変更した場合、実際には新たなインスタンス変数が定義されることになるので
他インスタンスには影響がない。

ChatGPTからの回答。

Pythonでクラス変数はクラスに属しており、そのクラスのすべてのインスタンス間で共有されます。
したがって、あるインスタンスを通じてクラス変数を変更すると、その変更はそのクラスから
作られた他のすべてのインスタンスにも影響します。

しかし、これは直接クラス変数を変更した場合の話です。
もしインスタンス変数として同じ名前を持つ属性に値を割り当てると、
そのインスタンス独自の属性が作成され、それはクラス変数とは独立したものになります。