Python的10個基礎(chǔ)知識點,新手必須背下來!!

Python是一個面向?qū)ο蟮慕忉屝偷慕换ナ礁呒壞_本語言:Python被設(shè)計成一種高可讀性的語言,因為它大量地使用了英語中的單詞作為關(guān)鍵字,而且不像其他語言使用標(biāo)點符號構(gòu)成復(fù)雜的語法結(jié)構(gòu),Python的語法結(jié)構(gòu)非常少。
Python是一種面向?qū)ο蟮恼Z言:即Python是支持面向?qū)ο蟮?,支持在對象中進(jìn)行代碼封裝。

Python是一種解釋型語言:即Python程序是在運(yùn)行時由解釋器解釋執(zhí)行的,因而不用事先編譯源程序。這一點和Perl和PHP類似。
Python是一種交互式語言:即你能夠在Python提示符下直接交互式地編寫你的程序。
Python是初學(xué)者的語言:Python是一種非常適合初學(xué)者的語言,它支持多種類型的應(yīng)用程序的開發(fā),如簡單的文本處理、www瀏覽器應(yīng)用程序開發(fā)、游戲開發(fā)等等。
1)什么是Python?使用Python的優(yōu)點有哪些?缺點有哪些?
Python是一種面向?qū)ο蟮慕忉屝缘慕换ナ秸Z言,帶有對象、模塊、線程、異常和內(nèi)存自動管理的機(jī)制。
使用Python的優(yōu)點有:簡單、易學(xué)、輕便可移植、可擴(kuò)展、可讀性、具有多種內(nèi)建數(shù)據(jù)類型、開源等等。
使用Python的缺點有:運(yùn)行速度慢,代碼不能加密(解釋性語言,發(fā)布python應(yīng)用只能發(fā)布源代碼,不像C發(fā)布編譯后的應(yīng)用文件)
2)什么是PEP 8?
PEP 8是一種編碼規(guī)范,是一系列關(guān)于如何讓Python代碼更加具有可讀性的編碼建議。
3)什么是序列化(pickling)和反序列化(unpickling)?
序列化:將在內(nèi)存中的變量轉(zhuǎn)為可存儲或傳輸?shù)倪^程。應(yīng)用JSON傳輸,序列化為統(tǒng)一格式j(luò)son
反序列化:與序列化的過程相反
Pickle模塊允許我們將Python對象轉(zhuǎn)換成一個string表示的信息,并且可以使用dump函數(shù)將其保存到一個文件中去,這樣的過程稱為序列化。而使用文件中保存的對象信息重構(gòu)Python對象的過程稱為反序列化。
4)Python是如何被解釋執(zhí)行的?

Python是一種解釋型語言,它可以直接從源代碼運(yùn)行程序。程序員編寫的源代碼首先轉(zhuǎn)變成一種中間語言代碼,然后再被轉(zhuǎn)換成能夠直接執(zhí)行的機(jī)器語言代碼。
5)Python是如何進(jìn)行內(nèi)存管理的?
Python內(nèi)存空間是以Python私有堆的形式進(jìn)行管理的。所有的Python對象和數(shù)據(jù)結(jié)構(gòu)都存放在一個私有堆中。解釋器可以訪問私有堆,而程序員不可以。
將Python堆空間中的內(nèi)存分配給Python對象的工作是由Python內(nèi)存管理器完成的。而內(nèi)核API則會提供給程序員一些相關(guān)的工具來完成涉及到內(nèi)存的編碼工作。
Python還內(nèi)置垃圾回收器,從而進(jìn)行回收釋放內(nèi)存到堆空間。
6)能夠找到程序中的bug進(jìn)行靜態(tài)分析的工具有哪些?
PyChecker是一種能夠發(fā)現(xiàn)Python源代碼中的bug并對其中的代碼風(fēng)格和復(fù)雜度進(jìn)行警告的靜態(tài)分析工具。另外一種工具是Pylint,它能夠驗證模塊是否滿足編碼標(biāo)準(zhǔn)。
7)什么是Python裝飾器?
用來裝飾一個函數(shù)從而使這個函數(shù)在不修改本身的函數(shù)定義外,動態(tài)產(chǎn)生額外的功能;裝飾函數(shù)的入?yún)樾枰谎b飾的函數(shù)。裝飾器本質(zhì)上是一個返回函數(shù)的高階函數(shù)
一個Python裝飾器是我們在符合Python語法的同時又方便地對函數(shù)做的一些特定的修改。
8)列表、元組、集合、字典的區(qū)別是什么?
列表:元素可變(任何數(shù)據(jù)類型),有序(可索引),append/insert/pop;
元組:元素不可變,但元素中的可變元素是可變的;有序(可索引);而且元組可以被散列,例如作為字典的鍵。
集合:無序(不可被索引)、互異
字典:無序,鍵值對(key:value),key唯一不可重復(fù)
9)怎樣理解字典和列表?
它們是一種用來創(chuàng)建可變對象的語法結(jié)構(gòu),數(shù)據(jù)容器。
dic插入、查找速度比list快,不會隨key的增加而增加,但list會隨著元素的增加而增加(偏移量)
10)參數(shù)是如何通過值或者引用傳遞的?
python中確切說應(yīng)該是“傳對象引用”的方式,引用對象傳遞。一切皆對象,參數(shù)皆引用
如果函數(shù)收到的是一個可變對象(比如列表、字典)的引用,則可修改對象的原始值==相當(dāng)于“引用傳遞”方式;
如果函數(shù)收到的是一個不可變對象(比如數(shù)字、字符、元組),就不能直接修改原始對象指向的值==相當(dāng)于“值傳遞”方式;