teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

コード自体を追加

2021/05/22 13:50

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -41,4 +41,15 @@
41
41
  ```
42
42
 
43
43
  Pythonバイトコードの説明は、[Python バイトコード命令](https://docs.python.org/ja/3/library/dis.html?highlight=%E9%80%86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AB#python-bytecode-instructions)を見てください。
44
- どの命令がどういうバイトに対応しているかを知りたければ、Pythonのソースをダウンロードして、Includeにある.hファイルを見てください。多分code.hだった思います。
44
+ どの命令がどういうバイトに対応しているかを知りたければ、Pythonのソースをダウンロードして、Includeにある.hファイルを見てください。~~多分code.hだった思います。~~
45
+ opcode.hでした。
46
+
47
+ バイトコード自体を見たければ、
48
+
49
+ ```python
50
+ >>> print(print_text.__code__.co_code)
51
+ b't\x00d\x01\x83\x01\x01\x00d\x00S\x00'
52
+ ```
53
+ で表示されるものです。
54
+ これと逆アセンブルした結果を見比べれば意味は分かります。
55
+ ただし、この表示では最初のバイトがtと表示されているので、全てを16進表示に変更した方が見やすい出しょう。

3

バイトコード説明追加

2021/05/22 13:50

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -38,4 +38,7 @@
38
38
  <code object print_text at 0x000002D2A1B48030, file "<stdin>", line 1>
39
39
  >>> exec(code)
40
40
  Hello
41
- ```
41
+ ```
42
+
43
+ Pythonバイトコードの説明は、[Python バイトコード命令](https://docs.python.org/ja/3/library/dis.html?highlight=%E9%80%86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AB#python-bytecode-instructions)を見てください。
44
+ どの命令がどういうバイトに対応しているかを知りたければ、Pythonのソースをダウンロードして、Includeにある.hファイルを見てください。多分code.hだったお思います。

2

コードの場所の修正

2021/05/22 13:36

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -32,8 +32,8 @@
32
32
  関数print_textを直接呼び出さずにコードを実行したければexecを使うこともできます。
33
33
  以下のようにやってください。
34
34
 
35
+ ```python
35
36
  >>> code = print_text.__code__
36
- ```python
37
37
  >>> print(code)
38
38
  <code object print_text at 0x000002D2A1B48030, file "<stdin>", line 1>
39
39
  >>> exec(code)

1

execによる実行追加

2021/05/22 13:32

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -27,4 +27,15 @@
27
27
  6 POP_TOP
28
28
  8 LOAD_CONST 0 (None)
29
29
  10 RETURN_VALUE
30
+ ```
31
+
32
+ 関数print_textを直接呼び出さずにコードを実行したければexecを使うこともできます。
33
+ 以下のようにやってください。
34
+
35
+ >>> code = print_text.__code__
36
+ ```python
37
+ >>> print(code)
38
+ <code object print_text at 0x000002D2A1B48030, file "<stdin>", line 1>
39
+ >>> exec(code)
40
+ Hello
30
41
  ```