日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python开始print_当你使用print时,Python是怎么运行的

發(fā)布時(shí)間:2025/3/19 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python开始print_当你使用print时,Python是怎么运行的 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)編程這么久了,大家不知道有沒有想過一個(gè)問題,當(dāng)我們執(zhí)行Python時(shí),它是怎么實(shí)現(xiàn)的呢?

眾所周知,Python 是一門解釋型的語言

——所謂“解釋型”,當(dāng)然是區(qū)別于以 C語言 為代表的編譯型語言。編譯型語言需要將整個(gè)程序文件全部轉(zhuǎn)換為可以直接由機(jī)器執(zhí)行的二進(jìn)制文件;而解釋型語言則是由相應(yīng)的解釋器一行一行“解釋”并執(zhí)行代碼描述的行為。

正是因此,對于新接觸的人來說,Python這樣的解釋性語言很多時(shí)候需要執(zhí)行到相應(yīng)的語句,才會(huì)發(fā)現(xiàn)一些顯然的錯(cuò)誤。

話說回來,Python的解釋器是怎么樣來“解釋”Python代碼的呢?

實(shí)際上,類似于Java的執(zhí)行機(jī)制,Python也擁有自己的虛擬機(jī)。而這個(gè)虛擬機(jī)實(shí)際上執(zhí)行的也是一種“字節(jié)碼”。

在Python程序的執(zhí)行中依然存在一個(gè)“編譯”的過程:將Python代碼編譯為字節(jié)碼。

并且,Python也提供了一個(gè)名為dis模塊,用于查看、分析Python的字節(jié)碼。

1. dis模塊

舉例來說,dis模塊中有一個(gè)同名函數(shù)dis,可以用于將當(dāng)前命名空間中的對象反匯編為字節(jié)碼。

import dis

def add(add_1, add_2):

sum_value = add_1 + add_2

dis.dis(add)

執(zhí)行結(jié)果為:

4 0 LOAD_FAST 0 (add_1)

2 LOAD_FAST 1 (add_2)

4 BINARY_ADD

6 STORE_FAST 2 (sum_value)

8 LOAD_CONST 0 (None)

10 RETURN_VALUE

其中,開頭的數(shù)字“4”表示字節(jié)碼的內(nèi)容對應(yīng)于腳本中第 4 行的內(nèi)容。

隨后的一列數(shù)字則表示對應(yīng)指令所在的地址。縱向觀察可以發(fā)現(xiàn)一個(gè)規(guī)律:下一條指令的地址總比上一條指令的地址大 2 。這是巧合嗎?

顯然不是的。官方文檔《dis --- Python 字節(jié)碼反匯編器》中記錄的更改顯示,從Python 3.6版本開始,”每條指令使用2個(gè)字節(jié)“。所以每條指令的地址會(huì)在上一條指令地址的基礎(chǔ)上加2。

再往后,是一列表示指令含義的單詞組合,實(shí)際上就是人類可讀的對應(yīng)指令名稱。顧名思義,LOAD_FAST就是加載某個(gè)內(nèi)容/對象到某處,”FAST“很可能意味著這是一個(gè)便捷快速的命令實(shí)現(xiàn)。

最右邊,則是對應(yīng)于當(dāng)前命令的操作數(shù),即操作對象。數(shù)字同樣是一個(gè)類似于地址的表示,括號(hào)中的字符串則表示相應(yīng)對象在Python代碼中的具體名稱。

這樣我們就可以大概地閱讀生成的字節(jié)碼了:

首先Python將函數(shù)add的第一個(gè)參數(shù)add_1加載到某處,緊跟著將第二個(gè)參數(shù)add_2加載到第一個(gè)參數(shù)之后。然后調(diào)用了一個(gè)名為BINARY_ADD的指令,即對之前加載的兩個(gè)參數(shù)做加法。再然后則是將加法所得的和sum_value存儲(chǔ)在了另一個(gè)位置。最后,加載了一個(gè)常量None并返回。

其實(shí)讀完上面這個(gè)執(zhí)行過程,我們很容易想到一種常用的數(shù)據(jù)結(jié)構(gòu)——棧。

像下面這樣:

當(dāng)然這并不是本文的重點(diǎn)——真要探討Python的實(shí)現(xiàn)機(jī)制,還得另外寫幾篇長文才能說得一二。

使用dis.dis函數(shù)除了可以查看當(dāng)前腳本中各個(gè)對象對應(yīng)的字節(jié)碼,還可以直接傳入一段代碼對應(yīng)的字符串進(jìn)行反匯編:

# test_dis.py

import dis

s = """

def add(add_1, add_2):

sum_value = add_1 + add_2

print("Hello World!")

import sys

"""

dis.dis(s)

匯編結(jié)果:

