Python簡史

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉(zhuǎn)載,也請保留這段聲明瓶籽。謝謝!

Python是我喜歡的語言埂材,簡潔塑顺,優(yōu)美,容易使用俏险。前兩天严拒,我很激昂的向朋友宣傳Python的好處。

聽過之后竖独,朋友問我:好吧裤唠,我承認(rèn)Python不錯,但它為什么叫Python呢预鬓?

我不是很確定:呃巧骚,似乎是一個電視劇的名字。

朋友又問:那你說的Guido是美國人么格二? (Guido von Rossum劈彪,Python的作者)

我再次不是很確定:他從google換到Dropbox工作,但他的名字像是荷蘭人的 (有一個von在中間)顶猜。

所以沧奴,后面我花了些時間調(diào)查Python的歷史。這是很好的學(xué)習(xí)长窄。我看到了Python中許多功能的來源和Python的設(shè)計理念滔吠,比如哪些功能是歷史遺留,哪些功能是重復(fù)挠日,如何增加功能…… 而且疮绷,Python也是開源(open source)運動的一個成功案例。從Python的歷史中嚣潜,我們可以一窺開源開發(fā)的理念和成就冬骚。

這也可以作為我寫的Python快速教程的序篇。

Python的起源

Python的作者懂算,Guido von Rossum只冻,確實是荷蘭人。1982年计技,Guido從阿姆斯特丹大學(xué)(University of Amsterdam)獲得了數(shù)學(xué)和計算機碩士學(xué)位喜德。然而,盡管他算得上是一位數(shù)學(xué)家垮媒,但他更加享受計算機帶來的樂趣舍悯。用他的話說航棱,盡管擁有數(shù)學(xué)和計算機雙料資質(zhì),他總趨向于做計算機相關(guān)的工作贱呐,并熱衷于做任何和編程相關(guān)的活兒丧诺。

image

Guido von Rossum

在那個時候,他接觸并使用過諸如Pascal奄薇、C驳阎、 Fortran等語言。這些語言的基本設(shè)計原則是讓機器能更快運行馁蒂。在80年代呵晚,雖然IBM和蘋果已經(jīng)掀起了個人電腦浪潮,但這些個人電腦的配置很低 (在今天看來)沫屡。比如早期的Macintosh饵隙,只有8MHz的CPU主頻和128KB的RAM,一個大的數(shù)組就能占滿內(nèi)存沮脖。所有的編譯器的核心是做優(yōu)化金矛,以便讓程序能夠運行。為了增進效率勺届,語言也迫使程序員像計算機一樣思考驶俊,以便能寫出更符合機器口味的程序。在那個時代免姿,程序員恨不得用手榨取計算機每一寸的能力饼酿。有人甚至認(rèn)為C語言的指針是在浪費內(nèi)存。至于動態(tài)類型胚膊,內(nèi)存自動管理故俐,面向?qū)ο蟆?別想了,那會讓你的電腦陷入癱瘓紊婉。

然而药版,這種思考方式讓Guido感到苦惱。Guido知道如何用C語言寫出一個功能喻犁,但整個編寫過程需要耗費大量的時間 (即使他已經(jīng)準(zhǔn)確的知道了如何實現(xiàn))槽片。他的另一個選擇是shell株汉。Bourne Shell作為UNIX系統(tǒng)的解釋器(interpreter)已經(jīng)長期存在筐乳。UNIX的管理員們常常用shell去寫一些簡單的腳本歌殃,以進行一些系統(tǒng)維護的工作乔妈,比如定期備份囊陡、文件系統(tǒng)管理等等欣除。shell可以像膠水一樣,將UNIX下的許多功能連接在一起栋烤。許多C語言下上百行的程序,在shell下只用幾行就可以完成股淡。然而身隐,shell的本質(zhì)是調(diào)用命令。它并不是一個真正的語言唯灵。比如說贾铝,shell沒有數(shù)值型的數(shù)據(jù)類型,加法運算都很復(fù)雜埠帕」缚總之,shell不能全面的調(diào)動計算機的功能敛瓷。

(關(guān)于shell叁巨,你可以參考Linux架構(gòu)Linux命令行與命令)

