1. 程式人生 > >python常見知識點整理

python常見知識點整理

Python是一個面向物件的解釋型的互動式高階指令碼語言:Python被設計成一種高可讀性的語言,因為它大量地使用了英語中的單詞作為關鍵字,而且不像其他語言使用標點符號構成複雜的語法結構,Python的語法結構非常少。Python是一種面向物件的語言:即Python是支援面向物件的,支援在物件中進行程式碼封裝。Python是一種解釋型語言:即Python程式是在執行時由直譯器解釋執行的,因而不用事先編譯源程式。這一點和Perl和PHP類似。Python是一種互動式語言:即你能夠在Python提示符下直接互動式地編寫你的程式。Python是初學者的語言:Python是一種非常適合初學者的語言,它支援多種型別的應用程式的開發,如簡單的文字處理、www瀏覽器應用程式開發、遊戲開發等等。1)什麼是Python?使用Python的優點有哪些?缺點有哪些?
Python是一種面向物件的解釋性的互動式語言,帶有物件、模組、執行緒、異常和記憶體自動管理的機制。使用Python的優點有:簡單、易學、輕便可移植、可擴充套件、可讀性、具有多種內建資料型別、開源等等。使用Python的缺點有:執行速度慢,程式碼不能加密(解釋性語言,釋出python應用只能釋出原始碼,不像C釋出編譯後的應用檔案)2)什麼是PEP 8?PEP 8是一種編碼規範,是一系列關於如何讓Python程式碼更加具有可讀性的編碼建議。3)什麼是序列化(pickling)和反序列化(unpickling)?序列化:將在記憶體中的變數轉為可儲存或傳輸的過程。應用JSON傳輸,序列化為統一格式json反序列化:與序列化的過程相反Pickle模組允許我們將Python物件轉換成一個string表示的資訊,並且可以使用dump函式將其儲存到一個檔案中去,這樣的過程稱為序列化。而使用檔案中儲存的物件資訊重構Python物件的過程稱為反序列化。4)Python是如何被解釋執行的?
Python是一種解釋型語言,它可以直接從原始碼執行程式。程式設計師編寫的原始碼首先轉變成一種中間語言程式碼,然後再被轉換成能夠直接執行的機器語言程式碼。5)Python是如何進行記憶體管理的?Python記憶體空間是以Python私有堆的形式進行管理的。所有的Python物件和資料結構都存放在一個私有堆中。直譯器可以訪問私有堆,而程式設計師不可以。將Python堆空間中的記憶體分配給Python物件的工作是由Python記憶體管理器完成的。而核心API則會提供給程式設計師一些相關的工具來完成涉及到記憶體的編碼工作。Python還內建垃圾回收器,從而進行回收釋放記憶體到堆空間。6)能夠找到程式中的bug進行靜態分析的工具有哪些?
PyChecker是一種能夠發現Python原始碼中的bug並對其中的程式碼風格和複雜度進行警告的靜態分析工具。另外一種工具是Pylint,它能夠驗證模組是否滿足編碼標準。7)什麼是Python裝飾器?用來裝飾一個函式從而使這個函式在不修改本身的函式定義外,動態產生額外的功能;裝飾函式的入參為需要被裝飾的函式。裝飾器本質上是一個返回函式的高階函式一個Python裝飾器是我們在符合Python語法的同時又方便地對函式做的一些特定的修改。8)列表、元組、集合、字典的區別是什麼?列表:元素可變(任何資料型別),有序(可索引),append/insert/pop;元組:元素不可變,但元素中的可變元素是可變的;有序(可索引);而且元組可以被雜湊,例如作為字典的鍵。集合:無序(不可被索引)、互異字典:無序,鍵值對(key:value),key唯一不可重複9)怎樣理解字典和列表?它們是一種用來建立可變物件的語法結構,資料容器。dic插入、查詢速度比list快,不會隨key的增加而增加,但list會隨著元素的增加而增加(偏移量)10)引數是如何通過值或者引用傳遞的?python中確切說應該是“傳物件引用”的方式,引用物件傳遞。 一切皆物件,引數皆引用如果函式收到的是一個可變物件(比如列表、字典)的引用,則可修改物件的原始值==相當於“引用傳遞”方式;如果函式收到的是一個不可變物件(比如數字、字元、元組),就不能直接修改原始物件指向的值==相當於“值傳遞”方式;11)Python提供哪些內建型別?(原文有語法錯誤,根據個人理解翻譯)分為可變型別和不可變型別。可變型別:列表集合字典不可變型別:字串元組數字12)Python中的名稱空間是什麼?名字到物件的一個對映;一個物件擁有一個ID(記憶體地址)、一個型別、一個值,但可以有不同的名字,比如:a=1,b=a,a和b指向同一個物件;名稱空間就是用來對映這個關係的;13)Python中的lambda表示式是什麼?lambda表示式是一個匿名函式,省去了對函式命名,所以叫匿名函式。通常用作程式碼行內的嵌入函式。14)為什麼Python中的lambda表示式沒有宣告?Python中的lambda表示式沒有宣告是因為它只是用來建立一個新的函式物件,並且在執行時才返回值給物件。15)Python中的pass是什麼意思?pass是Python中的空操作語句,或者說,它是一個複雜語句中的一個空間佔位符,只是用來表示空白,什麼都不用寫。16)Python的迭代器是什麼?迭代器是用來迭代可迭代物件的,比如包含一組元素的列表。 iter()生成迭代器物件,next()依次訪問迭代器物件的下一個值17)Python中的unittest是什麼?unittest是Python中的單元測試框架。它支援共享的測試建立、自動測試、關閉測試、聚集測試等等。18)什麼是切片?從一組序列中擷取一段序列的機制,比如列表、元組、字串等型別中選擇一個範圍中的元素。19)Python中的生成器是什麼?一種特殊的迭代器,用關鍵字yield表示,它特殊的地方在於運用在函式中函式體沒有return返回,而是使用關鍵字yield返回值,yield每返回一次,函式狀態掛起 。這種函式叫做生成器函式,被呼叫時返回一個生成器物件20)Python中的docstring是什麼?docstring是一個py檔案、函式、類開頭部分的用'''編寫的一段註釋文件和說明,通過help函式可檢視該文件說明。docstring是Python中產生文件的方式,它可以為Python中的函式、模組和類產生說明文件。21)Python中如何拷貝一個物件?使用標準庫的copy模組:copy.copy()淺拷貝,copy.deepcopy()深拷貝copy.copy()淺拷貝:拷貝了物件,但拷貝物件的值仍然是指向原物件的值(相當於引用),修改拷貝物件的元素,則被拷貝物件的值也會被修改copy.deepcopy()深拷貝: 不僅拷貝了物件,同時也拷貝了物件中的元素,獲得了全新的物件,與被拷貝物件完全獨立;但這需要犧牲一定的時間和空間。22)Python中負的索引是什麼意思?Python中可以使用整數和負數進行索引。對於正索引,0是第一個,1是第二個,以此類推。對於負索引,-1是最後一個,-2是倒數第二個,以此類推。23)怎樣將一個數字轉換成字串?使用內建函式str()即可。如果想要八進位制或者十六進位制的形式,可以使用oct或者hex函式。24)xrange和range的區別是什麼?xrange返回一個xrange生成器物件,而range返回一個list物件。生成很大數列的時候,range會使用和其範圍大小相同的記憶體;相比xrange的效能要高很多25)Python中的模組和包是什麼?在Python中,模組就是一種構建程式的方式。每一個Python程式檔案都是一個模組,這個檔案還可以引入其他模組如物件和屬性等。包就是一個帶有__init__.py檔案的資料夾,裡面可包含多個模組26)@property、@staticmethod、@classmethod:@property:特性,被其裝飾過的方法(函式),可以當成屬性一樣去呼叫和訪問。如:a()是一個方法==》c.a(物件.屬性)呼叫@staticmethod:靜態方法,被其裝飾的函式中不含self引數,相當於類外面的方法,但會在類中被呼叫(跟類有關係但在執行時又不需要例項和類參與)。通過類名呼叫@classmethod:類方法,通過類名呼叫(一般類中的方法是例項方法,通過例項呼叫),使用時將類作為方法的第一個引數傳入,如:@classmethoddef test(cls):    print(cls,cls.x)27) 如何理解self?self為類中方法的預設第一個引數,self指向建立的例項本身。 呼叫時self不需要傳,Python直譯器自己會把例項變數傳進去