日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

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

python

【Python学习教程】Python编程基础

發(fā)布時(shí)間:2023/12/20 python 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python学习教程】Python编程基础 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 編程語(yǔ)言是什么
  • 編譯型語(yǔ)言和解釋型語(yǔ)言的區(qū)別
    • 編譯型語(yǔ)言
        • 1) 可執(zhí)行程序不能跨平臺(tái)
        • 2) 源代碼不能跨平臺(tái)
    • 解釋型語(yǔ)言
    • 關(guān)于 Python
    • 總結(jié)
  • Python是什么,Python簡(jiǎn)介
  • Python的特點(diǎn)(優(yōu)點(diǎn)和缺點(diǎn))
    • Python 的優(yōu)點(diǎn)
        • 1) 語(yǔ)法簡(jiǎn)單
        • 2) Python 是開源的
        • 3) Python 是免費(fèi)的
        • 4) Python 是高級(jí)語(yǔ)言
        • 5) Python 是解釋型語(yǔ)言,能跨平臺(tái)
        • 5) Python 是面向?qū)ο蟮木幊陶Z(yǔ)言
        • 6) Python 功能強(qiáng)大(模塊眾多)
        • 7) Python 可擴(kuò)展性強(qiáng)
    • Python 的缺點(diǎn)
        • 1) 運(yùn)行速度慢
        • 2) 代碼加密困難
  • 學(xué)Python,不需要有編程基礎(chǔ)!
  • Python能干什么,Python的應(yīng)用領(lǐng)域
    • Web應(yīng)用開發(fā)
    • 自動(dòng)化運(yùn)維
    • 人工智能領(lǐng)域
    • 網(wǎng)路爬蟲
    • 科學(xué)計(jì)算
    • 游戲開發(fā)
  • 怎樣學(xué)習(xí)Python才能成為高手?
    • 編程語(yǔ)言都是相通的
    • Python對(duì)初學(xué)者很友好
        • 1) 多實(shí)踐,積累代碼量
        • 2) 時(shí)刻注意代碼規(guī)范
        • 3) 開發(fā)經(jīng)驗(yàn)是必不可少的
  • Python版本區(qū)別,Python 3和Python 2區(qū)別詳解
    • Python 3.x print函數(shù)代替了print語(yǔ)句
    • Python 3.x 默認(rèn)使用 UTF-8 編碼
    • Python 3.x 除法運(yùn)算
        • / 運(yùn)算符
        • 運(yùn)算符 //
    • Python 3.x 異常
    • Python 3.x 八進(jìn)制字面量表示
    • Python 3.x 不等于運(yùn)算符
    • Python 3.x 數(shù)據(jù)類型
  • Python 2.x和Python 3.x,初學(xué)者應(yīng)如何選擇?
  • Python 2to3:自動(dòng)將Python 2.x代碼轉(zhuǎn)換成Python3.x代碼
  • Python PEP文檔:及時(shí)追蹤Python最新變化
    • Python PEP文檔
  • Python底層是用什么語(yǔ)言實(shí)現(xiàn)的?
    • Stackless Python
    • JPython
    • IronPython
    • PyPy
  • 了解Jupyter Notebook,你已然超越了90%的Python程序員
    • 什么是Jupyter Notebook
    • Jupyter Notebook的影響力
    • Jupyter Notebook的優(yōu)勢(shì)
        • 1) 整合了所有資源
        • 2) 交互性編程體驗(yàn)
        • 3) 輕松運(yùn)行他人編寫的代碼

轉(zhuǎn)載于http://c.biancheng.net/python/

Python 并不是一門新的編程語(yǔ)言,1991 年就發(fā)行了第一個(gè)版本,2010 年以后隨著大數(shù)據(jù)和人工智能的興起,Python 又重新煥發(fā)出了耀眼的光芒。在 2019 年 12 月份世界編程語(yǔ)言排行榜中,Python 排名第三,僅次于 Java 和C語(yǔ)言。

Python 是一門開源免費(fèi)的腳本編程語(yǔ)言,它不僅簡(jiǎn)單易用,而且功能強(qiáng)大。

Python 是一門推崇“極簡(jiǎn)主義”的編程語(yǔ)言,閱讀優(yōu)秀的 Python 程序就像閱讀一段英文,非專業(yè)人士也可以使用 Python。

本章主要介紹和 Python 編程相關(guān)的基礎(chǔ)知識(shí),并沒(méi)有真正涉及 Python 語(yǔ)法,算是一道“開胃菜”。

編程語(yǔ)言是什么

其實(shí),程序指的就是一系列指令,用來(lái)告訴計(jì)算機(jī)做什么,而編寫程序的關(guān)鍵在于,我們需要用計(jì)算機(jī)可以理解的語(yǔ)言來(lái)提供這些指令。

雖然借助 Siri(Apple)、Google Now(Android)、Cortana(Microsoft)等技術(shù),我們可以使用漢語(yǔ)直接告訴計(jì)算機(jī)做什么,比如“Siri,打開酷狗音樂(lè)”,但使用過(guò)這些系統(tǒng)的讀者都知道,它尚未完全成熟,再加上我們語(yǔ)言充滿了模糊和不精確因素,使得設(shè)計(jì)一個(gè)完全理解人類語(yǔ)言的計(jì)算機(jī)程序,仍然是一個(gè)有待解決的問(wèn)題。

為了有效避開所有影響給計(jì)算機(jī)傳遞指令的因素,計(jì)算機(jī)科學(xué)家設(shè)計(jì)了一些符號(hào),這些符號(hào)各有其含義,且之間無(wú)二義性,通常稱它們?yōu)榫幊陶Z(yǔ)言。編程語(yǔ)言中的每個(gè)結(jié)構(gòu),都有固定的使用格式(稱為語(yǔ)法)以及精確的含義(稱為語(yǔ)義)。換句話說(shuō),編程語(yǔ)言指定了成套的規(guī)則,用來(lái)編寫計(jì)算機(jī)可以理解的指令。習(xí)慣上,我們將這一條條指令稱為計(jì)算機(jī)代碼,而用編程語(yǔ)言來(lái)編寫算法的過(guò)程稱為編碼。

本教程要講解的 Python 就是一種編程語(yǔ)言,除此之外,你肯定也聽說(shuō)過(guò)其他一些編程語(yǔ)言,如 C、C++、Java、Ruby 等。至今,計(jì)算機(jī)科學(xué)家已經(jīng)開發(fā)了成百上千種編程語(yǔ)言,且隨著時(shí)間演變,這些編程語(yǔ)言又產(chǎn)生了多個(gè)不同的版本。但無(wú)論是哪個(gè)編程語(yǔ)言,也無(wú)論有多少個(gè)版本,雖然它們?cè)诩?xì)節(jié)上可能有所不同,無(wú)疑它們都有著固定的、無(wú)二義性的語(yǔ)法和語(yǔ)義。

以上提到的編程語(yǔ)言,都是高級(jí)計(jì)算機(jī)語(yǔ)言,設(shè)計(jì)它們的目的是為了方便程序員理解和使用。但嚴(yán)格來(lái)說(shuō),計(jì)算機(jī)硬件只能理解一種非常低級(jí)的編程語(yǔ)言,稱為機(jī)器語(yǔ)言。