2 0 LOAD_CONST 0 (", line 2>)

2 LOAD_CONST 1 ('add')

4 MAKE_FUNCTION 0

6 STORE_NAME 0 (add)

5 8 LOAD_NAME 1 (print)

10 LOAD_CONST 2 ('Hello World!')

12 CALL_FUNCTION 1

14 POP_TOP

7 16 LOAD_CONST 3 (0)

18 LOAD_CONST 4 (None)

20 IMPORT_NAME 2 (sys)

22 STORE_NAME 2 (sys)

24 LOAD_CONST 4 (None)

26 RETURN_VALUE

2. compile函數(shù)

除了在程序中直接給出要反匯編的程序形成的字符串,我們還可以通過使用內(nèi)置函數(shù)compile來形成相應(yīng)腳本的編譯對象,再使用dis.dis查看其字節(jié)碼內(nèi)容。

# test_compile.py

import dis

with open("test_dis.py", "r", encoding="utf-8") as f:

s = f.read()

compile_obj = compile(s, "test_dis.py","exec")

dis.dis(compile_obj)

字節(jié)碼輸出結(jié)果:

1 0 LOAD_CONST 0 (0)

2 LOAD_CONST 1 (None)

4 IMPORT_NAME 0 (dis)

6 STORE_NAME 0 (dis)

11 8 LOAD_CONST 2 ('\ndef add(add_1, add_2):\n sum_value = add_1 + add_2\n\nprint("Hello World!")\n\nimport sys\n')

10 STORE_NAME 1 (s)

13 12 LOAD_NAME 0 (dis)

14 LOAD_METHOD 0 (dis)

16 LOAD_NAME 1 (s)

18 CALL_METHOD 1

20 POP_TOP

22 LOAD_CONST 1 (None)

24 RETURN_VALUE

總結(jié)

dis模塊為我們提供了一個(gè)觀察Python內(nèi)部機(jī)制的手段,恰當(dāng)?shù)厥褂胐is模塊,并結(jié)合其他方法,可以快速有效弄懂一些Python令人迷惑的地方。

希望大家善于利用這樣一些有用的工具。

文章來源:公眾號(hào)--Python技術(shù) 作者:軒轅御龍

以上就是W3Cschool編程獅關(guān)于 當(dāng)你使用print時(shí),Python是怎么運(yùn)行的 的相關(guān)介紹了,希望對大家有所幫助。

總結(jié)

以上是生活随笔為你收集整理的python开始print_当你使用print时,Python是怎么运行的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成年人免费在线观看视频网站 | 激情婷婷六月天 | 午夜影院污 | youjizz日韩 | 97在线观视频免费观看 | 97超碰人人澡 | 草草影院网址 | 免费成人黄色片 | 亚洲av久久久噜噜噜噜 | 青娱乐超碰| 激情小视频在线观看 | 国产精品美女久久久久图片 | 韩日午夜在线资源一区二区 | 在线观看你懂的网址 | 国产网红在线观看 | 黄色片免费看 | 精品伦精品一区二区三区视频密桃 | 天天摸夜夜添 | 国产三级直播 | 青青青草视频在线观看 | 91桃色视频在线观看 | 精品国产乱码久久久久久鸭王1 | 中文亚洲欧美 | 午夜影院福利 | 亚洲一区欧美二区 | 国产欧美日韩一区二区三区 | 麻豆久久久久久久久久 | 黄色一级带 | 国产男女精品 | 欧美色哟哟 | 国产色婷婷 | 性做久久久久久免费观看欧美 | 91人人草| 日韩色区 | 亚洲最大的av网站 | 国产美女操 | 日日摸日日添日日躁av | 欧美成本人视频 | 国产精品黄色在线观看 | 欧美毛片在线 | h片在线观看免费 | 久久天天东北熟女毛茸茸 | 俺来也av | 日韩视频 中文字幕 | 欧美性猛交xx乱大交 | 成人男女视频 | 日本www免费 | 亚州av在线播放 | 风流少妇一区二区三区91 | 高清不卡毛片 | 欧美xxxxbbbb | 中文字幕一区二区三 | 欧美日韩综合在线观看 | 九色影院 | www.xxx亚洲 | 国产福利电影在线 | 夜夜草av | 好看的av网址 | 日韩av无码一区二区三区不卡 | 色久视频 | 性做久久久久久久久久 | 99久久精品免费看国产免费软件 | 骚虎av在线 | 深夜视频免费在线观看 | 在线观看波多野结衣 | 欧美爱爱小视频 | 日本少妇大战黑人 | 成人做爰100 | 亚洲人成网址 | 青青草97国产精品免费观看 | 性色一区二区 | 日本中文字幕网 | 国产精品99久久久久久动医院 | 色欲一区二区三区精品a片 在线观看黄网站 | 夜夜爽妓女8888视频免费观看 | 国产日韩在线观看一区 | 男ji大巴进入女人视频 | 成人自拍偷拍 | 日日噜噜夜夜狠狠久久波多野 | 欧美日韩国产精品成人 | 国产夜夜夜 | 影视av | 亚洲欧美日韩精品色xxx | 麻豆伦理片 | 青青艹在线视频 | 97人妻精品一区二区三区 | 夜夜躁很很躁日日躁麻豆 | 欧美有码视频 | 国产女人在线视频 | 少妇一级淫片免费放 | 伊人毛片| 伊人称影院 | 人人爽视频 | 欧美不卡一区二区三区 | 国产中文字幕一区二区三区 | 香蕉网站在线观看 | 国产午夜一区二区三区 | 国产麻豆剧传媒精品国产av | 国产一二三在线视频 |