内部Pythonオブジェクトのシリアル化(マーシャル)
Pythonの標準ライブラリのmarshalモジュールはオブジェクトのシリアル化機能(pickleモジュールと同様)を提供しますが、汎用データの永続化やソケットなどを介したPythonオブジェクトの送信にはあまり役立ちません。このモジュールは主にPython自体が読み取り/をサポートするために使用します。コンパイルされたバージョンのPythonモジュール(.pycファイル)に対する書き込み操作。マーシャルモジュールで使用されるデータ形式は、Pythonバージョン間で互換性がありません(サブバージョンでさえも互換性がありません)。そのため、あるバージョンのコンパイル済みPythonスクリプト(.pycファイル)は、おそらく別のバージョンでは実行されません。したがって、マーシャルモジュールは、Pythonの内部オブジェクトのシリアル化に使用されます。
pickleモジュールと同様に、marshalモジュールは、マーシャリングされたオブジェクトを/からファイルに読み書きするためのload()およびdump()関数も定義しました。また、loads()およびdumps()関数は、マーシャリングされたオブジェクトの文字列表現を処理します。
dumps() −Pythonオブジェクトをマーシャリングするオブジェクトのようなバイトを返します。マーシャリングでは、標準データ型のオブジェクトのみがサポートされています。サポートされていないタイプはValueError例外を発生させます。
load() −この関数は、バイトのようなオブジェクトを対応するPythonオブジェクトに変換します。変換の結果が有効なPythonオブジェクトにならない場合は、ValueErrorまたはTypeErrorが発生する可能性があります。
次のコードは、dumps()を使用してマーシャリングされたPythonディクショナリオブジェクトを示しています。バイト表現は、loads()関数によってディクショナリに変換されます。
import marshal person = {"name":"xyz", "age":22, "marks":[45,56,78]} data = marshal.dumps(person) obj = marshal.loads(data) print (obj)
dump() −この関数は、サポートされているPythonオブジェクトのバイト表現をファイルに書き込みます。ファイル自体は書き込み権限のあるバイナリファイルです
load() −この関数は、バイナリファイルからバイトデータを読み取り、Pythonオブジェクトに変換します。
上記のように、マーシャルモジュールは.pycファイルを処理するために使用されます。次の例は、dump()関数とload()関数を使用して、コンパイル済みのPythonモジュールを格納するために使用されるPythonのコードオブジェクトを処理する方法を示しています。
このコードは、組み込みのcompile()関数を使用して、Python命令を埋め込んだソース文字列からコードオブジェクトを構築します。
compile(source, file, mode)
fileパラメータは、コードが読み取られたファイルである必要があります。ファイルから読み取られなかった場合は、任意の文字列を渡します。
モードパラメータは、ソースに一連のステートメントが含まれている場合は「exec」、単一の式がある場合は「eval」、単一のインタラクティブステートメントが含まれている場合は「single」です。
コンパイルコードオブジェクトは、dump()関数を使用して.pycファイルに保存されます
import marshal script = """ a = 10 b = 20 print ('addition = ',a+b) """ code = compile(script, "script", "exec") f = open("a.pyc","wb") marshal.dump(code, f) f.close()
.pycファイルからオブジェクトを逆シリアル化するには、load()関数を使用します。コードオブジェクトを返すため、別の組み込み関数であるexec()を使用して実行できます。
import marshal f = open("a.pyc","rb") data = marshal.load(f) exec (data)
出力は、ソース文字列に埋め込まれたコードブロックの結果になります
addition = 30
-
Pythonの内部動作
この記事では、Pythonの内部動作と、Pythonインタープリターによってさまざまなオブジェクトがメモリ内のスペースに割り当てられる方法について学習します。 Pythonは、Javaのようなオブジェクト指向プログラミング構築言語です。 Pythonはインタプリタを使用するため、インタプリタ言語と呼ばれます。 Pythonは、読みやすさを向上させ、時間とスペースの複雑さを最小限に抑えるために、ミニマリズムとモジュール性をサポートしています。 Pythonの標準実装は「cpython」と呼ばれ、cコードを使用してPythonで出力を取得できます。 Pythonは、ソースコードを一連のバイトコ
-
Pythonでのリストの内部動作
このチュートリアルでは、Python3.xでのリストの内部動作について学習します。またはそれ以前。また、各ステップでpythonステートメントを作成するときに、オブジェクトとフレームの形成についても見ていきます。 リストの初期化:これは、いくつかの要素を含むリストを作成していることを意味します。 >>> lis=[1,2,3,4] ここで、リスト変数は、上記のようにリストオブジェクトを参照しているグローバルフレームで宣言されています 次に、リストに要素を追加したときに何が起こったかを見てみましょう。 >>> lis.append(8) こ