比如說(shuō),讓計(jì)算機(jī)對(duì) 2 個(gè)數(shù)做求和操作,那么 CPU 可能要執(zhí)行以下指令:

  • 將位于內(nèi)存空間位置在 2001 的數(shù)加載到 CPU 中;
  • 再將位于內(nèi)存空間位置在 2002 的數(shù)也加載到 CPU中;
  • 在 CPU中,對(duì)這 2 個(gè)數(shù)做求和操作;
  • 將結(jié)果存儲(chǔ)在位置為 2003 的內(nèi)存空間。
  • 可以看到,對(duì) 2 個(gè)數(shù)執(zhí)行求和操作需要做這么多工作,且這還只是籠統(tǒng)地描述,實(shí)際會(huì)更加復(fù)雜。

    而使用 Python 這樣的高級(jí)語(yǔ)言,對(duì) 2 個(gè)數(shù)求和可以很自然地用 c = a + b 表示,但由此帶來(lái)的問(wèn)題是,我們需要設(shè)計(jì)一種方法,將高級(jí)語(yǔ)言翻譯成計(jì)算機(jī)可以執(zhí)行的機(jī)器語(yǔ)言,有兩種方法可以實(shí)現(xiàn),分別是使用編譯器和解釋器。

    使用編譯器將自身等效轉(zhuǎn)換成機(jī)器語(yǔ)言的高級(jí)語(yǔ)言,通常稱為編譯型語(yǔ)言;而使用解釋器將自身轉(zhuǎn)換成機(jī)器語(yǔ)言的高級(jí)語(yǔ)言,稱為解釋型語(yǔ)言,Python 就是解釋型編程語(yǔ)言的一種。

    關(guān)于編譯型語(yǔ)言和解釋型語(yǔ)言的含義和區(qū)別,后續(xù)章節(jié)會(huì)進(jìn)行詳細(xì)介紹。

    編譯型語(yǔ)言和解釋型語(yǔ)言的區(qū)別

    我們編寫的源代碼是人類語(yǔ)言,我們自己能夠輕松理解;但是對(duì)于計(jì)算機(jī)硬件(CPU),源代碼就是天書,根本無(wú)法執(zhí)行,計(jì)算機(jī)只能識(shí)別某些特定的二進(jìn)制指令,在程序真正運(yùn)行之前必須將源代碼轉(zhuǎn)換成二進(jìn)制指令。

    所謂的二進(jìn)制指令,也就是機(jī)器碼,是 CPU 能夠識(shí)別的硬件層面的“代碼”,簡(jiǎn)陋的硬件(比如古老的單片機(jī))只能使用幾十個(gè)指令,強(qiáng)大的硬件(PC 和智能手機(jī))能使用成百上千個(gè)指令。

    然而,究竟在什么時(shí)候?qū)⒃创a轉(zhuǎn)換成二進(jìn)制指令呢?不同的編程語(yǔ)言有不同的規(guī)定:

    • 有的編程語(yǔ)言要求必須提前將所有源代碼一次性轉(zhuǎn)換成二進(jìn)制指令,也就是生成一個(gè)可執(zhí)行程序(Windows 下的 .exe),比如C語(yǔ)言、C++、Golang、Pascal(Delphi)、匯編等,這種編程語(yǔ)言稱為編譯型語(yǔ)言,使用的轉(zhuǎn)換工具稱為編譯器。
    • 有的編程語(yǔ)言可以一邊執(zhí)行一邊轉(zhuǎn)換,需要哪些源代碼就轉(zhuǎn)換哪些源代碼,不會(huì)生成可執(zhí)行程序,比如 Python、JavaScript、PHP、Shell、MATLAB 等,這種編程語(yǔ)言稱為解釋型語(yǔ)言,使用的轉(zhuǎn)換工具稱為解釋器。

    簡(jiǎn)單理解,編譯器就是一個(gè)“翻譯工具”,類似于將中文翻譯成英文、將英文翻譯成俄文。但是,翻譯源代碼是一個(gè)復(fù)雜的過(guò)程,大致包括詞法分析、語(yǔ)法分析、語(yǔ)義分析、性能優(yōu)化、生成可執(zhí)行文件等五個(gè)步驟,期間涉及到復(fù)雜的算法和硬件架構(gòu)。解釋器與此類似,有興趣的讀者請(qǐng)參考《編譯原理》一書,本文不再贅述。

    Java 和 C# 是一種比較奇葩的存在,它們是半編譯半解釋型的語(yǔ)言,源代碼需要先轉(zhuǎn)換成一種中間文件(字節(jié)碼文件),然后再將中間文件拿到虛擬機(jī)中執(zhí)行。Java 引領(lǐng)了這種風(fēng)潮,它的初衷是在跨平臺(tái)的同時(shí)兼顧執(zhí)行效率;C# 是后來(lái)的跟隨者,但是 C# 一直止步于 Windows 平臺(tái),在其它平臺(tái)鮮有作為。


    圖 1 編譯型語(yǔ)言和解釋型語(yǔ)言的執(zhí)行流程

    那么,編譯型語(yǔ)言和解釋型語(yǔ)言各有什么特點(diǎn)呢?它們之間有什么區(qū)別?

    編譯型語(yǔ)言

    對(duì)于編譯型語(yǔ)言,開發(fā)完成以后需要將所有的源代碼都轉(zhuǎn)換成可執(zhí)行程序,比如 Windows 下的.exe文件,可執(zhí)行程序里面包含的就是機(jī)器碼。只要我們擁有可執(zhí)行程序,就可以隨時(shí)運(yùn)行,不用再重新編譯了,也就是“一次編譯,無(wú)限次運(yùn)行”。

    在運(yùn)行的時(shí)候,我們只需要編譯生成的可執(zhí)行程序,不再需要源代碼和編譯器了,所以說(shuō)編譯型語(yǔ)言可以脫離開發(fā)環(huán)境運(yùn)行。

    編譯型語(yǔ)言一般是不能跨平臺(tái)的,也就是不能在不同的操作系統(tǒng)之間隨意切換。

    編譯型語(yǔ)言不能跨平臺(tái)表現(xiàn)在兩個(gè)方面:

    1) 可執(zhí)行程序不能跨平臺(tái)

    可執(zhí)行程序不能跨平臺(tái)很容易理解,因?yàn)椴煌僮飨到y(tǒng)對(duì)可執(zhí)行文件的內(nèi)部結(jié)構(gòu)有著截然不同的要求,彼此之間也不能兼容。不能跨平臺(tái)是天經(jīng)地義,能跨平臺(tái)反而才是奇葩。

    比如,不能將 Windows 下的可執(zhí)行程序拿到 Linux 下使用,也不能將 Linux 下的可執(zhí)行程序拿到 Mac OS 下使用(雖然它們都是類 Unix 系統(tǒng))。

    另外,相同操作系統(tǒng)的不同版本之間也不一定兼容,比如不能將 x64 程序(Windows 64 位程序)拿到 x86 平臺(tái)(Windows 32 位平臺(tái))下運(yùn)行。但是反之一般可行,因?yàn)?64 位 Windows 對(duì) 32 位程序作了很好的兼容性處理。

    2) 源代碼不能跨平臺(tái)

    不同平臺(tái)支持的函數(shù)、類型、變量等都可能不同,基于某個(gè)平臺(tái)編寫的源代碼一般不能拿到另一個(gè)平臺(tái)下編譯。我們以C語(yǔ)言為例來(lái)說(shuō)明。

    【實(shí)例1】在C語(yǔ)言中要想讓程序暫停可以使用“睡眠”函數(shù),在 Windows 平臺(tái)下該函數(shù)是 Sleep(),在 Linux 平臺(tái)下該函數(shù)是 sleep(),首字母大小寫不同。其次,Sleep() 的參數(shù)是毫秒,sleep() 的參數(shù)是秒,單位也不一樣。

    以上兩個(gè)原因?qū)е率褂脮和9δ艿腃語(yǔ)言程序不能跨平臺(tái),除非在代碼層面做出兼容性處理,非常麻煩。

    【實(shí)例2】雖然不同平臺(tái)的C語(yǔ)言都支持 long 類型,但是不同平臺(tái)的 long 的長(zhǎng)度卻不同,例如,Windows 64 位平臺(tái)下的 long 占用 4 個(gè)字節(jié),Linux 64 位平臺(tái)下的 long 占用 8 個(gè)字節(jié)。

    我們?cè)?Linux 64 位平臺(tái)下編寫代碼時(shí),將 0x2f1e4ad23 賦值給 long 類型的變量是完全沒(méi)有問(wèn)題的,但是這樣的賦值在 Windows 平臺(tái)下就會(huì)導(dǎo)致數(shù)值溢出,讓程序產(chǎn)生錯(cuò)誤的運(yùn)行結(jié)果。

    讓人苦惱的,這樣的錯(cuò)誤一般不容易察覺,因?yàn)榫幾g器不會(huì)報(bào)錯(cuò),我們也記不住不同類型的取值范圍。

    解釋型語(yǔ)言

    對(duì)于解釋型語(yǔ)言,每次執(zhí)行程序都需要一邊轉(zhuǎn)換一邊執(zhí)行,用到哪些源代碼就將哪些源代碼轉(zhuǎn)換成機(jī)器碼,用不到的不進(jìn)行任何處理。每次執(zhí)行程序時(shí)可能使用不同的功能,這個(gè)時(shí)候需要轉(zhuǎn)換的源代碼也不一樣。

    因?yàn)槊看螆?zhí)行程序都需要重新轉(zhuǎn)換源代碼,所以解釋型語(yǔ)言的執(zhí)行效率天生就低于編譯型語(yǔ)言,甚至存在數(shù)量級(jí)的差距。計(jì)算機(jī)的一些底層功能,或者關(guān)鍵算法,一般都使用 C/C++ 實(shí)現(xiàn),只有在應(yīng)用層面(比如網(wǎng)站開發(fā)、批處理、小工具等)才會(huì)使用解釋型語(yǔ)言。

    在運(yùn)行解釋型語(yǔ)言的時(shí)候,我們始終都需要源代碼和解釋器,所以說(shuō)它無(wú)法脫離開發(fā)環(huán)境。

    當(dāng)我們說(shuō)“下載一個(gè)程序(軟件)”時(shí),不同類型的語(yǔ)言有不同的含義:

    • 對(duì)于編譯型語(yǔ)言,我們下載到的是可執(zhí)行文件,源代碼被作者保留,所以編譯型語(yǔ)言的程序一般是閉源的。
    • 對(duì)于解釋型語(yǔ)言,我們下載到的是所有的源代碼,因?yàn)樽髡卟唤o源代碼就沒(méi)法運(yùn)行,所以解釋型語(yǔ)言的程序一般是開源的。

    相比于編譯型語(yǔ)言,解釋型語(yǔ)言幾乎都能跨平臺(tái),“一次編寫,到處運(yùn)行”是真是存在的,而且比比皆是。那么,為什么解釋型語(yǔ)言就能快平臺(tái)呢?

    這一切都要?dú)w功于解釋器!

    我們所說(shuō)的跨平臺(tái),是指源代碼跨平臺(tái),而不是解釋器跨平臺(tái)。解釋器用來(lái)將源代碼轉(zhuǎn)換成機(jī)器碼,它就是一個(gè)可執(zhí)行程序,是絕對(duì)不能跨平臺(tái)的。

    官方需要針對(duì)不同的平臺(tái)開發(fā)不同的解釋器,這些解釋器必須要能夠遵守同樣的語(yǔ)法,識(shí)別同樣的函數(shù),完成同樣的功能,只有這樣,同樣的代碼在不同平臺(tái)的執(zhí)行結(jié)果才是相同的。

    你看,解釋型語(yǔ)言之所以能夠跨平臺(tái),是因?yàn)橛辛私忉屍鬟@個(gè)中間層。在不同的平臺(tái)下,解釋器會(huì)將相同的源代碼轉(zhuǎn)換成不同的機(jī)器碼,解釋器幫助我們屏蔽了不同平臺(tái)之間的差異。

    關(guān)于 Python

    Python 屬于典型的解釋型語(yǔ)言,所以運(yùn)行 Python 程序需要解釋器的支持,只要你在不同的平臺(tái)安裝了不同的解釋器,你的代碼就可以隨時(shí)運(yùn)行,不用擔(dān)心任何兼容性問(wèn)題,真正的“一次編寫,到處運(yùn)行”。

    Python 幾乎支持所有常見的平臺(tái),比如 Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC 等,你所寫的 Python 代碼無(wú)需修改就能在這些平臺(tái)上正確運(yùn)行。也就是說(shuō),Python 的可移植性是很強(qiáng)的。

    總結(jié)

    我們將編譯型語(yǔ)言和解釋型語(yǔ)言的差異總結(jié)為下表:

    類型原理優(yōu)點(diǎn)缺點(diǎn)
    編譯型語(yǔ)言通過(guò)專門的編譯器,將所有源代碼一次性轉(zhuǎn)換成特定平臺(tái)(Windows、Linux 等)執(zhí)行的機(jī)器碼(以可執(zhí)行文件的形式存在)。編譯一次后,脫離了編譯器也可以運(yùn)行,并且運(yùn)行效率高。可移植性差,不夠靈活。
    解釋型語(yǔ)言由專門的解釋器,根據(jù)需要將部分源代碼臨時(shí)轉(zhuǎn)換成特定平臺(tái)的機(jī)器碼。跨平臺(tái)性好,通過(guò)不同的解釋器,將相同的源代碼解釋成不同平臺(tái)下的機(jī)器碼。一邊執(zhí)行一邊轉(zhuǎn)換,效率很低。

    Python是什么,Python簡(jiǎn)介

    編程語(yǔ)言有“高低”之分,而高級(jí)語(yǔ)言又有很多種,比如 C++、Java、C#、PHP、JavaScript 等,Python 也是其中之一。從本節(jié)開始,我們將正式開始學(xué)習(xí) Python 這門高級(jí)編程語(yǔ)言,但是在此之前,我們有必要先討論一下“Python 是什么”。

    Python 英文原意為“蟒蛇”,直到 1989 年荷蘭人 Guido van Rossum (簡(jiǎn)稱 Guido)發(fā)明了一種面向?qū)ο蟮慕忉屝途幊陶Z(yǔ)言,并將其命名為 Python,才賦予了它表示一門編程語(yǔ)言的含義。

    我們將在《編譯型語(yǔ)言和解釋型語(yǔ)言的區(qū)別》一文中講解什么是解釋型語(yǔ)言。


    圖 1 Python 的標(biāo)志(Logo)

    說(shuō)道 Python,它的誕生是極具戲曲性的,據(jù) Guido 的自述記載,Python 語(yǔ)言是他在圣誕節(jié)期間為了打發(fā)時(shí)間開發(fā)出來(lái)的,之所以會(huì)選擇 Python 作為該編程語(yǔ)言的名字,是因?yàn)樗且粋€(gè)叫 Monty Python 戲劇團(tuán)體的忠實(shí)粉絲。

    Python 語(yǔ)言是在 ABC 教學(xué)語(yǔ)言的基礎(chǔ)上發(fā)展來(lái)的;遺憾的是,ABC 語(yǔ)言雖然非常強(qiáng)大,但卻沒(méi)有普及應(yīng)用,Guido 認(rèn)為是它不開放導(dǎo)致的。

    基于這個(gè)考慮,Guido 在開發(fā) Python 時(shí),不僅為其添加了很多 ABC 沒(méi)有的功能,還為其設(shè)計(jì)了各種豐富而強(qiáng)大的庫(kù),利用這些 Python 庫(kù),程序員可以把使用其它語(yǔ)言制作的各種模塊(尤其是C語(yǔ)言和 C++)很輕松地聯(lián)結(jié)在一起,因此 Python 又常被稱為“膠水”語(yǔ)言。

    這里的庫(kù)和模塊,簡(jiǎn)單理解就是一個(gè)個(gè)的源文件,每個(gè)文件中都包含可實(shí)現(xiàn)各種功能的方法(也可稱為函數(shù))。

    從整體上看,Python 語(yǔ)言最大的特點(diǎn)就是簡(jiǎn)單,該特點(diǎn)主要體現(xiàn)在以下 2 個(gè)方面:

    • Python 語(yǔ)言的語(yǔ)法非常簡(jiǎn)潔明了,即便是非軟件專業(yè)的初學(xué)者,也很容易上手。
    • 和其它編程語(yǔ)言相比,實(shí)現(xiàn)同一個(gè)功能,Python 語(yǔ)言的實(shí)現(xiàn)代碼往往是最短的。

    對(duì)于 Python,網(wǎng)絡(luò)上流傳著“人生苦短,我用 Python”的說(shuō)法。

    因此,看似 Python 是“不經(jīng)意間”開發(fā)出來(lái)的,但絲毫不比其它編程語(yǔ)言差。事實(shí)也是如此,自 1991 年 Python 第一個(gè)公開發(fā)行版問(wèn)世后:

    • 2004 年起 Python 的使用率呈線性增長(zhǎng),不斷受到編程者的歡迎和喜愛;
    • 2010 年,Python 榮膺 TIOBE 2010 年度語(yǔ)言桂冠;
    • 2017 年,IEEE Spectrum 發(fā)布的 2017 年度編程語(yǔ)言排行榜中,Python 位居第 1 位。

    直至現(xiàn)在(2019 年 12 月份),根據(jù) TIOBE 排行榜的顯示,Python 也居于第 3 位,且有繼續(xù)提升的態(tài)勢(shì)(如表 2 所示)。

    2019年12月2018年12月編程語(yǔ)言市場(chǎng)份額變化
    11Java17.253% +1.32%
    22C16.086% +1.80%
    33Python10.308% +1.93%
    44C++6.196% -1.37%
    56C#4.801% +1.35%
    65Visual Basic .NET4.743% -2.38%
    77JavaScript2.090% -0.97%
    88PHP2.048% -0.39%
    99SQL1.843% -0.34%
    1014Swift1.490% +0.27%
    1117Ruby1.314% +0.21%
    1211Delphi/Object Pascal1.280% -0.12%
    1310Objective-C1.204% -0.27%
    1412Assembly language1.067% -0.30%
    1515Go0.995% -0.19%
    1616R0.995% -0.12%
    1713MATLAB0.986% -0.30%
    1825D0.930% +0.42%
    1919Visual Basic0.929% -0.05%
    2018Perl0.899% -0.11%

    顯然,Python 已經(jīng)將 C++ 語(yǔ)言甩在了后邊,直逼 C 語(yǔ)言和 Java,而且未來(lái)有可能超越它們,成為編程語(yǔ)言排行榜冠軍。

    我們不妨再看一下 Python 歷年來(lái)的市場(chǎng)份額變化曲線,Python 的未來(lái)大勢(shì)可期。


    圖 2 Python 歷年來(lái)市場(chǎng)份額變化曲線

    錯(cuò)過(guò)了 C/C++ 的 PC 時(shí)代,又錯(cuò)過(guò)了 Java 的互聯(lián)網(wǎng)和智能手機(jī)時(shí)代,你還想錯(cuò)過(guò) Python 的人工智能和大數(shù)據(jù)時(shí)代嗎?Python 正位于軟件產(chǎn)業(yè)的第四次風(fēng)口之上,把握好風(fēng)口,你就能飛起來(lái)。

    Python的特點(diǎn)(優(yōu)點(diǎn)和缺點(diǎn))

    Python 是一種面向?qū)ο蟮摹⒔忉屝偷摹⑼ㄓ玫摹㈤_源的腳本編程語(yǔ)言,它之所以非常流行,我認(rèn)為主要有三點(diǎn)原因:

    • Python 簡(jiǎn)單易用,學(xué)習(xí)成本低,看起來(lái)非常優(yōu)雅干凈;
    • Python 標(biāo)準(zhǔn)庫(kù)和第三庫(kù)眾多,功能強(qiáng)大,既可以開發(fā)小工具,也可以開發(fā)企業(yè)級(jí)應(yīng)用;
    • Python 站在了人工智能和大數(shù)據(jù)的風(fēng)口上,站在風(fēng)口上,豬都能飛起來(lái)。

    舉個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明一下 Python 的簡(jiǎn)單。比如要實(shí)現(xiàn)某個(gè)功能,C語(yǔ)言可能需要 100 行代碼,而 Python 可能只需要幾行代碼,因?yàn)镃語(yǔ)言什么都要得從頭開始,而 Python 已經(jīng)內(nèi)置了很多常見功能,我們只需要導(dǎo)入包,然后調(diào)用一個(gè)函數(shù)即可。

    簡(jiǎn)單就是 Python 的巨大魅力之一,是它的殺手锏,用慣了 Python 再用C語(yǔ)言簡(jiǎn)直不能忍受。

    本文就來(lái)匯總一下 Python 的特性,綜合對(duì)比一下它的優(yōu)缺點(diǎn)。

    Python 的優(yōu)點(diǎn)

    1) 語(yǔ)法簡(jiǎn)單

    和傳統(tǒng)的 C/C++、Java、C# 等語(yǔ)言相比,Python 對(duì)代碼格式的要求沒(méi)有那么嚴(yán)格,這種寬松使得用戶在編寫代碼時(shí)比較舒服,不用在細(xì)枝末節(jié)上花費(fèi)太多精力。我來(lái)舉兩個(gè)典型的例子:

    • Python 不要求在每個(gè)語(yǔ)句的最后寫分號(hào),當(dāng)然寫上也沒(méi)錯(cuò);
    • 定義變量時(shí)不需要指明類型,甚至可以給同一個(gè)變量賦值不同類型的數(shù)據(jù)。

    這兩點(diǎn)也是 PHP、JavaScript、MATLAB 等常見腳本語(yǔ)言都具備的特性。

    Python 是一種代表極簡(jiǎn)主義的編程語(yǔ)言,閱讀一段排版優(yōu)美的 Python 代碼,就像在閱讀一個(gè)英文段落,非常貼近人類語(yǔ)言,所以人們常說(shuō),Python 是一種具有偽代碼特質(zhì)的編程語(yǔ)言。

    偽代碼(Pseudo Code)是一種算法描述語(yǔ)言,它介于自然語(yǔ)言和編程語(yǔ)言之間,使用偽代碼的目的是為了使被描述的算法可以容易地以任何一種編程語(yǔ)言(Pascal,C,Java,etc)實(shí)現(xiàn)。因此,偽代碼必須結(jié)構(gòu)清晰、代碼簡(jiǎn)單、可讀性好,并且類似自然語(yǔ)言。

    如果你學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu),閱讀過(guò)嚴(yán)蔚敏的書籍,那你一定知道什么是偽代碼。

    為什么說(shuō)簡(jiǎn)單就是殺手锏?一旦簡(jiǎn)單了,一件事情就會(huì)變得很純粹;我們?cè)陂_發(fā) Python 程序時(shí),可以專注于解決問(wèn)題本身,而不用顧慮語(yǔ)法的細(xì)枝末節(jié)。在簡(jiǎn)單的環(huán)境中做一件純粹的事情,那簡(jiǎn)直是一種享受。

    2) Python 是開源的

    開源,也即開放源代碼,意思是所有用戶都可以看到源代碼。

    Python 的開源體現(xiàn)在兩方面:

    ① 程序員使用 Python 編寫的代碼是開源的。

    比如我們開發(fā)了一個(gè) BBS 系統(tǒng),放在互聯(lián)網(wǎng)上讓用戶下載,那么用戶下載到的就是該系統(tǒng)的所有源代碼,并且可以隨意修改。這也是解釋型語(yǔ)言本身的特性,想要運(yùn)行程序就必須有源代碼。

    ② Python 解釋器和模塊是開源的。

    官方將 Python 解釋器和模塊的代碼開源,是希望所有 Python 用戶都參與進(jìn)來(lái),一起改進(jìn) Python 的性能,彌補(bǔ) Python 的漏洞,代碼被研究的越多就越健壯。

    這個(gè)世界上總有那么一小撮人,他們或者不慕名利,或者為了達(dá)到某種目的,會(huì)不斷地加強(qiáng)和改善 Python。千萬(wàn)不要認(rèn)為所有人都是只圖眼前利益的,總有一些精英會(huì)放長(zhǎng)線釣大魚,總有一些極客會(huì)做一些炫酷的事情。

    3) Python 是免費(fèi)的

    開源并不等于免費(fèi),開源軟件和免費(fèi)軟件是兩個(gè)概念,只不過(guò)大多數(shù)的開源軟件也是免費(fèi)軟件;Python 就是這樣一種語(yǔ)言,它既開源又免費(fèi)。

    如果你想?yún)^(qū)分開源和免費(fèi)的概念,請(qǐng)猛擊:開源就等于免費(fèi)嗎?用事實(shí)來(lái)說(shuō)話

    用戶使用 Python 進(jìn)行開發(fā)或者發(fā)布自己的程序,不需要支付任何費(fèi)用,也不用擔(dān)心版權(quán)問(wèn)題,即使作為商業(yè)用途,Python 也是免費(fèi)的。

    4) Python 是高級(jí)語(yǔ)言

    這里所說(shuō)的高級(jí),是指 Python 封裝較深,屏蔽了很多底層細(xì)節(jié),比如 Python 會(huì)自動(dòng)管理內(nèi)存(需要時(shí)自動(dòng)分配,不需要時(shí)自動(dòng)釋放)。

    高級(jí)語(yǔ)言的優(yōu)點(diǎn)是使用方便,不用顧慮細(xì)枝末節(jié);缺點(diǎn)是容易讓人淺嘗輒止,知其然不知其所以然。

    5) Python 是解釋型語(yǔ)言,能跨平臺(tái)

    解釋型語(yǔ)言一般都是跨平臺(tái)的(可移植性好),Python 也不例外,我們已經(jīng)在《編譯型語(yǔ)言和解釋型語(yǔ)言的區(qū)別》中進(jìn)行了講解,這里不再贅述。

    5) Python 是面向?qū)ο蟮木幊陶Z(yǔ)言

    面向?qū)ο笫乾F(xiàn)代編程語(yǔ)言一般都具備的特性,否則在開發(fā)中大型程序時(shí)會(huì)捉襟見肘。

    Python 支持面向?qū)ο?#xff0c;但它不強(qiáng)制使用面向?qū)ο蟆ava 是典型的面向?qū)ο蟮木幊陶Z(yǔ)言,但是它強(qiáng)制必須以類和對(duì)象的形式來(lái)組織代碼。

    6) Python 功能強(qiáng)大(模塊眾多)

    Python 的模塊眾多,基本實(shí)現(xiàn)了所有的常見的功能,從簡(jiǎn)單的字符串處理,到復(fù)雜的 3D 圖形繪制,借助 Python 模塊都可以輕松完成。

    Python 社區(qū)發(fā)展良好,除了 Python 官方提供的核心模塊,很多第三方機(jī)構(gòu)也會(huì)參與進(jìn)來(lái)開發(fā)模塊,這其中就有 Google、Facebook、Microsoft 等軟件巨頭。即使是一些小眾的功能,Python 往往也有對(duì)應(yīng)的開源模塊,甚至有可能不止一個(gè)模塊。

    7) Python 可擴(kuò)展性強(qiáng)

    Python 的可擴(kuò)展性體現(xiàn)在它的模塊,Python 具有腳本語(yǔ)言中最豐富和強(qiáng)大的類庫(kù),這些類庫(kù)覆蓋了文件 I/O、GUI、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)訪問(wèn)、文本操作等絕大部分應(yīng)用場(chǎng)景。

    這些類庫(kù)的底層代碼不一定都是 Python,還有很多 C/C++ 的身影。當(dāng)需要一段關(guān)鍵代碼運(yùn)行速度更快時(shí),就可以使用 C/C++ 語(yǔ)言實(shí)現(xiàn),然后在 Python 中調(diào)用它們。Python 能把其它語(yǔ)言“粘”在一起,所以被稱為“膠水語(yǔ)言”。

    Python 依靠其良好的擴(kuò)展性,在一定程度上彌補(bǔ)了運(yùn)行效率慢的缺點(diǎn)。

    Python 的缺點(diǎn)

    除了上面提到的各種優(yōu)點(diǎn),Python 也是有缺點(diǎn)的。

    1) 運(yùn)行速度慢

    運(yùn)行速度慢是解釋型語(yǔ)言的通病,Python 也不例外。

    Python 速度慢不僅僅是因?yàn)橐贿呥\(yùn)行一邊“翻譯”源代碼,還因?yàn)?Python 是高級(jí)語(yǔ)言,屏蔽了很多底層細(xì)節(jié)。這個(gè)代價(jià)也是很大的,Python 要多做很多工作,有些工作是很消耗資源的,比如管理內(nèi)存。

    Python 的運(yùn)行速度幾乎是最慢的,不但遠(yuǎn)遠(yuǎn)慢于 C/C++,還慢于 Java。

    但是速度慢的缺點(diǎn)往往也不會(huì)帶來(lái)什么大問(wèn)題。首先是計(jì)算機(jī)的硬件速度運(yùn)來(lái)越快,多花錢就可以堆出高性能的硬件,硬件性能的提升可以彌補(bǔ)軟件性能的不足。

    其次是有些應(yīng)用場(chǎng)景可以容忍速度慢,比如網(wǎng)站,用戶打開一個(gè)網(wǎng)頁(yè)的大部分時(shí)間是在等待網(wǎng)絡(luò)請(qǐng)求,而不是等待服務(wù)器執(zhí)行網(wǎng)頁(yè)程序。服務(wù)器花 1ms 執(zhí)行程序,和花 20ms 執(zhí)行程序,對(duì)用戶來(lái)說(shuō)是毫無(wú)感覺的,因?yàn)榫W(wǎng)絡(luò)連接時(shí)間往往需要 500ms 甚至 2000ms。

    2) 代碼加密困難

    不像編譯型語(yǔ)言的源代碼會(huì)被編譯成可執(zhí)行程序,Python 是直接運(yùn)行源代碼,因此對(duì)源代碼加密比較困難。

    開源是軟件產(chǎn)業(yè)的大趨勢(shì),傳統(tǒng)程序員需要轉(zhuǎn)變觀念。

    學(xué)Python,不需要有編程基礎(chǔ)!

    “編程零基礎(chǔ),可以學(xué)習(xí) Python 嗎”,這是很多初學(xué)者經(jīng)常問(wèn)我的一個(gè)問(wèn)題。當(dāng)然,在計(jì)算機(jī)方面的基礎(chǔ)越好,對(duì)學(xué)習(xí)任何一門新的編程語(yǔ)言越有利。但如果你在編程語(yǔ)言的學(xué)習(xí)上屬于零基礎(chǔ),也不用擔(dān)心,因?yàn)闊o(wú)論用哪門語(yǔ)言作為學(xué)習(xí)編程的入門語(yǔ)言,總是要有一個(gè)開始。

    就我個(gè)人的觀點(diǎn),Python 作為學(xué)習(xí)編程的入門語(yǔ)言是再合適不過(guò)的。凡是在大學(xué)計(jì)算機(jī)專業(yè)學(xué)習(xí)過(guò) C 語(yǔ)言的同學(xué)都感同身受,認(rèn)為 C 語(yǔ)言不是很好的入門語(yǔ)言,很多曾經(jīng)立志學(xué)習(xí)編程的讀者,在學(xué)習(xí)了 C 語(yǔ)言之后,就決心不再學(xué)習(xí)編程。因此,是否學(xué)會(huì) C 語(yǔ)言,好像成為了進(jìn)入編程行業(yè)的篩選標(biāo)準(zhǔn)。

    但是,如果將 Python 作為編程入門語(yǔ)言,就不會(huì)出現(xiàn)類似 C 語(yǔ)言的那些窘境問(wèn)題。目前,逐漸有高校開始使用 Python 作為軟件專業(yè)大學(xué)生(甚至也包含非軟件專業(yè))的入門編程語(yǔ)言。

    本教程始終貫徹的思想就是,零基礎(chǔ)也能學(xué) Python,教程的目標(biāo)就是和初學(xué)者一起,從零基礎(chǔ)開始學(xué)習(xí) Python。因此,編程零基礎(chǔ)的你,無(wú)需猶豫,盡管放膽來(lái)學(xué)。

    除此之外,很多初學(xué)者還面臨這樣一個(gè)問(wèn)題,那就是教程已經(jīng)學(xué)完啦,教程中的代碼也都已經(jīng)親自編寫并運(yùn)行通過(guò)了,但還是不知道如何開發(fā)一個(gè)真正的應(yīng)用程序,面對(duì)問(wèn)題還是不知道如何下手解決。

    如果你深有同感,只能說(shuō)明你缺乏練習(xí),代碼編輯量太少。從編程零基礎(chǔ)到專業(yè)程序員的過(guò)程,除了學(xué)習(xí)更多的基礎(chǔ)知識(shí),更要刻意地去培養(yǎng)自己的編程思維,這沒(méi)有捷徑,只有靠不斷積累自己的代碼量。

    當(dāng)然,增加代碼量并不是要我們?nèi)ッつ康鼐帉懘a,如果找不到增加代碼量的方向,可以從閱讀別人的代碼開始。需要注意的是,在閱讀他人編寫的代碼時(shí),要邊閱讀邊思考,多問(wèn)幾個(gè)為什么,例如代碼為什么要這么寫,有什么意圖,有沒(méi)有更簡(jiǎn)單的方法可以實(shí)現(xiàn)等等,必要情況下還可以給代碼進(jìn)行必要的注釋。不僅如此,在完全理解他人代碼的前提下,還可以試圖對(duì)代碼做修改,實(shí)現(xiàn)一些自己的想法。做到這些,才能說(shuō)明你將別人的代碼消化吸收了。

    初學(xué)者在寫代碼或者調(diào)試代碼的過(guò)程中,肯定會(huì)遇到很多問(wèn)題,怎么辦呢?最好的方法就是借助網(wǎng)絡(luò)尋找答案,看看類似的問(wèn)題別人是如何解決的,千萬(wàn)不要總是局限在自己的思維范圍中。在這里,給大家推薦一個(gè)專門針對(duì)編程答疑解惑的網(wǎng)站 Stack OverFlow。

    Python能干什么,Python的應(yīng)用領(lǐng)域

    Python 作為一種功能強(qiáng)大的編程語(yǔ)言,因其簡(jiǎn)單易學(xué)而受到很多開發(fā)者的青睞。那么,Python 的應(yīng)用領(lǐng)域有哪些呢?

    Python 的應(yīng)用領(lǐng)域非常廣泛,幾乎所有大中型互聯(lián)網(wǎng)企業(yè)都在使用 Python 完成各種各樣的任務(wù),例如國(guó)外的 Google、Youtube、Dropbox,國(guó)內(nèi)的百度、新浪、搜狐、騰訊、阿里、網(wǎng)易、淘寶、知乎、豆瓣、汽車之家、美團(tuán)等等。

    概括起來(lái),Python 的應(yīng)用領(lǐng)域主要有如下幾個(gè)。

    Web應(yīng)用開發(fā)

    Python 經(jīng)常被用于 Web 開發(fā),盡管目前 PHP、JS 依然是 Web 開發(fā)的主流語(yǔ)言,但 Python 上升勢(shì)頭更猛勁。尤其隨著 Python 的 Web 開發(fā)框架逐漸成熟(比如 Django、flask、TurboGears、web2py 等等),程序員可以更輕松地開發(fā)和管理復(fù)雜的 Web 程序。

    例如,通過(guò) mod_wsgi 模塊,Apache 可以運(yùn)行用 Python 編寫的 Web 程序。Python 定義了 WSGI 標(biāo)準(zhǔn)應(yīng)用接口來(lái)協(xié)調(diào) HTTP 服務(wù)器與基于 Python 的 Web 程序之間的通信。

    舉個(gè)最直觀的例子,全球最大的搜索引擎 Google,在其網(wǎng)絡(luò)搜索系統(tǒng)中就廣泛使用 Python 語(yǔ)言。另外,我們經(jīng)常訪問(wèn)的集電影、讀書、音樂(lè)于一體的豆瓣網(wǎng)(如圖 1 所示),也是使用 Python 實(shí)現(xiàn)的。


    圖 1 用 Python 實(shí)現(xiàn)的豆瓣網(wǎng)

    不僅如此,全球最大的視頻網(wǎng)站 Youtube 以及 Dropbox(一款網(wǎng)絡(luò)文件同步工具)也都是用 Python 開發(fā)的。

    自動(dòng)化運(yùn)維

    很多操作系統(tǒng)中,Python 是標(biāo)準(zhǔn)的系統(tǒng)組件,大多數(shù) Linux 發(fā)行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,可以在終端下直接運(yùn)行 Python。

    有一些 Linux 發(fā)行版的安裝器使用 Python 語(yǔ)言編寫,例如 Ubuntu 的 Ubiquity 安裝器、Red Hat Linux 和 Fedora 的 Anaconda 安裝器等等。

    另外,Python 標(biāo)準(zhǔn)庫(kù)中包含了多個(gè)可用來(lái)調(diào)用操作系統(tǒng)功能的庫(kù)。例如,通過(guò) pywin32 這個(gè)軟件包,我們能訪問(wèn) Windows 的 COM 服務(wù)以及其他 Windows API;使用 IronPython,我們能夠直接調(diào)用 .Net Framework。

    通常情況下,Python 編寫的系統(tǒng)管理腳本,無(wú)論是可讀性,還是性能、代碼重用度以及擴(kuò)展性方面,都優(yōu)于普通的 shell 腳本。

    人工智能領(lǐng)域

    人工智能是項(xiàng)目非常火的一個(gè)研究方向,如果要評(píng)選當(dāng)前最熱、工資最高的 IT 職位,那么人工智能領(lǐng)域的工程師最有話語(yǔ)權(quán)。而 Python 在人工智能領(lǐng)域內(nèi)的機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)等方面,都是主流的編程語(yǔ)言。

    可以這么說(shuō),基于大數(shù)據(jù)分析和深度學(xué)習(xí)發(fā)展而來(lái)的人工智能,其本質(zhì)上已經(jīng)無(wú)法離開 Python 的支持了,原因至少有以下幾點(diǎn):

  • 目前世界上優(yōu)秀的人工智能學(xué)習(xí)框架,比如 Google 的 TransorFlow(神經(jīng)網(wǎng)絡(luò)框架)、FaceBook 的 PyTorch(神經(jīng)網(wǎng)絡(luò)框架)以及開源社區(qū)的 Karas 神經(jīng)網(wǎng)絡(luò)庫(kù)等,都是用 Python 實(shí)現(xiàn)的;
  • 微軟的 CNTK(認(rèn)知工具包)也完全支持 Python,并且該公司開發(fā)的 VS Code,也已經(jīng)把 Python 作為第一級(jí)語(yǔ)言進(jìn)行支持。
  • Python 擅長(zhǎng)進(jìn)行科學(xué)計(jì)算和數(shù)據(jù)分析,支持各種數(shù)學(xué)運(yùn)算,可以繪制出更高質(zhì)量的 2D 和 3D 圖像。
  • VS Code 是微軟推出的一款代碼編輯工具(IDE),有關(guān)它的下載、安裝和使用,后續(xù)章節(jié)會(huì)做詳細(xì)介紹。

    總之,AI 時(shí)代的來(lái)臨,使得 Python 從眾多編程語(yǔ)言中脫穎而出,Python 作為 AI 時(shí)代頭牌語(yǔ)言的位置,基本無(wú)人可撼動(dòng)!

    網(wǎng)路爬蟲

    Python 語(yǔ)言很早就用來(lái)編寫網(wǎng)絡(luò)爬蟲。Google 等搜索引擎公司大量地使用 Python 語(yǔ)言編寫網(wǎng)絡(luò)爬蟲。

    從技術(shù)層面上將,Python 提供有很多服務(wù)于編寫網(wǎng)絡(luò)爬蟲的工具,例如 urllib、Selenium 和 BeautifulSoup 等,還提供了一個(gè)網(wǎng)絡(luò)爬蟲框架 Scrapy。

    科學(xué)計(jì)算

    自 1997 年,NASA 就大量使用 Python 進(jìn)行各種復(fù)雜的科學(xué)運(yùn)算。

    并且,和其它解釋型語(yǔ)言(如 shell、js、PHP)相比,Python 在數(shù)據(jù)分析、可視化方面有相當(dāng)完善和優(yōu)秀的庫(kù),例如 NumPy、SciPy、Matplotlib、pandas 等,這可以滿足 Python 程序員編寫科學(xué)計(jì)算程序。

    游戲開發(fā)

    很多游戲使用 C++ 編寫圖形顯示等高性能模塊,而使用 Python 或 Lua 編寫游戲的邏輯。和 Python 相比,Lua 的功能更簡(jiǎn)單,體積更小;而 Python 則支持更多的特性和數(shù)據(jù)類型。

    比如說(shuō),國(guó)際上指明的游戲 Sid Meier’s Civilization(文明,如圖 2 所示)就是使用 Python 實(shí)現(xiàn)的。


    圖 2 Python 開發(fā)的游戲

    除此之外,Python 可以直接調(diào)用 Open GL 實(shí)現(xiàn) 3D 繪制,這是高性能游戲引擎的技術(shù)基礎(chǔ)。事實(shí)上,有很多 Python 語(yǔ)言實(shí)現(xiàn)的游戲引擎,例如 Pygame、Pyglet 以及 Cocos 2d 等。

    以上也僅是介紹了 Python 應(yīng)用領(lǐng)域的“冰山一角”,例如,還可以利用 Pygame 進(jìn)行游戲編程;用 PIL 和其他的一些工具進(jìn)行圖像處理;用 PyRo 工具包進(jìn)行機(jī)器人控制編程,等等。有興趣的讀者,可自行搜索資料進(jìn)行詳細(xì)了解。

    怎樣學(xué)習(xí)Python才能成為高手?

    在學(xué)習(xí)過(guò)程中,很多小伙伴經(jīng)常抱怨,計(jì)算機(jī)編程語(yǔ)言種類太多,根本學(xué)不過(guò)來(lái),可能用了 Java 很多年,突然最近的項(xiàng)目需要用 Python,就感到不知所措,壓力山大。

    再舉個(gè)例子,Facebook 的主流語(yǔ)言是 Hack(PHP 的進(jìn)化版本),但對(duì)于剛剛?cè)肼毜墓こ處煻?#xff0c;100 個(gè)里至少有 95 個(gè)之前根本沒(méi)有用過(guò) Hack 或者 PHP。不過(guò),這些人上手都特別快,基本上只需要 1~2 周,日常編程就變得毫無(wú)壓力。

    那么,他們是怎么做到的呢?

    編程語(yǔ)言都是相通的

    首先,如果你具有一定的編程基礎(chǔ),接觸一門新的編程語(yǔ)言時(shí)會(huì)發(fā)現(xiàn),不同的編程語(yǔ)言之間其實(shí)是相通的,因?yàn)榫幊陶Z(yǔ)言本就是人類控制計(jì)算機(jī)的一系列指令,即便是不同的編程語(yǔ)言,它們?cè)谡Z(yǔ)法規(guī)則方面也大同小異。

    因此,在原有編程基礎(chǔ)上再學(xué)習(xí)一門新的編程語(yǔ)言,并沒(méi)有那么難。學(xué)習(xí)過(guò)程中,首先要做到的就是明確區(qū)別。例如,學(xué)習(xí) Python 的條件和循環(huán)語(yǔ)句時(shí),可以比對(duì) C 語(yǔ)言或者 C++ 語(yǔ)言的語(yǔ)法是怎樣的;學(xué)習(xí) Python 中的字符串相加時(shí),可以對(duì)比 Java 語(yǔ)言中字符串相加的語(yǔ)法。

    除了能夠明確區(qū)分各編程語(yǔ)言的不同點(diǎn),還要能將它們聯(lián)系起來(lái)靈活運(yùn)用。比如說(shuō),Python 語(yǔ)言的優(yōu)勢(shì)是擅長(zhǎng)數(shù)據(jù)分析,因此它廣泛應(yīng)用于人工智能(AI)、機(jī)器學(xué)習(xí)等領(lǐng)域(例如機(jī)器學(xué)習(xí)用到的 TensorFlow 框架就是用 Python 寫的),但是涉及到底層的矩陣運(yùn)算等操作時(shí),就需要依賴 C++ 語(yǔ)言,因?yàn)樗乃俣瓤?#xff0c;運(yùn)行效率更高。

    事實(shí)上,很多公司都是根據(jù)不同的需求選擇不同的編程語(yǔ)言進(jìn)行開發(fā)。畢竟,哪怕只是幾十到幾百毫秒的速度差距,對(duì)用戶體驗(yàn)來(lái)說(shuō)都是決定性的。

    Python對(duì)初學(xué)者很友好

    如果 Python 是你接觸的第一門編程語(yǔ)言,那也不必?fù)?dān)心。我們知道,雖然同為人機(jī)交互的橋梁,但 Python 比 C++、Java 等,語(yǔ)言更簡(jiǎn)潔,也更接近英語(yǔ),對(duì)初學(xué)者很友好,這也是 Python 語(yǔ)言的一個(gè)顯著特點(diǎn)。

    對(duì)于初學(xué)者來(lái)說(shuō),要做的就是專注于 Python 這一門語(yǔ)言,明確學(xué)習(xí)的重點(diǎn),把握好學(xué)習(xí)節(jié)奏,由淺入深循序漸進(jìn)地學(xué)習(xí)。根據(jù)本人多年的學(xué)習(xí)工作經(jīng)驗(yàn),把編程語(yǔ)言的學(xué)習(xí)分為以下 3 步,無(wú)論你是否有編程基礎(chǔ),都可以對(duì)照著來(lái)做。

    1) 多實(shí)踐,積累代碼量

    任何一門編程語(yǔ)言,其囊括的知識(shí)面都是非常廣泛的,從基本的變量賦值、條件循環(huán)、到文件操作、并發(fā)編程等,千萬(wàn)不要等到把所有知識(shí)點(diǎn)都學(xué)完了才開始練習(xí),因?yàn)榈侥菚r(shí)你會(huì)發(fā)現(xiàn),前面好不容易記住的知識(shí)都忘記了。

    學(xué)習(xí)編程,是十分講究實(shí)戰(zhàn)的,沒(méi)有捷徑可走,越早練習(xí),練得越多越勤,學(xué)習(xí)效果就越好。

    2) 時(shí)刻注意代碼規(guī)范

    學(xué)習(xí)編程語(yǔ)言,在追求快和高效的同時(shí),每一種編程語(yǔ)言都有必要的編碼規(guī)范,一定不能忽略。

    要想成為一名優(yōu)秀的程序員,從起步階段就要刻意地去培養(yǎng)自己的編程規(guī)范。例如,在剛開始編寫代碼時(shí),不要將原本多行的代碼全部寫到一行,也不要隨便用 a、b、c 等字母作為變量的名稱。

    3) 開發(fā)經(jīng)驗(yàn)是必不可少的

    要想真正熟練地掌握 Python(或者其它編程語(yǔ)言),擁有大中型產(chǎn)品的開發(fā)經(jīng)驗(yàn)是必不可少的,它會(huì)讓你站得更高,望得更遠(yuǎn)。

    例如,我們幾乎每天都會(huì)用搜索引擎,但你了解一個(gè)搜索引擎的服務(wù)器端實(shí)現(xiàn)嗎?這是一個(gè)典型的面向?qū)ο笤O(shè)計(jì),需要定義一系列相關(guān)的類和函數(shù),還要從產(chǎn)品需求、代碼復(fù)雜度、效率以及可讀性等多個(gè)方面綜合考量,同時(shí)在上線后還要進(jìn)行各種優(yōu)化等。

    本教程中無(wú)法讓你完成一個(gè)上億用戶級(jí)產(chǎn)品的實(shí)踐,但設(shè)置有一些小項(xiàng)目,可以幫你掌握必要的開發(fā)知識(shí)。最后,這里為你準(zhǔn)備了一章 Python 學(xué)習(xí)的知識(shí)圖譜,涵蓋了 Python 的核心知識(shí),其中的大部分內(nèi)容本教程都會(huì)做詳細(xì)講解。


    Python知識(shí)體系框架(點(diǎn)擊查看高清大圖)

    Python版本區(qū)別,Python 3和Python 2區(qū)別詳解

    和 Python 2.x 版本相比,Python 3.x 版本在語(yǔ)句輸出、編碼、運(yùn)算和異常等方面做出了一些調(diào)整,本節(jié)就對(duì)這些調(diào)整一一做一下簡(jiǎn)單介紹。

    本節(jié)適合有 Python 基礎(chǔ)的學(xué)員閱讀,初學(xué)者可先跳過(guò)本節(jié),整體學(xué)完 Python 之后,再回過(guò)頭來(lái)閱讀。

    Python 3.x print函數(shù)代替了print語(yǔ)句

    在 Python2.x 中,輸出數(shù)據(jù)使用的是 Print 語(yǔ)句,例如:

    >>> print “3,4”
    3,4
    或者
    >>> print(3,4)
    (3,4)

    但是在 Python 3.x 中,print 語(yǔ)句沒(méi)有了,取而代之的是 print 函數(shù),例如:

    >>> print(3,4)
    3 4

    如果還像 Python 2.x 中那樣使用 print 語(yǔ)句,Python 編譯器就會(huì)報(bào)錯(cuò),例如:

    >>> print “3,4”
    File “”, line 1
    print “3,4”
    ^
    SyntaxError: Missing parentheses in call to ‘print’

    Python 3.x 默認(rèn)使用 UTF-8 編碼

    相比 Python 2.x 默認(rèn)采用的 ASCII 編碼,Python 3.x 默認(rèn)使用 UTF-8 編碼,可以很好地支持中文或其它非英文字符。

    例如,輸出一句中文,使用 Python 2.x 和 Python 3.x 的區(qū)別如下:

    #Python 2.x
    >>>str =“C語(yǔ)言中文網(wǎng)”
    >>>str
    ‘C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91’

    #Python 3.x
    >>>str =“C語(yǔ)言中文網(wǎng)”
    >>>str
    ‘C語(yǔ)言中文網(wǎng)’

    不僅如此,在 Python 3.x 中,下面的代碼也是合法的:

    >>>中國(guó)=“China”
    >>>print(中國(guó))
    China

    Python 3.x 除法運(yùn)算

    和其他語(yǔ)言相比,Python 的除法運(yùn)算要高端很多,它的除法運(yùn)算包含 2 個(gè)運(yùn)算符,分別是 / 和 //,這 2 個(gè)運(yùn)算符在 Python 2.x 和 Python 3.x 的使用方法如下:

    / 運(yùn)算符

    在 Python 2.x 中,使用運(yùn)算符 / 進(jìn)行除法運(yùn)算的方式和 Java、C 語(yǔ)言類似,整數(shù)相除的結(jié)果仍是一個(gè)整數(shù),浮點(diǎn)數(shù)除法會(huì)保留小數(shù)點(diǎn)部分,例如:

    >>>1/2
    0
    >>>1.0/2
    0.5

    但是在 Python 3.x 中使用 / 運(yùn)算符,整數(shù)之間做除法運(yùn)算,結(jié)果也會(huì)是浮點(diǎn)數(shù)。例如:

    >>>1/2
    0.5

    運(yùn)算符 //

    使用運(yùn)算符 // 進(jìn)行的除法運(yùn)算叫做 floor 除法,也就是輸出不大于結(jié)果值的一個(gè)最大的整數(shù)(向下取整)。此運(yùn)算符的用法在 Python 2.x 和Python 3.x 中是一樣的,舉個(gè)例子:

    #Python 2.x
    >>> -1//2
    -1

    #Python 3.x
    >>> -1//2
    -1

    Python 3.x 異常

    在 Python 3.x 版本中,異常處理改變的地方主要在以下幾個(gè)方面:

  • 在 Python 2.x 版本中,所有類型的對(duì)象都是直接被拋出的,但是在 Python 3.x 版本中,只有繼承 BaseException 的對(duì)象才可以被拋出。
  • 在 Python 2.x 版本中,捕獲異常的語(yǔ)法是“except Exception,var:”;但在 Python 3.x 版本中,引入了 as 關(guān)鍵字,捕獲異常的語(yǔ)法變更為 “except Exception as var:”。
  • 在 Python 3.x 版本中,處理異常用 “raise Exception(args)”代替了“raise Exception,args”。
  • Python 3.x 版本中,取消了異常類的序列行為和 .message 屬性。
  • 有關(guān) Python 2.x 版本和 Python 3.x 版本處理異常的示例代碼如下所示:

    #Python 2.x
    >>> try:
    … raise TypeError,“類型錯(cuò)誤”
    … except TypeError,err:
    … print err.message

    類型錯(cuò)誤

    #Python 3.x
    >>> try:
    … raise TypeError(“類型錯(cuò)誤”)
    … except TypeError as err:
    … print(err)

    類型錯(cuò)誤

    Python 3.x 八進(jìn)制字面量表示

    在 Python 3.x 中,表示八進(jìn)制字面量的方式只有一種,并且必須寫成“0o1000”這樣的方式,原來(lái)“01000”的方式不能使用了。舉個(gè)例子:

    #Python 2.x
    >>> 0o1000
    512
    >>> 01000
    512

    #Python 3.x
    >>> 01000
    File “”, line 1
    01000
    ^
    SyntaxError: invalid token
    >>> 0o1000
    512

    Python 3.x 不等于運(yùn)算符

    Python 2.x 中的不等于運(yùn)算符有 2 種寫法,分別為 != 和 <>,但在 Python 3.x 中去掉了 <>,只有 != 這一種寫法,例如:

    #Python 2.x
    >>> 1!=2
    True
    >>> 1<>2
    True

    #Python 3.x
    >>> 1!=2
    True
    >>> 1<>2
    File “”, line 1
    1<>2
    ^
    SyntaxError: invalid syntax

    Python 3.x 數(shù)據(jù)類型

    Python 3.x 中對(duì)數(shù)據(jù)類型也做了改動(dòng),比如說(shuō):

    • Python 3.x 去除了 long 類型,現(xiàn)在只有一種整形 int,但它的行為就像是 Python 2.x 版本中的 long。

    • Python 3.x 新增了 bytes 類型,對(duì)應(yīng) Python 2.x 版本的八位串,定義 bytes 字面量的方法如下所示:

      >>>b=b’China’
      >>>type(b)
      <type ‘bytes’>

      字符串對(duì)象和 bytes 對(duì)象可以使用 .encode() 或者 .decode()方法相互轉(zhuǎn)化,例如:

      >>>s=b.decode()
      >>>s
      ‘China’
      >>>b1=s.encode()
      >>>b1
      b’China’

    • Python 3.x 中,字典的 keys()、items() 和 values() 方法用返回迭代器,且之前的 iterkeys() 等函數(shù)都被廢棄。同時(shí)去掉的還有 dict.has_key(),改為用 in 替代。

    本節(jié)所介紹的只是 Python 3.x 的一部分改動(dòng),由于篇幅有限,這里不再具體指出,教程中涉及到時(shí)再給大家詳細(xì)介紹。

    Python 2.x和Python 3.x,初學(xué)者應(yīng)如何選擇?

    Python 自發(fā)布以來(lái),主要有 3 個(gè)版本,分別是:

  • 1994 年發(fā)布的 Python 1.0 版本(已過(guò)時(shí));
  • 2000 年發(fā)布的 Python 2.0 版本,截止到 2019 年 3 月份,已經(jīng)更新到 2.7.16;
  • 2008 年發(fā)布的 Python 3.0 版本,截止到 2019 年 3 月份,已經(jīng)更新到 3.7.3;
  • 3 個(gè)版本中,Python 3.0 是一次重大的升級(jí),為了避免引入歷史包袱,Python 3.0 沒(méi)有考慮與 Python 2.x 的兼容,這也就導(dǎo)致很長(zhǎng)時(shí)間以來(lái),Python 2.x 的用戶不愿意升級(jí)到 Python 3.0。

    除此之外,造成目前這種狀況的另一個(gè)原因是,將現(xiàn)有應(yīng)用從 Python 2.x 遷移到 Python 3.x 是一項(xiàng)不小的挑戰(zhàn)。雖然有 2to3(后續(xù)會(huì)介紹)之類的工具可以進(jìn)行代碼的自動(dòng)轉(zhuǎn)換,但無(wú)法保證轉(zhuǎn)換后的代碼 100% 正確。而且,如果不做人工修改的話,轉(zhuǎn)換后的代碼性能可能還不如轉(zhuǎn)換前。因此,將現(xiàn)有的復(fù)雜代碼庫(kù)遷移到 Python 3.x 上可能需要付出巨大的精力和成本,某些公司無(wú)法負(fù)擔(dān)這些成本。

    目前,根據(jù)統(tǒng)計(jì)顯示,使用 Python 2.x 的開發(fā)者仍占 63.7%,而Python 3.x 的用戶占 36.3%,由此可見,使用 Python 2.x 的用戶還是占多數(shù)。在 2014 年,Python 創(chuàng)始人宣布,將 Python 2.7 支持時(shí)間延長(zhǎng)到 2020 。

    那么,初學(xué)者應(yīng)該選擇什么版本呢?本教程建議大家選擇 Python 3.x 版本,理由有以下幾點(diǎn):

    • 使用 Python 3.x 已經(jīng)是大勢(shì)所趨

      目前,雖然使用 Python 2.x 的開發(fā)者居多,但使用 Python 3.x 的開發(fā)者正在迅速增加,如圖 1 所示:


      圖 1 Python 3.x 是大勢(shì)所趨

      另外,根據(jù) PEP-404 這份文檔,Python 2.x 版本將不會(huì)再發(fā)布 2.8 版本,且未來(lái)非常重要的項(xiàng)目(如 Django、Flask 和 Numpy)可能都將放棄對(duì) 2.x 的支持,僅支持 Python 3.x。因此,從長(zhǎng)遠(yuǎn)來(lái)看,學(xué)習(xí) Python 3.x 只有好處。

      本教程也是以 Python 3.x 來(lái)介紹 Python 編程,因此,為了同步,強(qiáng)烈建議初學(xué)者選擇 Python 3.x。

    • Python 3.x在 Python 2.x 的基礎(chǔ)上做了功能升級(jí)
      Python 3.x 對(duì) Python 2.x 的標(biāo)準(zhǔn)庫(kù)進(jìn)行了一定程序的重新拆分和整合,比 Python 2.x 更容易理解,特別是在字符編碼方面。Python 2.x 中對(duì)于中文字符串的支持性能不夠好,需要編寫單獨(dú)的代碼對(duì)中文進(jìn)行處理,否則不能正確顯示中文,而 Python 3.x 已經(jīng)將該問(wèn)題成功解決了。

    • Python 3.x 和 Python 2.x 思想基本是共通的
      Python 3.x 和 Python 2.x 思想基本上是共通的,只有少量的語(yǔ)法差別,學(xué)會(huì)的 Python 3.x,只要稍微花點(diǎn)時(shí)間學(xué)習(xí) Python 2.x 的語(yǔ)法,即可靈活運(yùn)用這兩個(gè)不同版本了。

    注意,選擇 Python 3.x 也不是沒(méi)有弊端,很多擴(kuò)展庫(kù)的發(fā)行總是會(huì)滯后于 Python 的發(fā)行版本,甚至目前還有很多庫(kù)不支持 Python 3.x。

    因此,在選擇 Python 時(shí),一定要先考慮清楚自己的學(xué)習(xí)目的,比如說(shuō),打算做哪方面的開發(fā),此方向需要用法哪些擴(kuò)展庫(kù),以及這些擴(kuò)展庫(kù)支持的最高 Python 版本等,明確這些問(wèn)題后,再選擇適合自己的版本。

    關(guān)于 Python 3.x 和 Python 2.x 具體的區(qū)別,可閱讀《Python 3 和 Python 2 區(qū)別》一節(jié)。

    Python 2to3:自動(dòng)將Python 2.x代碼轉(zhuǎn)換成Python3.x代碼

    本節(jié)內(nèi)容針對(duì)已有 Python 基礎(chǔ)的學(xué)員,初學(xué)者可直接跳過(guò)本節(jié)內(nèi)容,繼續(xù)往下學(xué)習(xí)。

    由于 Python 2.x 和 Python 3.x 的差別較大,因此 Python 2.x 的多數(shù)代碼無(wú)法直接在 Python 3.x 環(huán)境中運(yùn)行。而由于兼容性的原因,我們?cè)诰W(wǎng)絡(luò)上查找的資源多數(shù)是Python 2.x 的代碼,如果想要在 Python 3.x 環(huán)境下運(yùn)行,就需要修改源代碼。

    針對(duì)這一問(wèn)題,Python 官方提供了一個(gè)將 Python 2.x 代碼自動(dòng)轉(zhuǎn)換為 Python 3.x 代碼的小工具,它就是 2to3.py,通過(guò)該工具可以將大部分 Python 2.x 代碼轉(zhuǎn)換為 Python 3.x 代碼。

    接下來(lái),就給大家詳細(xì)介紹一下,如何使用 2to3.py 將 Python 2.x 代碼轉(zhuǎn)換成 Python 3.x 代碼。

    假設(shè)我們現(xiàn)在有 Python 2.x 的代碼,要將其轉(zhuǎn)換成 Python 3.x 代碼,需要按照一下幾個(gè)步驟進(jìn)行操作:

  • 找到 2to3.py 文件,該文件保存在 Python 安裝路徑下的 “Tools\scripts” 目錄中。比如說(shuō),我們將 Python 安裝在了“G:\Python\Python36”目錄中,那么 2to3.py 文件則保存在 “G:\Python\Python36\Tools\scripts ”目錄中,如圖 1 所示:


    圖 1 Python 2.x 轉(zhuǎn) Python 3.x 的工具

  • 將 2to3.py 文件復(fù)制到要轉(zhuǎn)換代碼所在的目錄中。

  • 打開命令行窗口,并進(jìn)入要轉(zhuǎn)換代碼文件所在的目錄。例如,該文件保存在“E:\change”目錄下,則在命令行窗口中可輸入如下命令:

    C:\users\Demo>E:
    E:>cd change
    E:\change>

  • 調(diào)用 2to3.py 工具轉(zhuǎn)化代碼。例如,要轉(zhuǎn)化的文件名稱為 demo.py 文件,可以使用下面的代碼:

    Python 2to3.py -w demo.py

    執(zhí)行此行代碼之后,將會(huì)在 “E:\change” 目錄下創(chuàng)建一個(gè) demo.py 文件的備份文件,名稱為 demo.py.bak,同時(shí),原 demo.py 文件的內(nèi)容被轉(zhuǎn)換為 Python 3.x 對(duì)應(yīng)的代碼。

  • 注意,在使用 2to3.py 轉(zhuǎn)換 python 2.x 代碼前,盡量不要把要轉(zhuǎn)換的代碼保存在 C 盤中,因此如果保存在 C 盤,可能會(huì)因權(quán)限問(wèn)題導(dǎo)致轉(zhuǎn)換不能正常完成。

    Python PEP文檔:及時(shí)追蹤Python最新變化

    通過(guò)前面章節(jié)對(duì) Python 語(yǔ)言的介紹,到目前為止,Python 已經(jīng)歷經(jīng)了 3 個(gè)版本的迭代,讀者不禁要問(wèn),Python 為什么要不斷的升級(jí)呢?作為程序猿的我們,怎樣才能及時(shí)了解 Python 的最新變化呢?

    首先解決第一個(gè)問(wèn)題,Python 不斷升級(jí)的原因很簡(jiǎn)單,因?yàn)橛脩粲辛烁叩男枨蟆H藗冎栽O(shè)計(jì)新的編程語(yǔ)言,是因?yàn)樗麄儼l(fā)現(xiàn)現(xiàn)有的語(yǔ)言已經(jīng)無(wú)法以最佳方式來(lái)解決問(wèn)題。此外,Python 的使用范圍越來(lái)越廣,人們發(fā)現(xiàn)它有許多可以改進(jìn)的地方,應(yīng)該做出這樣的改進(jìn)。

    Python 的很多改進(jìn)都是有特定應(yīng)用領(lǐng)域的需求驅(qū)動(dòng)的,其中最重要的領(lǐng)域是 Web 開發(fā),這一領(lǐng)域需要 Python 改進(jìn)對(duì)并發(fā)的處理。

    還有一些是由于 Python 的歷史原因?qū)е碌?#xff0c;隨著使用 Python 的不斷深入,發(fā)現(xiàn)了 Python 的一些不合理之處。比如,有些是標(biāo)準(zhǔn)庫(kù)模塊結(jié)構(gòu)混亂或冗余,有些是程序設(shè)計(jì)缺陷。

    那么,怎樣才能及時(shí)追蹤 Python 的更新動(dòng)態(tài)呢?這就需要借助 Python PEP 文檔。

    Python PEP文檔

    要知道,雖然各種各樣的 Python 語(yǔ)句修改方案會(huì)以郵件列表的形式進(jìn)行討論,但 Python 社區(qū)有一種應(yīng)對(duì)變化的固定方法,即只有發(fā)布了名為 PEP 的新文檔,新的變化才會(huì)生效。

    PEP(Python Enhancement Proposal),全稱是 Python 改進(jìn)方案。它是提交 Python 變化的書面文檔,也是社區(qū)對(duì)這一變化進(jìn)行討論的出發(fā)點(diǎn)。值得一提得是,PEP 文檔的整個(gè)目的,格式以及工作流程的標(biāo)準(zhǔn)格式,都包含 PEP 1 文檔中。

    PEP 文檔對(duì) Python 十分重要,它主要有以下 3 個(gè)用途:

  • 通知:匯總 Python 核心開發(fā)者重要的信息,并通過(guò) Python 發(fā)布日程;
  • 標(biāo)準(zhǔn)化:提供代碼風(fēng)格、文檔或者其他指導(dǎo)意見;
  • 設(shè)計(jì):對(duì)提交的功能進(jìn)行說(shuō)明。
  • 所有提交過(guò)的 PEP 都被匯總在 PEP 0 文檔中。

    需要注意的是,如果讀者對(duì) Python 語(yǔ)言的未來(lái)發(fā)展方向感興趣,但苦于沒(méi)有時(shí)間追蹤 Python 郵件列表中的討論,那么 PEP 0 是信息來(lái)源的不錯(cuò)選擇,它會(huì)告訴你哪些文檔已被接受但尚未實(shí)施,哪些文檔仍在審議中。

    不僅如此,PEP 還有其他的用途,比如說(shuō),人們常常會(huì)問(wèn)以下類似的問(wèn)題:

    • A 功能為什么要以這樣的方式運(yùn)行?
    • Python 為什么沒(méi)有 B 功能?

    多數(shù)情況下,關(guān)于該功能的某個(gè) PEP 文檔已經(jīng)給出了上述問(wèn)題的詳細(xì)回答。

    另外,還有關(guān)于 Python 語(yǔ)言功能的 PEP 文檔并沒(méi)有通過(guò),這些文檔可作為歷史資料來(lái)參考。

    Python底層是用什么語(yǔ)言實(shí)現(xiàn)的?

    確切地說(shuō),本教程介紹的是用 C 語(yǔ)言編寫實(shí)現(xiàn)的 Python,又稱為 CPython。平時(shí)我們所討論的 Python,指的其實(shí)就是 CPython。

    隨著編程語(yǔ)言的不斷發(fā)展,Python 的實(shí)現(xiàn)方式也發(fā)生了變化,除了用 C 語(yǔ)言實(shí)現(xiàn)外,Python 還有其他的實(shí)現(xiàn)方式。例如,用 Java 語(yǔ)言實(shí)現(xiàn)的 Python 稱為 JPython,用 .net 實(shí)現(xiàn)的 Python 稱為 IronPython 等等。

    Python 的這些實(shí)現(xiàn)方式雖然誕生比 CPython 晚,但一直在努力地跟上主流,并在不同的生產(chǎn)環(huán)境中不斷地使用并推廣 Python。

    Python 的實(shí)現(xiàn)方式有很多種,Python 官網(wǎng)上介紹了 20 多種語(yǔ)言變體、方言或 C 語(yǔ)言之外的 Python 解釋器實(shí)現(xiàn)。其中一些只是實(shí)現(xiàn)了語(yǔ)言核心語(yǔ)法、功能和內(nèi)置擴(kuò)展的一個(gè)子集,但至少有幾個(gè)與 CPython 幾乎完全兼容。更重要的是,在這些不同的實(shí)現(xiàn)方式中,雖然有些只是玩具項(xiàng)目或?qū)嶒?yàn),但大部分都是為了解決某些實(shí)際問(wèn)題而創(chuàng)建的,這些問(wèn)題要么使用 CPython 無(wú)法解決,要么需要開發(fā)人員花費(fèi)巨大的精力,這里舉幾個(gè)例子:

    • 在嵌入式系統(tǒng)中運(yùn)行 Python 代碼。
    • 與運(yùn)行框架(如 Java 或 .NET)或其他語(yǔ)言做代碼集成。
    • 在 Web 瀏覽器中運(yùn)行 Python 代碼。

    由于受到篇幅的限制,本節(jié)僅給大家介紹幾種 Python 開發(fā)人員最常用的幾種 Python 實(shí)現(xiàn)方式。

    Stackless Python

    Stackless Python 自稱 Python 增強(qiáng)版。之所以名為 Stackless(無(wú)棧),是因?yàn)樗鼪](méi)有依賴 C 語(yǔ)言的調(diào)用棧,實(shí)際上就是對(duì) CPython 做了一些修改,添加了一些新的功能。

    在新添加的功能中,最重要就是由解釋器管理的微線程,用來(lái)替代依賴系統(tǒng)內(nèi)核上下文切換和任務(wù)調(diào)度的普通線程,既輕量化又節(jié)約資源。

    Stackless Python 最新可用的版本是 2.7.9 和 3.3.5,分別實(shí)現(xiàn)的是 Python 2.7 和 3.3。在 Stackless Python 中,所有的額外功能都是內(nèi)置 stackless 模塊內(nèi)的框架。

    Stackless Python 并不是最有名的 Python 實(shí)現(xiàn),但很值得一提,因?yàn)樗氲乃枷雽?duì)編程語(yǔ)言社區(qū)有很大的影響。例如,將 Stackless Python 中的內(nèi)核切換功能提取出來(lái)并作為一個(gè)獨(dú)立包發(fā)布,名為 greenlet,是許多有用的庫(kù)和框架的基礎(chǔ)。

    此外,Stackless Python 的大部分功能都在 PyPy 中重新實(shí)現(xiàn),PyPy 是另一個(gè) Python 實(shí)現(xiàn),我們將稍后介紹。

    JPython

    Jython 是 Python 語(yǔ)言的 Java 實(shí)現(xiàn)。它將代碼編譯為 Java 字節(jié)代碼,開發(fā)人員在 Python 模塊中可以無(wú)縫使用 Java 類。

    Jython 允許人們?cè)趶?fù)雜應(yīng)用系統(tǒng)(例如 J2EE)中使用 Python 作為頂層腳本語(yǔ)言,它還將 Java 應(yīng)用引入到 Python 中,一個(gè)很好的例子就是,在 Python 程序中可以使用 Apache Jackrabbit(這是一個(gè)基于 JCR 的文檔倉(cāng)庫(kù) API)。

    Jython 最新可用的版本是 Jython 2.7,對(duì)應(yīng)的是 Python 2.7 版。它宣稱幾乎實(shí)現(xiàn)了 Python 所有的核心標(biāo)準(zhǔn)庫(kù),并使用相同的回歸測(cè)試套件。Jython 3.x 版正在開發(fā)中。

    Jython 與 CPython 實(shí)現(xiàn)的主要區(qū)別如下所示:

    • 真正的 Java 垃圾回收,而不是引用計(jì)數(shù)。
    • 沒(méi)有全局解釋器鎖(GlobakInterpreter Lock,GIL),在多線程應(yīng)用中可以充分利用多個(gè)內(nèi)核。

    這一語(yǔ)言實(shí)現(xiàn)的主要缺點(diǎn)是缺少對(duì) C/Python 擴(kuò)展 API 的支持,因此用 C 語(yǔ)言編寫的 Python 擴(kuò)展在 Jython 中無(wú)法運(yùn)行。這種情況未來(lái)可能會(huì)發(fā)生改變,因?yàn)?Jython 3.x 計(jì)劃支持 C/Python 擴(kuò)展 API。

    某些 Python Web 框架(例如 Pylons)被認(rèn)為是促進(jìn) Jython 的開發(fā),使其可用于 Java 世界。

    IronPython

    IronPython 將 Python 引入 .NET 框架中,這個(gè)項(xiàng)目受到微軟的支持,因?yàn)?IronPython 的主要開發(fā)人員都在微軟工作。可以這么說(shuō),IronPython 是推廣語(yǔ)言的一種重要實(shí)現(xiàn)。

    除了 Java,.NET社區(qū)是最大的開發(fā)者社區(qū)之一。

    值得一提的是,微軟提供了一套免費(fèi)開發(fā)工具,名為 PTVS(Python Tools for Visual Studio,用于Visual Studio 的 Python 工具),可以將 Visual Studio 轉(zhuǎn)換為成熟的 Python IDE。這是作為 Visual Studio 的插件發(fā)布的,在 GitHub 可以找到其開源代碼。

    IronPython 最新的穩(wěn)定版本是 2.7.5,與 Python 2.7 兼容。與 Jython 類似,Python 3.x 的實(shí)現(xiàn)也在開發(fā)中,但還沒(méi)有可用的穩(wěn)定版本。

    雖然 .NET 主要在微軟 Windows 系統(tǒng)上運(yùn)行,但是 IronPython 也可以在 Mac OS X 和 Linux 系統(tǒng)上運(yùn)行,這一點(diǎn)要感謝 Mono,一個(gè)跨平臺(tái)的開源 .NET 實(shí)現(xiàn)。

    與 CPython 相比,IronPython 的主要區(qū)別或優(yōu)點(diǎn)如下:

    • 與 Jython 類似,沒(méi)有全局解釋器鎖(Global Interpreter Lock,GIL),在多線程應(yīng)用中可以充分利用多個(gè)內(nèi)核。
    • 用 C# 和其他 .NET 語(yǔ)言編寫的代碼可以輕松集成到 IronPython 中,反之亦然。
    • 通過(guò) Silverlight,在所有主流 Web 瀏覽器中都可以運(yùn)行。

    說(shuō)到弱點(diǎn),IronPython 也與 Jython 非常類似,因?yàn)樗膊恢С?C/Python 擴(kuò)展 API。對(duì)于想要使用主要基于 C 擴(kuò)展的 Python 包(例如 NumPy)的開發(fā)人員來(lái)說(shuō),這一點(diǎn)很重要。

    有一個(gè)叫作 ironclad 的項(xiàng)目,其目的是在 IronPython 中無(wú)縫使用這些擴(kuò)展,其最新支持的版本是2.6,開發(fā)已經(jīng)停止。

    PyPy

    PyPy 可能是最令人興奮的 Python 實(shí)現(xiàn),因?yàn)槠淠繕?biāo)就是將 Python 重寫為 Python。在 PyPy 中,Python 解釋器本身是用 Python 編寫的。

    在 Python 的 CPython 實(shí)現(xiàn)中,有一個(gè) C 代碼層來(lái)實(shí)現(xiàn)具體細(xì)節(jié)。但在 PyPy 實(shí)現(xiàn)中,這個(gè) C 代碼層用 Python 完全重寫。這樣,你可以在代碼運(yùn)行期間改變解釋器的行為,并實(shí)現(xiàn) CPython 難以實(shí)現(xiàn)的代碼模式。

    目前 PyPy 的目的是與 Python 2.7 完全兼容,而 PyPy3 則與 Python 3.2.5 版兼容。

    以前對(duì) PyPy 感興趣主要是理論上的原因,只有喜歡深入鉆研語(yǔ)言細(xì)節(jié)的人才會(huì)對(duì)它感興趣。PyPy 通常不用于生產(chǎn)環(huán)境,但這些年來(lái)這種狀況己經(jīng)發(fā)生改變,PyPy 通常比 CPython 實(shí)現(xiàn)要快得多。基于這一特性,使得越來(lái)越多的開發(fā)人員決定在生產(chǎn)環(huán)境中切換到 PyPy。

    PyPy 與 CPython 實(shí)現(xiàn)的主要區(qū)別在于以下幾個(gè)方面:

    • 使用垃圾回收,而不是引用計(jì)數(shù)。
    • 集成跟蹤 JIT 編譯器,可以顯著提高性能。
    • 借鑒 Stackless Python 在應(yīng)用層的無(wú)棧特性。

    與幾乎所有其他的 Python 實(shí)現(xiàn)類似,PyPy 也缺乏對(duì) C/Python 擴(kuò)展 API 的完全官方支持。但它至少通過(guò) CPyExt 子系統(tǒng)為 C 擴(kuò)展提供了某種程度的支持,雖然文檔不完整,功能也尚未完善。此外,社區(qū)正在努力將 NumPy 遷移到 PyPy 中,因?yàn)檫@是最需要的功能。

    了解Jupyter Notebook,你已然超越了90%的Python程序員

    在 2019年 8 月份 TOIBE 編程語(yǔ)言社區(qū)公布的編程語(yǔ)言排行榜中,Python 已經(jīng)超過(guò)了 C++,穩(wěn)居排行榜第 3 名(如圖 1 所示)。


    圖 1 TOIBE 編程社區(qū)排行榜

    我們應(yīng)該知道,Python 之所有在 14 年后“崛起”,得益于機(jī)器學(xué)習(xí)和數(shù)學(xué)統(tǒng)計(jì)應(yīng)用的興起。至于 Python 適合數(shù)學(xué)統(tǒng)計(jì)和機(jī)器學(xué)習(xí)的原因,很多讀者可能并不會(huì)想到,Jupyter Notebook 功不可沒(méi)。可以好不夸張地說(shuō),作為一名 Python 工程師,如果不會(huì)使用 Jupyter Notebook,可能會(huì)真的太落伍了。

    本節(jié),就帶領(lǐng)大家學(xué)習(xí)一下 Jupyter Notebook。

    什么是Jupyter Notebook

    說(shuō)了這么多,到底什么是 Jupyter Notebook 呢?按照 Jupyter 創(chuàng)始人的說(shuō)法,起初他是想做一個(gè)綜合 Ju(Julia)、Py(Python)和 R 三種科學(xué)運(yùn)行語(yǔ)言的計(jì)算工具平臺(tái),所以將其命名為 Jupyter。

    Jupyter 發(fā)展到現(xiàn)在,已經(jīng)成為了一個(gè)幾乎支持所有語(yǔ)言,能夠把軟件代碼、計(jì)算輸出、解釋文檔、多媒體資源整合在一起的多功能科學(xué)運(yùn)行平臺(tái)。Jupyter Notebook 的工作界面如圖 2 所示。


    圖 2 Jupyter Notebook界面(點(diǎn)此查看高清大圖)

    如圖 2 所示,只要直接輸入代碼并運(yùn)行,它就會(huì)直接在代碼下面顯示輸出結(jié)果。那么,Jupyter Notebook 對(duì) Python 的影響真的有那么大嗎?

    Jupyter Notebook的影響力

    衡量一個(gè)技術(shù)的影響力,或者說(shuō)想利用自己的技術(shù)影響世界時(shí),必定繞不開技術(shù)對(duì)教育界的影響力。

    以微軟的 Word 文本處理系統(tǒng)為例,從純技術(shù)角度來(lái)講,它的單機(jī)設(shè)計(jì)理念早已過(guò)時(shí),但以 Google Doc 為代表的在線文檔系統(tǒng),并沒(méi)有想象中實(shí)現(xiàn)對(duì) Word 的降維打擊。最直接的原因歸咎于用戶習(xí)慣,多數(shù)用戶已經(jīng)習(xí)慣使用 Word 來(lái)編輯、修改文檔啦,之所以會(huì)這樣,是因?yàn)槲覀儚男W(xué)、中學(xué),一直到大學(xué)期間,都在學(xué)習(xí)使用 Word。而且到了工作中,老員工還會(huì)帶著新員工繼續(xù)使用 Word。

    從 2017 年開始,已經(jīng)有大量的北美頂尖計(jì)算機(jī)課程開始使用 Jupyter Notebook 作為教學(xué)工具,而在這之前,一直使用的都是 Python 命令行的形式。不僅如此,Jupyter Notebook 在工業(yè)界的影響力更大。

    例如,在 Facebook 中,幾乎所有的中小型程序(比如內(nèi)部的線下分析軟件,機(jī)器學(xué)習(xí)模塊的訓(xùn)練等)都是借助與Jupyter Notebook完成。同時(shí),在硅谷其他的一線大廠中,也全部使用 Jupyter Notebook(他們用的是改進(jìn)定制型的Jupyter Notebook,名稱 Google Colab)。

    了解了以上這些,相信你已經(jīng)認(rèn)可了 Jupyter Notebook 的江湖地位。

    但需要注意的是,不是說(shuō)那個(gè)技術(shù)流行,就盲目跟從。對(duì)于技術(shù)的選擇,要學(xué)習(xí)獨(dú)立的思考,切勿人云亦云。以 Facebook 為例,之所以它選擇 Jupyter Notebook 等技術(shù),很大程序上因?yàn)樗袔装賯€(gè)產(chǎn)品線,幾萬(wàn)個(gè)工程師,而如果是幾個(gè)人的團(tuán)隊(duì),使用同樣的技術(shù)反倒成了拖累。

    Jupyter Notebook的優(yōu)勢(shì)

    這里給大家總結(jié)了幾點(diǎn) Jupyter Notebook 的優(yōu)勢(shì):

    1) 整合了所有資源

    在軟件開發(fā)過(guò)程中,頻繁地進(jìn)行上下文切換,會(huì)影響生產(chǎn)效率。舉個(gè)例子,假設(shè)你需要切換窗口去看一些文檔,再切換窗口去用另一個(gè)工具畫圖,不斷地切換窗口就會(huì)成為影響效率的因素。

    而 Jupyter Notebook 則不同,它會(huì)將所有和軟件編寫的資源全部放在一個(gè)地方,無(wú)需切換窗口就可以輕松找到。

    2) 交互性編程體驗(yàn)

    在機(jī)器學(xué)習(xí)和數(shù)據(jù)統(tǒng)計(jì)領(lǐng)域,Python 編程的實(shí)驗(yàn)性特別強(qiáng),比如為了測(cè)試 100 種不同的方法,有時(shí)就需要將一小塊代碼重寫 100 遍,在這種情況下,如果使用傳統(tǒng)的 Python 開發(fā)流程,每一次測(cè)試都要將所有代碼重新跑一遍,會(huì)花費(fèi)開發(fā)者很多時(shí)間。

    Jupyter Notebook 引進(jìn)了 Cell 的概念。每次測(cè)試可以只跑一小塊的代碼,并且在代碼下方立刻就能看到運(yùn)行結(jié)果。

    如此強(qiáng)的交互性,滿足了 Python 程序員可以專注于問(wèn)題本身,不會(huì)被頻繁的工具鏈拖累,也不用在命令行之間來(lái)回切換,所有工作都能在 Jupyter Notebook 上完成。

    3) 輕松運(yùn)行他人編寫的代碼

    同樣是在機(jī)器學(xué)習(xí)和數(shù)學(xué)統(tǒng)計(jì)領(lǐng)域,我們可能會(huì)借鑒他人分享的代碼,但當(dāng)我們拷貝過(guò)來(lái)想要運(yùn)行時(shí),卻需要使用 pip 安裝一大堆依賴的庫(kù),足以讓人抓狂。而 Jupyter Notebook 就可以解決這個(gè)問(wèn)題。

    例如,Jupyter 官方的 Binder 平臺(tái)以及 Google 提供的 Google Colab 環(huán)境,它們可以讓 Jupyter Notebook 變得和 Google Doc 在線文檔一樣。比如用 Binder 打開一份 GitHub 上的 Jupyter Notebook 時(shí),就不需要安裝任何 Python 庫(kù),直接在打開代碼就能運(yùn)行。

    本節(jié),僅是為了讓初學(xué)者對(duì) Jupyter Notebook 有一個(gè)初步的了解,具體 Jupyter Notebook 的安裝和使用,網(wǎng)絡(luò)上有很多詳細(xì)的教程,這里不再做過(guò)多描述。

    注意,本教程仍舊使用 Python 內(nèi)置的 IDLE 作為教學(xué)工具。

    總結(jié)

    以上是生活随笔為你收集整理的【Python学习教程】Python编程基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

    四虎影视成人精品国库在线观看 | 国产又黄又爽又猛视频日本 | 久久综合精品国产一区二区三区 | 国产视频在线观看一区 | 99国产情侣在线播放 | 91在线视频免费播放 | 国产精品久久久久永久免费 | 天天干,狠狠干 | 九色91av| 蜜桃传媒一区二区 | 日韩小视频 | 四虎在线免费视频 | 麻花豆传媒一二三产区 | 又黄又爽的免费高潮视频 | 国产日韩在线看 | 日韩欧美国产精品 | 午夜精品视频一区二区三区在线看 | 国产精品1区 | 国产视频资源 | 亚洲黄色网络 | 色视频在线免费观看 | 国产高清视频在线免费观看 | 久久综合久色欧美综合狠狠 | 探花视频免费观看 | 国产精品久久久 | 97电影在线观看 | 国产精品大片在线观看 | 看片的网址 | 成 人 黄 色 视频播放1 | 婷香五月 | 色综合亚洲精品激情狠狠 | 色婷婷综合在线 | 三级黄色网络 | 久久久精品福利视频 | 久久国产剧场电影 | 欧美xxxx性xxxxx高清 | 亚洲激情婷婷 | 中文字幕美女免费在线 | 成人午夜电影久久影院 | 夜夜澡人模人人添人人看 | 在线观看国产麻豆 | av一级免费| 中文在线天堂资源 | 91刺激视频 | 人人干,人人爽 | 国产福利精品视频 | 高清国产一区 | 五月婷婷在线综合 | 久久成人黄色 | 久草久草在线观看 | 天天综合导航 | 91 中文字幕 | 午夜婷婷在线播放 | 久久尤物电影视频在线观看 | 国产综合精品久久 | 亚洲在线a| 天堂网一区 | 三级黄色在线观看 | 狠狠干成人综合网 | 国产成人精品亚洲 | 成人亚洲网 | 亚洲高清免费在线 | 91九色porn在线资源 | 91精品视频在线 | 国产中文字幕在线视频 | 久久久久久免费毛片精品 | 天天操比 | 国产小视频在线 | 亚洲激情在线观看 | 免费视频久久久 | 日本性久久 | 国产精品久久久久久久久久三级 | 成人免费一区二区三区在线观看 | 国产女人40精品一区毛片视频 | 青青河边草免费观看 | 91网址在线 | 欧美淫视频 | 国产在线自 | 久久精品国产一区二区三区 | 在线免费91 | 美女视频黄网站 | 国产色女人 | 黄色精品久久 | 免费亚洲片 | 日韩久久一区二区 | 日韩免费在线观看 | 国产精品久久久久久久99 | 色婷婷六月天 | 丁香激情综合国产 | 久草在线最新 | 天天爱天天操天天干 | 亚洲精品视频在线免费 | 国产视频久 | 美女网站一区 | 三级av免费看 | 久久国产精彩视频 | 日韩在线视频二区 | 久久精品国产亚洲a | 亚洲精品中文字幕在线 | 91精品在线免费观看视频 | 又黄又爽又刺激视频 | 成人影片在线播放 | 狠狠色综合欧美激情 | 欧美一二三视频 | 91精品欧美一区二区三区 | 欧美与欧洲交xxxx免费观看 | 久久精品女人毛片国产 | 久久激情小视频 | 色久网 | 国产精品自产拍在线观看网站 | 最近中文字幕高清字幕在线视频 | 亚洲国产精品久久 | 国产高清成人在线 | 日韩在线国产精品 | 天天干天天怕 | 国产精品一区在线 | 亚洲精品国精品久久99热 | 天天干天天搞天天射 | 日韩一级电影在线 | 亚洲伊人天堂 | 超碰在线99 | 国产精品毛片一区二区在线 | 中文字幕免费一区二区 | 精品久久久久免费极品大片 | 免费国产一区二区视频 | 国产97视频| 久久久久久久久福利 | 亚洲丁香久久久 | 亚洲九九爱 | 国产一区二区免费看 | 国产精品一区二区三区在线免费观看 | 黄网站色视频免费观看 | 国产中文在线观看 | a黄色影院 | 免费久久99精品国产婷婷六月 | 久草网在线观看 | 国产一级在线视频 | 色五婷婷 | 免费看一级片 | 日韩大片免费观看 | 亚洲视频资源在线 | 亚洲最新av在线 | 亚洲国内精品视频 | 国产美女网 | 国产一区二区三区免费在线观看 | 精品久久久久久久久久久久久久久久久久 | 五月婷婷黄色网 | 免费av在线网 | 日韩精品一区不卡 | 久久久www成人免费精品 | 热久久免费视频 | 欧美先锋影音 | 久草精品视频在线看网站免费 | 在线之家免费在线观看电影 | 4438全国亚洲精品在线观看视频 | 在线亚洲人成电影网站色www | 日韩成人黄色av | 亚洲视频资源在线 | 欧美夫妻性生活电影 | 免费久久99精品国产婷婷六月 | 国产伦精品一区二区三区四区视频 | 日韩二区在线 | 奇米影视在线99精品 | 99热99re6国产在线播放 | caobi视频| av免费在线观看1 | 日韩精品综合在线 | 欧美黄色成人 | 国产精品电影一区二区 | 国产精品久久久久久久久蜜臀 | 免费合欢视频成人app | 99国产情侣在线播放 | 狠狠插狠狠操 | 一色av | 国产成人av电影在线观看 | 久久久免费观看完整版 | 黄色毛片一级片 | 黄色毛片网站在线观看 | 国产特黄色片 | 黄色av一区 | 91网址在线 | 国产精品美女久久久免费 | 黄色一级动作片 | 国产精品电影一区二区 | 一级黄色大片在线观看 | 欧美男同视频网站 | 欧美一级在线看 | 97超碰人人澡人人爱学生 | 五月婷婷综合在线观看 | 免费高清国产 | 国产午夜一级毛片 | 久久草在线精品 | 99精品国产高清在线观看 | 欧美地下肉体性派对 | 精品日韩在线 | 久久久一本精品99久久精品66 | 精品亚洲网 | 91亚瑟视频| 亚洲午夜久久久久久久久 | 精品国产精品久久 | 97国产精品| 国产99久久久国产精品免费二区 | 人人讲| 丁香婷婷激情国产高清秒播 | 国产精品18久久久久久久久 | 日韩av一区二区在线播放 | 亚洲午夜久久久久久久久 | 日韩在线视频看看 | 国产免费视频在线 | 在线观看国产www | 97国产人人 | 久久免费精品一区二区三区 | 久久久精品国产免费观看一区二区 | 奇米影视8888在线观看大全免费 | 日韩综合一区二区三区 | 亚洲综合小说电影qvod | 免费视频国产 | 天天弄天天干 | 夜添久久精品亚洲国产精品 | 日韩精品视频免费在线观看 | 手机在线看片日韩 | 日韩啪啪小视频 | 91免费的视频在线播放 | 狠狠干狠狠色 | 美女视频免费精品 | 激情网五月婷婷 | 亚洲国产小视频在线观看 | 国产视频资源在线观看 | 久草电影免费在线观看 | 狠狠亚洲 | 国产在线不卡精品 | 欧美一区日韩精品 | 亚洲精品视频在线播放 | 91激情视频在线观看 | 日韩3区| 免费看片色 | 久久精品国亚洲 | 99精品一区 | 亚洲视频在线观看网站 | 国产精品美女视频网站 | japanesefreesexvideo高潮 | 国产高清在线一区 | 欧美孕妇与黑人孕交 | 91尤物在线播放 | 97精品一区二区三区 | 国产精品视频全国免费观看 | 国产淫片| 91视频91色 | 午夜视频在线观看一区二区三区 | 一区二区三区四区五区在线视频 | 国产成人精品久久亚洲高清不卡 | 日韩在线精品 | 人人插人人澡 | www.天天操.com | 亚洲国产精品va在线看黑人 | 亚洲少妇自拍 | 91免费在线看片 | 欧美韩国日本在线 | 97超碰人人澡人人爱学生 | 丰满少妇久久久 | 一区二区三区电影在线播 | 中文字幕视频免费观看 | 美女国产 | 欧美精品乱码99久久影院 | 色爱区综合激月婷婷 | 97超碰超碰 | 国产黑丝一区二区 | 成人网页在线免费观看 | 欧美日韩国产精品久久 | 成人av久久| 日韩欧美中文 | 超碰97久久 | 91精品一区二区在线观看 | 久久福利国产 | 91国内产香蕉| 国产人在线成免费视频 | 美女视频a美女大全免费下载蜜臀 | 国产精品激情在线观看 | 国产h在线播放 | 亚洲成人xxx| 国产日产精品一区二区三区四区的观看方式 | 在线免费高清视频 | 黄色av网站在线免费观看 | 日日干美女| 久久精品国产免费 | 91亚洲欧美激情 | 久久免费99 | 97人人视频 | 欧美日韩xxxxx | 日韩一区二区三区在线观看 | 久久久久女教师免费一区 | 精品亚洲视频在线观看 | 国产99自拍 | av电影在线观看完整版一区二区 | 亚洲精品一区二区在线观看 | 中文字幕在线日 | 免费观看黄色12片一级视频 | 欧美日韩另类视频 | 国产精品黄色在线观看 | 久久久久女人精品毛片九一 | 国产精品一区久久久久 | 精品1区二区 | 亚洲91精品在线观看 | 午夜黄色一级片 | 81精品国产乱码久久久久久 | 国产精品一区二区免费在线观看 | 超碰在线人人艹 | 国产在线97 | 成人在线播放网站 | 一区二区三区免费网站 | 9999激情 | 久久精品免费看 | 天天综合操 | 国产色视频网站 | 在线观看成人 | 国产欧美久久久精品影院 | 久精品视频免费观看2 | 高清不卡毛片 | 国产精品av在线免费观看 | 日韩国产在线观看 | 日韩高清在线一区 | 日本久久成人中文字幕电影 | 久艹视频免费观看 | 国产黄a三级三级三级三级三级 | 在线亚洲午夜片av大片 | 草久视频在线 | 国产理论免费 | 成年人视频免费在线播放 | 国产精品9999 | 在线视频a | 五月天色综合 | 久久视频免费在线 | 伊人精品在线 | 午夜的福利 | 99精品视频免费观看视频 | 69视频在线| 国产精品久久久久久久久久久不卡 | 99热这里只有精品1 av中文字幕日韩 | 国产免费av一区二区三区 | 91成人在线视频观看 | 一区三区视频在线观看 | 91av在线免费 | 很黄很污的视频网站 | 久久区二区 | 国产破处在线视频 | 国产精久久 | 欧美做受69 | 久久国产成人午夜av影院潦草 | 日韩影视在线 | 中国美女一级看片 | 一区二区三区高清 | 久久久国产精品一区二区三区 | 丁香婷婷射 | 国产成人亚洲在线观看 | 亚洲少妇久久 | 国产黄色精品视频 | 国产精品入口66mio女同 | 最新国产精品拍自在线播放 | 久久免费播放视频 | 日日操天天射 | 在线观看亚洲精品 | 国产精品久久久久永久免费 | 91麻豆文化传媒在线观看 | 黄色成人在线 | 精品久久久久久亚洲综合网站 | 999久久久精品视频 日韩高清www | 国产精品免费一区二区三区 | 中文字幕中文字幕中文字幕 | 欧美色图另类 | 中文字幕国产 | 一区二区三区 中文字幕 | 亚洲综合激情小说 | 黄色小视频在线观看免费 | 国产97在线视频 | 亚洲精品国久久99热 | 波多野结衣久久精品 | 天天色中文 | 久久久91精品国产一区二区三区 | 中文字幕av最新更新 | 在线黄网站 | 99精品免费久久久久久日本 | 99精品免费视频 | 在线视频app| 国产精品一区二区果冻传媒 | 国产在线看一区 | 97综合视频 | 玖玖爱免费视频 | 色综合久久88色综合天天 | 亚洲欧洲在线视频 | 国内精品在线观看视频 | av黄色av| 国内久久看| 国产美女久久 | 国产成人精品亚洲日本在线观看 | 日韩中文字幕a | 国产成人一区二区啪在线观看 | 精品你懂的 | 96精品视频 | 911亚洲精品第一 | 欧美综合干 | 国产剧情久久 | 欧美性粗大hdvideo | 插久久| 国产精品久久久久免费观看 | 69国产精品成人在线播放 | 久久视频精品在线 | 亚洲成人av一区 | 香蕉视频导航 | 亚洲黄色小说网址 | 免费成人看片 | 久久久国产电影 | 午夜久久美女 | 伊人手机在线 | 国产精品久久精品国产 | 亚洲人人射 | 青青河边草免费视频 | 99久高清在线观看视频99精品热在线观看视频 | 国产亚洲免费的视频看 | 91资源在线观看 | 中国精品少妇 | av电影免费在线看 | 国产999精品久久久影片官网 | 中文字幕视频在线播放 | 网站免费黄 | 亚洲天堂网在线视频 | 中文字幕在线视频免费播放 | 91在线视频观看免费 | 黄色国产高清 | 在线看国产一区 | 国产精品久久久久久久久岛 | 国产一区在线播放 | 成人av午夜 | 中文av影院 | 久久久亚洲麻豆日韩精品一区三区 | 午夜精品久久久久久久99热影院 | 热久在线 | 久久免费视屏 | 中文字幕在线免费观看 | 日韩videos | 久久夜夜夜 | 9ⅰ精品久久久久久久久中文字幕 | 91av在线视频免费观看 | 国产99久久久国产精品免费二区 | 在线观看免费av片 | 一级成人在线 | 久久精品视频日本 | 九热在线 | 国产精品av免费 | 亚洲精品小视频在线观看 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 午夜免费福利视频 | 久久再线视频 | 超碰公开在线 | 99视频在线观看免费 | 亚洲一区视频免费观看 | 男女激情麻豆 | 国产第一页精品 | 国产97视频在线 | 美女视频是黄的免费观看 | 日韩精品中文字幕在线观看 | 国产日韩视频在线 | 久久综合国产伦精品免费 | 91精品啪| 精品自拍网 | 欧美一区二区三区激情视频 | 国产精品久久久久婷婷 | 色婷婷一区 | 天天干天天射天天操 | 久久久久欧美精品 | 日韩视频在线观看免费 | 深爱激情五月综合 | 国产日韩精品一区二区 | 天天干天天操av | 日批视频在线播放 | 欧美日韩国产伦理 | 中文字幕第一页在线 | 在线观看亚洲国产 | 国产精品爽爽久久久久久蜜臀 | 激情欧美日韩一区二区 | 久久免费公开视频 | 在线观看视频免费大全 | 亚洲 欧美 另类人妖 | 亚洲精品黄 | 日韩午夜一级片 | 久久精品一区二区三 | 免费激情网 | 久久国产成人午夜av影院宅 | 91看片一区二区三区 | 国产毛片久久 | 午夜久久久精品 | 久久精品国产久精国产 | 亚洲欧美偷拍另类 | 国产精品视频999 | 亚洲 欧美 91| 国产毛片aaa | 中文字幕色在线 | 人人爽人人av | 区一区二在线 | 99视频精品在线 | 日本久久不卡视频 | 日日干美女 | 亚洲国产成人在线播放 | av在线网站观看 | 久久看免费视频 | 亚洲中字幕 | 国产短视频在线播放 | 手机av在线不卡 | 久草在线视频网站 | 日韩美在线 | 国产精品免费在线播放 | 久久国色夜色精品国产 | 激情网五月婷婷 | 久久久人人爽 | 99re视频在线观看 | 精品产品国产在线不卡 | 亚洲国产精品成人va在线观看 | 国产精品免费高清 | 免费观看mv大片高清 | 日韩高清免费电影 | 夜夜夜影院 | 亚洲首页| 手机av在线不卡 | 97视频人人免费看 | 婷婷色五 | 日韩av电影中文字幕在线观看 | 玖玖视频网 | 亚洲午夜久久久久 | 欧美最猛性xxxxx(亚洲精品) | 欧美成年黄网站色视频 | 亚洲精品视频在线播放 | 超碰97在线资源站 | 欧美a级成人淫片免费看 | 国产美女主播精品一区二区三区 | 久久av网 | 丰满少妇久久久 | 国产手机视频精品 | 国产第一页福利影院 | 亚洲五月综合 | 日韩在线免费小视频 | 午夜国产福利视频 | 国产三级午夜理伦三级 | 91丨九色丨蝌蚪丨对白 | 欧洲精品一区二区 | 香蕉在线影院 | 毛片888| 久久99久久99精品免费看小说 | 中文字幕在线一二 | 99久久精品免费 | 观看免费av | 欧美淫视频 | 成人国产精品一区 | 天天插夜夜操 | 可以免费观看的av片 | 国产一区播放 | 午夜久久影视 | 99成人精品 | 日韩在线激情 | 亚洲国产字幕 | 亚洲综合欧美激情 | 亚洲精品成人在线 | 国产精品久久精品国产 | 免费观看一级一片 | 24小时日本在线www免费的 | 亚洲免费av在线 | 免费av试看| 久久99精品国产99久久6尤 | 夜夜操天天干, | 亚洲五月婷 | 999久久国精品免费观看网站 | 正在播放国产一区 | 日韩欧三级 | 日本一区二区三区免费看 | 一区二区三区四区五区六区 | 日日干av | 亚洲一区视频在线播放 | 又黄又爽又湿又无遮挡的在线视频 | 亚洲精品电影在线 | 国产综合精品久久 | 日本精品久久 | 日本中文字幕在线一区 | 免费视频二区 | 成人午夜电影在线播放 | 精品国内| 精品视频免费观看 | 国产1级视频 | 九九热免费在线观看 | 日韩三级.com | 在线观看的a站 | 国产香蕉97碰碰碰视频在线观看 | 天天操天天干天天综合网 | 色姑娘综合 | 国产精久久 | av免费网站观看 | 99免在线观看免费视频高清 | 久久精品久久精品久久 | 黄色日视频 | 999精品视频 | 国产精品一区二区美女视频免费看 | 最新精品视频在线 | 欧美日韩亚洲第一页 | 久久久久久久久久免费视频 | 综合亚洲视频 | 欧美一级大片在线观看 | 日韩av影视在线 | av一级二级 | 正在播放 国产精品 | 国产九色91 | 日日干天天插 | 国产福利精品一区二区 | 免费观看www小视频的软件 | 九九综合九九综合 | 免费在线看v | 四虎成人av| 日本美女xx | 色婷婷综合久久久久中文字幕1 | 在线黄色国产电影 | 午夜av在线| 99在线免费观看 | 中文字幕亚洲精品在线观看 | 免费性网站 | 97人人模人人爽人人喊网 | www.看片网站 | 成人av播放 | 日韩免费高清在线观看 | 91精品爽啪蜜夜国产在线播放 | 91视频在线观看大全 | 亚洲在线视频观看 | 久久综合福利 | 久久国产网站 | 91精品久久香蕉国产线看观看 | 亚洲综合爱| 午夜色影院 | 久久国产精品免费 | 911国产在线观看 | 丁香五香天综合情 | 亚洲人成综合 | 国产视频 亚洲视频 | 中文字幕在线观看免费高清电影 | 在线观看一区 | 日韩最新av在线 | 婷婷香蕉| 色网站免费在线观看 | 日日干av | 日韩欧美在线视频一区二区 | 久久成人国产精品入口 | 天天操天天干天天综合网 | 婷婷视频在线 | 亚洲国产视频直播 | 99色在线| 国产999在线 | va视频在线观看 | 18做爰免费视频网站 | 99精品视频免费在线观看 | 久久黄色免费 | 国产一级免费在线 | 亚洲国产成人在线 | 免费国产在线观看 | 少妇性bbb搡bbb爽爽爽欧美 | 96在线| 99热这里只有精品免费 | 成人a级网站 | 香蕉97视频观看在线观看 | 国产精品久久久久av免费 | 欧美日韩三级在线观看 | 五月天婷亚洲天综合网精品偷 | 91看片淫黄大片在线播放 | av在线电影免费观看 | 五月婷婷色丁香 | 久久久久久久久久久久久9999 | 国产精品成人一区二区三区吃奶 | 色中色资源站 | 免费观看久久 | 日韩性久久 | 最近日本中文字幕a | 精品婷婷 | 亚洲日本精品视频 | 91日韩在线| 日韩av在线免费看 | 狠狠操狠狠干天天操 | 久久人人爽人人爽人人 | 夜夜骑首页| 日本黄色大片儿 | 中文字幕4 | 精品1区2区 | 欧美91精品国产自产 | av网站有哪些 | 国产.精品.日韩.另类.中文.在线.播放 | 蜜臀久久99精品久久久无需会员 | 精品国产一区二区三区在线 | 国产一级做a| 伊人久久五月天 | 日本精品一区二区三区在线观看 | 色综合 久久精品 | 91污视频在线观看 | 在线国产观看 | 玖玖玖国产精品 | 欧美色图视频一区 | 911亚洲精品第一 | 成人在线观看你懂的 | 天天操天天干天天 | 亚洲美女在线一区 | 日韩视频在线观看视频 | 国产精品18久久久久久不卡孕妇 | 美女视频黄免费的久久 | 日日夜夜草 | 久久九九国产精品 | 欧美xxxxx在线视频 | 日韩在线字幕 | 国内精自线一二区永久 | 韩日电影在线 | 麻豆一区二区 | 国产91精品高清一区二区三区 | 93久久精品日日躁夜夜躁欧美 | 99久久久国产精品美女 | 亚洲欧洲精品一区二区精品久久久 | 久草精品在线 | 久久久国产精品一区二区中文 | 亚洲精品在线播放视频 | 午夜精品久久久久久久久久久久 | 久久新视频 | 精品国产伦一区二区三区观看说明 | 天天综合视频在线观看 | 国产精品涩涩屋www在线观看 | 激情综合网五月 | 日韩大片在线观看 | 一级黄色a视频 | 日日夜夜人人精品 | 国产人成免费视频 | 久久手机免费视频 | 九九九热精品免费视频观看 | 久久久国产日韩 | 国产在线第三页 | av免费看在线 | 欧美日韩国产一区二 | 在线视频麻豆 | av免费看网站 | 欧美日韩高清一区二区 国产亚洲免费看 | 天天天射 | 国产精品精品久久久久久 | 国产成人精品国内自产拍免费看 | 日韩艹| 激情六月婷婷久久 | 欧美日韩激情视频8区 | 国产一级黄| 久久免费视频1 | 久久 精品一区 | 欧美精品久久久久久久亚洲调教 | 草久在线播放 | 色婷婷电影 | 亚洲精品玖玖玖av在线看 | 又黄又网站 | 97在线精品视频 | 久久99这里只有精品 | 亚洲成av人片在线观看www | 日韩精品久久久久久久电影99爱 | 亚洲精品久久久久中文字幕二区 | 亚洲精品综合在线观看 | 欧美成人性战久久 | av高清影院 | 精品在线亚洲视频 | av 在线观看 | 在线观看av小说 | 天天爽天天碰狠狠添 | 国产精品 9999 | 一区二区三区免费网站 | 国产一区二区精品91 | 精品在线免费视频 | 在线影视 一区 二区 三区 | 婷婷精品进入 | 一区二区精品在线观看 | 最近最新最好看中文视频 | 在线看一级片 | 亚洲国产中文在线 | 久草网免费 | 日日天天干 | 深爱激情站| 嫩草av在线 | 色噜噜日韩精品一区二区三区视频 | 久久99久| 日日夜夜狠狠 | 五月开心网 | 美女久久久久久久久久 | 亚洲精品视频偷拍 | 久久美女免费视频 | 五月天久久久久久 | 99精品国产免费久久 | 午夜精品一二三区 | 91一区二区三区久久久久国产乱 | 亚洲女裸体 | 99精品视频在线观看免费 | 国产精品福利av | 天天舔天天搞 | 天天综合色天天综合 | 国产明星视频三级a三级点| www麻豆视频 | 亚洲视频大全 | 国产精品久久久久永久免费 | 久久久网址 | 亚洲人成人天堂h久久 | 91成人精品一区在线播放69 | 久久tv视频 | 日本美女xx | 亚州精品天堂中文字幕 | av电影 一区二区 | 91插插插免费视频 | 日韩特黄av | 99久热在线精品视频成人一区 | 天天久久综合 | 欧美激情第一页xxx 午夜性福利 | 国产日韩在线播放 | 国产.精品.日韩.另类.中文.在线.播放 | 啪啪资源 | 1024手机在线看 | 一区在线免费观看 | 国产成人精品一区二区三区福利 | 亚洲少妇激情 | 免费在线观看国产精品 | 成人九九视频 | 97视频资源 | 香蕉网址 | 日日夜夜艹 | 成人av中文字幕在线观看 | 亚洲精品av在线 | 亚洲日本国产精品 | 国产一区免费视频 | 中文字幕日韩电影 | 久久人人爽人人爽人人片av免费 | 久久国产99| 五月婷婷操| 婷婷在线资源 | 色综合天天色综合 | 娇妻呻吟一区二区三区 | 一区二区三区四区五区六区 | 涩涩资源网 | www在线观看国产 | 国产高清在线免费视频 | 成年人在线播放视频 | 久久伦理视频 | 在线免费中文字幕 | 91手机视频在线 | 91视频免费网站 | 国产午夜麻豆影院在线观看 | 99久久久国产精品 | 国产成人久久精品77777综合 | 久久免费观看视频 | 99精品在线免费 | 国产在线观看国语版免费 | 国产99久久久精品 | 99免费视频| 青青草国产在线 | 91麻豆精品国产91久久久久久 | 中文资源在线官网 | 国产大片黄色 | 欧洲成人av | 不卡的av电影在线观看 | 六月婷色 | 五月婷婷视频 | 狠狠狠色狠狠色综合 | 日p在线观看 | 色鬼综合网 | 五月天中文字幕 | 中文字幕 欧美性 | 亚洲精品国偷拍自产在线观看 | 欧美吞精| 成人黄色av网站 | 久久人人干 | 黄色片免费看 | 欧美91片 | 伊人官网 | 成人免费视频播放 | 国产福利一区二区三区视频 | 丁香六月中文字幕 | 国产高清视频免费最新在线 | 91亚色在线观看 | 精品一区二区免费在线观看 | 欧美一级乱黄 | 日韩一区正在播放 | 在线观看一区二区精品 | 99精品一区二区三区 | 中文字幕在线播放av | 成片免费观看视频999 | 99一区二区三区 | 亚洲欧洲精品一区二区 | 色wwwww| 91av国产视频 | 久久精品99精品国产香蕉 | 国产精品国产三级国产专区53 | 久久国产手机看片 | 不卡的av在线 | 日韩视频一区二区在线 | 欧美激情综合五月色丁香 | 2019中文最近的2019中文在线 | 亚洲涩涩色| 伊人伊成久久人综合网小说 | 久久伦理影院 | 亚洲精品国产区 | 天天爽网站 | 日日干日日色 | 成年人在线视频观看 | 992tv人人网tv亚洲精品 | 成人国产精品久久久 | 天天操夜夜逼 | 天堂av免费在线 | 国产999在线 | 国产日韩欧美中文 | 日日草天天草 | 欧美在线视频精品 | 久久久首页 | 91麻豆精品国产91久久久久久 | 午夜视频福利 | 国产午夜一区 | 99热精品免费观看 | 亚洲国产久 | 久久久91精品国产一区二区三区 | 国产日本在线播放 | 成人黄色视 | 亚洲精品乱码久久久久久按摩 | 欧美日韩视频在线 | 日本中文字幕视频 | 久久久国产99久久国产一 | 91桃色在线播放 | 99色| 日本久久久精品视频 | 日本精a在线观看 | 国产一级免费观看 | 亚洲禁18久人片 | 欧美日韩一区二区免费在线观看 | 久久理论电影网 | 日韩va在线观看 | 亚洲激情综合 | 久久成人午夜视频 | 天堂中文在线播放 | 久久97超碰 | 国产99久久久国产精品免费二区 | 色视频在线看 | 国产日韩亚洲 | 91在线产啪| 一级黄色片在线免费看 | 在线观看av麻豆 | 精品亚洲欧美无人区乱码 | 久久久久麻豆 | 天天插综合网 | 精品一区电影 | 国产乱码精品一区二区三区介绍 | 色综合久 | 午夜精品电影一区二区在线 | 美女久久| 久草国产精品 | 久视频在线 | 日日草av| 欧美精品二区 | 伊人天天| 天天综合人人 | 午夜精品久久久久久久99 | 亚洲激情影院 | 在线激情网 | 玖玖在线播放 | 色爱成人网 | 九九热久久免费视频 | 日日夜夜骑 | 成年人免费在线播放 | 五月激情六月丁香 | 午夜av大片 | 六月天色婷婷 | 欧美一级片在线 | 久久精品久久久久 | 天天天操天天天干 | 综合久久久久久 | 日韩免费电影网 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产一在线精品一区在线观看 | 亚洲开心激情 | 六月色婷婷 | av在线播放网址 | 亚洲精品美女免费 | 玖玖视频免费在线 | 国产美女精品视频 | 欧美精品免费一区二区 | 国产 字幕 制服 中文 在线 | 美女网站在线观看 | 国产123区在线观看 国产精品麻豆91 | 久久a视频 | 日韩免费电影一区二区三区 | 狠狠的操狠狠的干 | 国产成人久久av977小说 | 日韩黄色一级电影 | 色姑娘综合 | 高清av在线免费观看 | 亚洲va天堂va欧美ⅴa在线 | 欧美91精品国产自产 | 国产99久久精品 | 久久久久久久电影 | 成人日韩av | av在线播放一区二区三区 | 狠狠色噜噜狠狠狠合久 | 五月婷在线观看 | 亚洲国产丝袜在线观看 | 久久资源在线 |