Guido希望有一種語言,這種語言能夠像C語言那樣呐籽,能夠全面調(diào)用計算機的功能接口锋勺,又可以像shell那樣,可以輕松的編程狡蝶。ABC語言讓Guido看到希望庶橱。ABC是由荷蘭的CWI (Centrum Wiskunde & Informatica, 數(shù)學(xué)和計算機研究所)開發(fā)的。Guido在CWI工作牢酵,并參與到ABC語言的開發(fā)悬包。ABC語言以教學(xué)為目的。與當(dāng)時的大部分語言不同馍乙,ABC語言的目標(biāo)是“讓用戶感覺更好”布近。ABC語言希望讓語言變得容易閱讀,容易使用丝格,容易記憶撑瞧,容易學(xué)習(xí),并以此來激發(fā)人們學(xué)習(xí)編程的興趣显蝌。比如下面是一段來自Wikipedia的ABC程序预伺,這個程序用于統(tǒng)計文本中出現(xiàn)的詞(word)的總數(shù):

HOW TO RETURN words document:
   PUT {} IN collection
   FOR line IN document:
      FOR word IN split line:
         IF word not.in collection:
            INSERT word IN collection
   RETURN collection

HOW TO用于定義一個函數(shù)。一個Python程序員應(yīng)該很容易理解這段程序曼尊。ABC語言使用冒號(:)和縮進來表示程序塊(C語言使用{}來表示程序塊)酬诀。行尾沒有分號。for和if結(jié)構(gòu)中也沒有括號()骆撇。如果將HOW TO改為def瞒御,將PUT行改為collection = [],將INSERT行改為collection.append(word)神郊,這就幾乎是一個標(biāo)準(zhǔn)的Python函數(shù)肴裙。上面的函數(shù)讀起來就像一段自然的文字趾唱。

盡管已經(jīng)具備了良好的可讀性和易用性,ABC語言最終沒有流行起來蜻懦。在當(dāng)時甜癞,ABC語言編譯器需要比較高配置的電腦才能運行。而這些電腦的使用者通常精通計算機宛乃,他們更多考慮程序的效率悠咱,而非它的學(xué)習(xí)難度。除了硬件上的困難外征炼,ABC語言的設(shè)計也存在一些致命的問題:

  • 可拓展性差乔煞。ABC語言不是模塊化語言。如果想在ABC語言中增加功能柒室,比如對圖形化的支持渡贾,就必須改動很多地方。
  • 不能直接進行IO雄右。ABC語言不能直接操作文件系統(tǒng)空骚。盡管你可以通過諸如文本流的方式導(dǎo)入數(shù)據(jù),但ABC無法直接讀寫文件擂仍。輸入輸出的困難對于計算機語言來說是致命的囤屹。你能想像一個打不開車門的跑車么?
  • 過度革新逢渔。ABC用自然語言的方式來表達(dá)程序的意義肋坚,比如上面程序中的HOW TO (如何)。然而對于程序員來說肃廓,他們更習(xí)慣用function或者define來定義一個函數(shù)智厌。同樣,程序員也習(xí)慣了用等號(=)來分配變量盲赊。這盡管讓ABC語言顯得特別铣鹏,但實際上增加了程序員的學(xué)習(xí)難度 (程序員大都掌握不止一種語言)。
  • 傳播困難哀蘑。ABC編譯器很大诚卸,必須被保存在磁帶(tape)上。當(dāng)時Guido在訪問的時候绘迁,就必須有一個大磁帶來給別人安裝ABC編譯器合溺。 這樣,ABC語言就很難快速傳播缀台。
image

IBM tape drive:讀寫磁帶

1989年棠赛,為了打發(fā)圣誕節(jié)假期,Guido開始寫Python語言的編譯/解釋器。Python來自Guido所摯愛的電視劇Monty Python's Flying Circus (BBC1960-1970年代播放的室內(nèi)情景幽默劇恭朗,以當(dāng)時的英國生活為素材)。他希望這個新的叫做Python的語言依疼,能實現(xiàn)他的理念(一種C和shell之間痰腮,功能全面,易學(xué)易用律罢,可拓展的語言)膀值。Guido作為一個語言設(shè)計愛好者,已經(jīng)有過設(shè)計語言的(不很成功)的嘗試误辑。這一次沧踏,也不過是一次純粹的hacking行為。

Python的誕生

1991年巾钉,第一個Python編譯器(同時也是解釋器)誕生翘狱。它是用C語言實現(xiàn)的,并能夠調(diào)用C庫(.so文件)砰苍。從一出生潦匈,Python已經(jīng)具有了:類(class),函數(shù)(function)赚导,異常處理(exception)茬缩,包括表(list)和詞典(dictionary)在內(nèi)的核心數(shù)據(jù)類型,以及模塊(module)為基礎(chǔ)的拓展系統(tǒng)吼旧。

