Python部落(python.freelycode.com)組織翻譯
Python是一個面向?qū)ο蟮慕忉屝偷慕换ナ礁呒壞_本語言。Python被設(shè)計(jì)成一種高可讀性的語言,因?yàn)樗罅康厥褂昧擞⒄Z中的單詞作為關(guān)鍵字,而且不像其他語言使用標(biāo)點(diǎn)符號構(gòu)成復(fù)雜的語法結(jié)構(gòu),Python的語法結(jié)構(gòu)非常少。
Python是一種解釋型語言:即Python程序是在運(yùn)行時由解釋器解釋執(zhí)行的,因而不用事先編譯源程序。這一點(diǎn)和Perl和PHP類似。
Python是一種交互式語言:即你能夠在Python提示符下直接交互式地編寫你的程序。
Python是一種面向?qū)ο蟮恼Z言:即Python是支持面向?qū)ο螅∣O)的,支持在對象中進(jìn)行代碼封裝。
Python是初學(xué)者的語言:Python是一種非常適合初學(xué)者的語言,它支持多種類型的應(yīng)用程序的開發(fā),如簡單的文本處理、www瀏覽器應(yīng)用程序開發(fā)、游戲開發(fā)等等。
1)什么是Python?使用Python的優(yōu)點(diǎn)有哪些?
Python是一種帶有對象、模塊、線程、異常和內(nèi)存自動管理的編程語言。使用Python的優(yōu)點(diǎn)有:簡單、易學(xué)、輕便可移植、可擴(kuò)展、具有多種內(nèi)建數(shù)據(jù)類型、開源等等。
2)什么事PEP 8?
PEP 8是一種編碼規(guī)范,是一系列關(guān)于如何讓Python代碼更加具有可讀性的編碼建議。
3)什么是序列化(pickling)和反序列化(unpickling)?
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,它能夠驗(yàn)證模塊是否滿足編碼標(biāo)準(zhǔn)。
7)什么是Python裝飾器?
一個Python裝飾器是我們在符合Python語法的同時又方便地對函數(shù)做的一些特定的修改。
8)列表和元組的區(qū)別是什么?
列表和元組的區(qū)別是列表是可變的,而元組不可以。而且元組可以被散列,例如作為字典的鍵。
9)參數(shù)是如何通過值或者引用傳遞的?
在Python中,一切都是對象,所有變量都是對象的引用。通過引用傳遞還是值傳遞要根據(jù)函數(shù)來確定(原文有語法錯誤,根據(jù)個人理解翻譯);事實(shí)上,你不能改變引用的值,但是如果對象是可變的,則可以改變對象。
10)怎樣理解字典和列表?
它們是一種用來創(chuàng)建可變對象的語法結(jié)構(gòu)。
11)Python提供哪些內(nèi)置類型?(原文有語法錯誤,根據(jù)個人理解翻譯)
分為可變類型和不可變類型。
可變類型:
列表
集合
字典
不可變類型:
字符串
元組
數(shù)字
12)Python中的命名空間是什么?
在Python中,每一個引入的名字都有一個存放的地方,而且它能夠被連接。這就是所謂的命名空間。它就像一個在變量名和對象之間進(jìn)行映射的盒子。當(dāng)變量被用到時,就會查找這個盒子,從而得到相關(guān)聯(lián)的對象.
13)Python中的lambda表達(dá)式是什么?
lambda表達(dá)式是一個匿名函數(shù),通常用作代碼行內(nèi)的嵌入函數(shù)。
14)為什么Python中的lambda表達(dá)式?jīng)]有聲明?
Python中的lambda表達(dá)式?jīng)]有聲明是因?yàn)樗皇怯脕韯?chuàng)建一個新的函數(shù)對象,并且在運(yùn)行時才返回結(jié)果。
15)Python中的pass是什么意思?
pass是Python中的空操作語句,或者說,它是一個復(fù)雜語句中的一個空間占位符,只是用來表示空白,什么都不用寫。
16)Python的迭代器是什么?
Python中的迭代器是用來迭代包含一組元素的容器的,如列表。
17)Python中的unittest是什么?
unittest是Python中的單元測試框架。它支持共享的測試建立、自動測試、關(guān)閉測試、聚集測試等等。
18)什么是切片?
從一個序列如列表、元組、字符串等類型中選擇一個范圍中的元素的機(jī)制叫做切片。
19)Python中的生成器是什么?
它是一種實(shí)現(xiàn)迭代器的方式。除了yield表達(dá)式外,它和正常的函數(shù)沒什么區(qū)別。
20)Python中的docstring是什么?
docstring是Python中產(chǎn)生文檔的方式,它可以為Python中的函數(shù)、模塊和類產(chǎn)生文檔。
21)Python中如何拷貝一個對象?
一般情況下,可以使用copy.copy或者copy.deepcopy函數(shù)進(jìn)行對象拷貝。但是并不能拷貝所有的對象,只能拷貝大部分。
22)Python中負(fù)的索引是什么意思?
Python中可以使用整數(shù)和負(fù)數(shù)進(jìn)行索引。對于正索引,0是第一個,1是第二個,以此類推。對于負(fù)索引,-1是最后一個,-2是倒數(shù)第二個,以此類推。
23)怎樣將一個數(shù)字轉(zhuǎn)換成字符串?
使用內(nèi)置函數(shù)str即可。如果想要八進(jìn)制或者十六進(jìn)制的形式,可以使用oct或者h(yuǎn)ex函數(shù)。
24)xrange和range的區(qū)別是什么?
xrange返回一個xrange對象,而range返回一個list對象,而且會使用和其范圍大小相同的內(nèi)存,不管這個范圍有多大。
25)Python中的模塊和包是什么?
在Python中,模塊就是一種構(gòu)建程序的方式。每一個Python程序文件都是一個模塊,這個文件還可以引入其他模塊如對象和屬性等。
Python程序的文件夾就是模塊的包。一個包可以包含模塊和子文件夾。
英文原文:https://medium.com/@hidimba360/top-25-python-interview-questions-and-answer-9e8504753fdc#.jbkb4p979
譯者:jcdhlzq
本文為頭條號作者發(fā)布,不代表今日頭條立場。
聯(lián)系客服