image

最初的Python logo: 由Guido的兄弟Just von Rossum設(shè)計

Python語法很多來自C凰锡,但又受到ABC語言的強烈影響。來自ABC語言的一些規(guī)定直到今天還富有爭議圈暗,比如強制縮進掂为。但這些語法規(guī)定讓Python容易讀。另一方面员串,Python聰明的選擇服從一些慣例(特別是C語言的慣例)菩掏。比如使用等號賦值,使用def來定義函數(shù)昵济。Guido認(rèn)為智绸,如果“常識”上確立的東西,沒有必要過度糾結(jié)访忿。

Python從一開始就特別在意可拓展性(extensibility)瞧栗。Python可以在多個層次上拓展。從高層上海铆,你可以引入.py文件迹恐。在底層,你可以引用C語言的庫卧斟。Python程序員可以快速的使用Python寫.py文件作為拓展模塊殴边。但當(dāng)性能是考慮的重要因素時憎茂,Python程序員可以深入底層,寫C程序锤岸,編譯為.so文件引入到Python中使用竖幔。Python就好像是使用鋼構(gòu)建房一樣,先規(guī)定好大的框架是偷。而程序員可以在此框架下相當(dāng)自由的拓展或更改拳氢。

最初的Python完全由Guido本人開發(fā)。Python得到Guido同事的歡迎蛋铆。他們迅速的反饋使用意見馋评,并參與到Python的改進。Guido和一些同事構(gòu)成Python的核心團隊刺啦。他們將自己大部分的業(yè)余時間用于hack Python (也包括工作時間留特,因為他們將Python用于工作)。隨后玛瘸,Python拓展到CWI之外磕秤。Python將許多機器層面上的細(xì)節(jié)隱藏,交給編譯器處理捧韵,并凸顯出邏輯層面的編程思考市咆。Python程序員可以花更多的時間用于思考程序的邏輯,而不是具體的實現(xiàn)細(xì)節(jié) (Guido有一件T恤再来,寫著:人生苦短蒙兰,我用Python)。這一特征吸引了廣大的程序員芒篷。Python開始流行搜变。

我們不得不暫停我們的Python時間,轉(zhuǎn)而看一看這時的計算機概況针炉。1990年代初挠他,個人計算機開始進入普通家庭。Intel發(fā)布了486處理器篡帕,windows發(fā)布window 3.0開始的一系列視窗系統(tǒng)殖侵。計算機的性能大大提高。程序員開始關(guān)注計算機的易用性 (比如圖形化界面)镰烧。
image

Windows 3.0

由于計算機性能的提高拢军,軟件的世界也開始隨之改變。硬件足以滿足許多個人電腦的需要怔鳖。硬件廠商甚至渴望高需求軟件的出現(xiàn)茉唉,以帶動硬件的更新?lián)Q代。C++和Java相繼流行。C++和Java提供了面向?qū)ο蟮木幊谭妒蕉嚷剑约柏S富的對象庫艾凯。在犧牲了一定的性能的代價下,C++和Java大大提高了程序的產(chǎn)量懂傀。語言的易用性被提到一個新的高度趾诗。我們還記得,ABC失敗的一個重要原因是硬件的性能限制鸿竖。從這方面說,Python要比ABC幸運許多铸敏。

另一個悄然發(fā)生的改變是Internet缚忧。1990年代還是個人電腦的時代,windows和Intel挾PC以令天下杈笔,盛極一時闪水。盡管Internet為主體的信息革命尚未到來,但許多程序員以及資深計算機用戶已經(jīng)在頻繁使用Internet進行交流 (包括email和newsgroup)蒙具。Internet讓信息交流成本大大下降球榆。一種新的軟件開發(fā)模式開始流行:開源 (open source)。程序員利用業(yè)余時間進行軟件開發(fā)禁筏,并開放源代碼持钉。1991年,Linus在comp.os.minix新聞組上發(fā)布了Linux內(nèi)核源代碼篱昔,吸引大批hacker的加入每强。Linux和GNU相互合作,最終構(gòu)成了一個充滿活力的開源平臺州刽。

硬件性能不是瓶頸空执,Python又容易使用,所以許多人開始轉(zhuǎn)向Python穗椅。Guido維護了一個maillist辨绊,Python用戶就通過郵件進行交流。Python用戶來自許多領(lǐng)域匹表,有不同的背景门坷,對Python也有不同的需求。Python相當(dāng)?shù)拈_放袍镀,又容易拓展拜鹤,所以當(dāng)用戶不滿足于現(xiàn)有功能,很容易對Python進行拓展或改造流椒。隨后敏簿,這些用戶將改動發(fā)給Guido,并由Guido決定是否將新的特征加入到Python或者標(biāo)準(zhǔn)庫中。如果代碼能被納入Python自身或者標(biāo)準(zhǔn)庫惯裕,這將極大的榮譽温数。Python自身也因此變得更好。

(Guido不得不作出許多決定蜻势,這也是他被稱為Benevolent Dictator For Life的原因)

Python被稱為“Battery Included”撑刺,是說它以及其標(biāo)準(zhǔn)庫的功能強大。這些是整個社區(qū)的貢獻(xiàn)握玛。Python的開發(fā)者來自不同領(lǐng)域够傍,他們將不同領(lǐng)域的優(yōu)點帶給Python。比如Python標(biāo)準(zhǔn)庫中的正則表達(dá)(regular expression)是參考Perl挠铲,而lambda, map, filter, reduce函數(shù)參考Lisp冕屯。Python本身的一些功能以及大部分的標(biāo)準(zhǔn)庫來自于社區(qū)。Python的社區(qū)不斷擴大拂苹,進而擁有了自己的newsgroup安聘,網(wǎng)站(python.org),以及基金 (Python Software Foundation)瓢棒。從Python 2.0開始浴韭,Python也從maillist的開發(fā)方式,轉(zhuǎn)為完全開源的開發(fā)方式脯宿。社區(qū)氣氛已經(jīng)形成念颈,工作被整個社區(qū)分擔(dān),Python也獲得了更加高速的發(fā)展连霉。

(由于Guido享有絕對的仲裁權(quán)舍肠,所以在Python早期maillist的開發(fā)時代,不少愛好者相當(dāng)擔(dān)心Guido的生命窘面。他們甚至作出假設(shè):如果Guido掛了的話翠语,Python會怎樣。見If Guido was hit by a bus)

到今天财边,Python的框架已經(jīng)確立肌括。Python語言以對象為核心組織代碼(Everything is object),支持多種編程范式(multi-paradigm)酣难,采用動態(tài)類型(dynamic typing)谍夭,自動進行內(nèi)存回收(garbage collection)。Python支持解釋運行(interpret)憨募,并能調(diào)用C庫進行拓展紧索。Python有強大的標(biāo)準(zhǔn)庫 (battery included)。由于標(biāo)準(zhǔn)庫的體系已經(jīng)穩(wěn)定菜谣,所以Python的生態(tài)系統(tǒng)開始拓展到第三方包珠漂。這些包晚缩,如Django, web.py, wxpython, numpy, matplotlib,PIL,將Python升級成了物種豐富的熱帶雨林媳危。

今天Python已經(jīng)進入到3.0的時代荞彼。由于Python 3.0向后不兼容,所以從2.0到3.0的過渡并不容易待笑。另一方面鸣皂,Python的性能依然值得改進,Python的運算性能低于C++和Java(見Google的討論)暮蹂。Python依然是一個在發(fā)展中的語言寞缝。我期待看到Python的未來。

Python啟示錄

Python崇尚優(yōu)美仰泻、清晰荆陆、簡單,是一個優(yōu)秀并廣泛使用的語言 (TIOBE語言排行第八我纪,Google的第三大開發(fā)語言慎宾,Dropbox的基礎(chǔ)語言丐吓,豆瓣的服務(wù)器語言)浅悉。這個世界并不缺乏優(yōu)秀的語言,但Python的發(fā)展史作為一個代表券犁,帶給我許多啟示术健。

在Python的開發(fā)過程中,社區(qū)起到了重要的作用粘衬。Guido自認(rèn)為自己不是全能型的程序員荞估,所以他只負(fù)責(zé)制訂框架。如果問題太復(fù)雜稚新,他會選擇繞過去勘伺,也就是cut the corner。這些問題最終由社區(qū)中的其他人解決褂删。社區(qū)中的人才是異常豐富的飞醉,就連創(chuàng)建網(wǎng)站,籌集基金這樣與開發(fā)稍遠(yuǎn)的事情屯阀,也有人樂意于處理缅帘。如今的項目開發(fā)越來越復(fù)雜,越來越龐大难衰,合作以及開放的心態(tài)成為項目最終成功的關(guān)鍵钦无。

Python從其他語言中學(xué)到了很多,無論是已經(jīng)進入歷史的ABC盖袭,還是依然在使用的C和Perl失暂,以及許多沒有列出的其他語言彼宠。可以說趣席,Python的成功代表了它所有借鑒的語言的成功兵志。同樣,Ruby借鑒了Python宣肚,它的成功也代表了Python某些方面的成功想罕。每個語言都是混合體,都有它優(yōu)秀的地方霉涨,但也有各種各樣的缺陷按价。同時,一個語言“好與不好”的評判笙瑟,往往受制于平臺楼镐、硬件、時代等等外部原因往枷。程序員經(jīng)歷過許多語言之爭框产。我想,為什么不以開放的心態(tài)和客觀的分析错洁,去區(qū)分一下每個語言的具體優(yōu)點缺點秉宿,去區(qū)分內(nèi)部和外部的因素。說不定哪一天發(fā)現(xiàn)屯碴,我不喜歡的某個語言中描睦,正包含了我所需要的東西。

無論Python未來的命運如何导而,Python的歷史已經(jīng)是本很有趣的小說忱叭。

如果你因為本文對Python產(chǎn)生了興趣,歡迎閱讀我的Python快速教程今艺。

本文主要參考:

Guido在Dropbox所做演講 http://v.youku.com/v_show/id_XNTExOTc1NTU2.html

python.org的文檔

Wikipedia

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末韵丑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子虚缎,更是在濱河造成了極大的恐慌撵彻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遥巴,死亡現(xiàn)場離奇詭異千康,居然都是意外死亡,警方通過查閱死者的電腦和手機铲掐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門拾弃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摆霉,你說我怎么就攤上這事豪椿”挤兀” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵搭盾,是天一觀的道長咳秉。 經(jīng)常有香客問我,道長鸯隅,這世上最難降的妖魔是什么澜建? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蝌以,結(jié)果婚禮上炕舵,老公的妹妹穿的比我還像新娘。我一直安慰自己跟畅,他們只是感情好咽筋,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徊件,像睡著了一般奸攻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虱痕,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天睹耐,我揣著相機與錄音,去河邊找鬼皆疹。 笑死疏橄,一個胖子當(dāng)著我的面吹牛占拍,可吹牛的內(nèi)容都是我干的略就。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晃酒,長吁一口氣:“原來是場噩夢啊……” “哼表牢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贝次,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤崔兴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛔翅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敲茄,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年山析,在試婚紗的時候發(fā)現(xiàn)自己被綠了堰燎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡笋轨,死狀恐怖秆剪,靈堂內(nèi)的尸體忽然破棺而出赊淑,到底是詐尸還是另有隱情,我是刑警寧澤仅讽,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布陶缺,位于F島的核電站,受9級特大地震影響洁灵,放射性物質(zhì)發(fā)生泄漏饱岸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一徽千、第九天 我趴在偏房一處隱蔽的房頂上張望伶贰。 院中可真熱鬧,春花似錦罐栈、人聲如沸黍衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琅翻。三九已至,卻和暖如春柑贞,著一層夾襖步出監(jiān)牢的瞬間方椎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工钧嘶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棠众,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓有决,卻偏偏與公主長得像闸拿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子书幕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Python是我喜歡的語言台汇,簡潔苛骨、優(yōu)美、容易使用苟呐。前兩天痒芝,我很激昂的向朋友宣傳Python的好處∏K兀“好吧严衬,我承認(rèn)P...
    開子的私家地閱讀 834評論 0 1
  • 1. Python發(fā)展歷史 起源 Python的作者,Guido von Rossum两波,荷蘭人瞳步。1982年闷哆,Gui...
    Louisnie閱讀 2,804評論 0 1
  • 大寶中耳炎好幾天了。帶去醫(yī)院单起,大夫說那個耳朵說著就左手拿器具右手捏耳朵去查看了抱怔。。嘀倒。我大寶嗷一嗓子哭開了疼疼疼屈留。我...
    f2baa665a504閱讀 264評論 0 0
  • 2019.4.2 星期二 晴 難受。感冒测蘑。什么欲望都沒有灌危,只想躺著休息。 手痛腳痛眼睛痛感冒碳胳。勇蝙。。不想動
    阿文YovinTeng閱讀 98評論 1 3
  • 想到什么就寫什么吧挨约。 一年過去味混,新一年到來,驀然回首诫惭,18年已經(jīng)過去了四分之一翁锡。 時間總是匆匆而過,流逝太快夕土,我總...
    粉色的leo閱讀 213評論 0 2