python基礎(chǔ)面試題

1. 為什么學習Python?

  1. 全球主流的編輯語言
    Python , 是一種面向?qū)ο蟮慕忉屝陀嬎銠C程序設計語言,具有豐富和強大的庫,Python 已經(jīng)成為繼Java,C++之后的的第三大語言。 特點:簡單易學、免費開源、高層語言、可移植性強、面向?qū)ο?、可擴展性、可嵌入型、豐富的庫、規(guī)范的代碼等。
  2. 無所不能的編程語言
    Python除了極少的事情不能做之外,其他基本上可以說全能,Python可以做系統(tǒng)運維、云計算開發(fā)、圖形處理、金融分析、游戲開發(fā)、數(shù)學處理數(shù)據(jù)庫編程、網(wǎng)絡編程、WEB編程、PYMO引擎、黑客編程、爬蟲開發(fā)、機器學習、人工智能等等。
  3. 企業(yè)越來越熱衷的語言
    Python強大的生態(tài)圈注定它了應用廣泛,國內(nèi)的豆瓣、搜狐、金山、通訊、盛大、網(wǎng)易、百度、阿里、土豆、新浪等,國外:谷歌、NASA、YOUTU、FACEBOOK、紅帽等企業(yè)都在廣泛應用。
  4. 國家政策推動支持
    國務院發(fā)布了《新一代人工智能發(fā)展規(guī)劃》,人工智能正式納入國家發(fā)展戰(zhàn)略,開啟了國內(nèi)人工智能產(chǎn)業(yè)發(fā)展的新篇章。2017年P(guān)ython還被列入全國計算機等級考試,山東省小學課程加入了Python,浙江省、北京市、山東省已把Python納入信息技術(shù)課程和高考的內(nèi)容體系。

2. 通過什么學習Python?

通過網(wǎng)上各種學習視頻,比如小甲魚,慕課的七月老師以及各大Python的交流論壇等。


3. Python和Java、PHP、C、C#、C++等其他語言的對比?

  1. python語言,是一種面向?qū)ο?、直譯式計算機程序設計語言,Python語法簡潔而清晰,具有豐富和強大的類庫。它常被昵稱為膠水語言,它能夠很輕松的把用其他語言制作的各種模塊(尤其是C/C++)輕松地聯(lián)結(jié)在一起。常見的一種應用情形是,使用python快速生成程序的原型(有時甚至是程序的最終界面),然后對其中有特別要求的部分,用更合適的語言改寫。
  2. Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復用性。Python支持重載運算符和動態(tài)類型。相對于Lisp這種傳統(tǒng)的函數(shù)式編程語言,Python對函數(shù)式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗的函數(shù)式程序設計工具。Python本身被設計為可擴充的。并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴充模塊。
  3. Python編譯器本身也可以被集成到其它需要腳本語言的程序內(nèi)。因此,很多人還把Python作為一種“膠水語言”(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝。

4.簡述解釋型和編譯型編程語言?

1. 概念

  • 編譯型語言:把做好的源程序全部編譯成二進制代碼的可運行程序。然后,可直接運行這個程序。
  • 解釋型語言:把做好的源程序翻譯一句,然后執(zhí)行一句,直至結(jié)束!

2. 區(qū)別

  • 編譯型語言,執(zhí)行速度快、效率高;依賴編譯器、跨平臺性差些。如C、C++、Delphi、Pascal,F(xiàn)ortran。
  • 解釋型語言,執(zhí)行速度慢、效率低;依賴解釋器、跨平臺性好。如Java、Basic。

3. python

  • Python 的采用了類似Java的編譯模式,先將Python程序編譯成Python字節(jié)碼,然后由一個專門的Python字節(jié)碼解釋器負責解釋執(zhí)行字節(jié)碼。
  • python是解釋型語言,它通過python解釋器實現(xiàn)向底層語言的映射。我們知道python虛擬機是由C語言編寫的,所以python程序會轉(zhuǎn)化為C程序而執(zhí)行。比如,python中的所有對象都會在C中有對應的PyObject結(jié)構(gòu)體。python的list、dict等數(shù)據(jù)類型也要在C中有對應的表示。而像生成器、迭代器等語法結(jié)構(gòu)需要相應的支持。

5. python解釋器種類及特點?

Python是一門解釋器語言,代碼想運行,必須通過解釋器執(zhí)行,Python存在多種解釋器,分別基于不同語言開發(fā),每個解釋器有不同的特點,但都能正常運行Python代碼,以下是常用的五種Python解釋器:

  1. CPython
    當 從Python官方網(wǎng)站下載并安裝好Python2.7后,就直接獲得了一個官方版本的解釋器:Cpython,這個解釋器是用C語言開發(fā)的,所以叫 CPython,在命名行下運行python,就是啟動CPython解釋器,CPython是使用最廣的Python解釋器。
  2. IPython
    IPython是基于CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執(zhí)行Python代碼的功能和CPython是完全一樣的,好比很多國產(chǎn)瀏覽器雖然外觀不同,但內(nèi)核其實是調(diào)用了IE。
  3. PyPy
    PyPy是另一個Python解釋器,它的目標是執(zhí)行速度,PyPy采用JIT技術(shù),對Python代碼進行動態(tài)編譯,所以可以顯著提高Python代碼的執(zhí)行速度。
  4. Jython
    Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。
  5. IronPython
    IronPython和Jython類似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼。

在Python的解釋器中,使用廣泛的是CPython,對于Python的編譯,除了可以采用以上解釋器進行編譯外,技術(shù)高超的開發(fā)者還可以按照自己的需求自行編寫Python解釋器來執(zhí)行Python代碼,十分的方便!


6. 位和字節(jié)的關(guān)系?

  • 最小的存儲單位稱為位(bit):只能容納兩個值(0或1)之一,不能在一個位中存儲更多的信息。位是計算機存儲的基本單位。
  • 字節(jié)(byte)是常用的計算機存儲單位。
    字節(jié)的標準定義:一個字節(jié)均為8位。由于上述所講每個位或者是0或者是1,所以一個8位的字節(jié)包含256種可能的0,1組合。
  • 對于一種給定的計算機設計,字(word)是自然的存儲單位。
    一個英文字符和英文標點占用一個字節(jié),一個中文字符和中文標點占用2個字節(jié)。

7. b、B、KB、MB、GB 的關(guān)系?

  • utf-8中一個字母或者數(shù)字等于一個字節(jié),一個漢字等于3個字節(jié),表情等于4個字節(jié)

b 比特bit / 位
B——字節(jié)
KB——千比特
MB——兆比特
GB——吉比特

1 B = 8b (8個bit/ 位) 一個字節(jié)(byte)等于8位(bit)
1 kB = 1024 B (kB - kilobajt)
1 MB = 1024 kB (MB - megabajt)
1 GB = 1024 MB (GB - gigabajt)

英文和數(shù)字占一個字節(jié)
中文占一個字符,也就是兩個字節(jié)
字符 不等于 字節(jié)。
字符(char)是 Java 中的一種基本數(shù)據(jù)類型,由 2 個字節(jié)組成,范圍從 0 開始,到 2^16-1。
字節(jié)是一種數(shù)據(jù)量的單位,一個字節(jié)等于 8 位。所有的數(shù)據(jù)所占空間都可以用字節(jié)數(shù)來衡量。例如一個字符占 2 個字節(jié),一個 int 占 4 個字節(jié),一個 double 占 8 個字節(jié) 等等。
1字符=2字節(jié);
1Byte=8bit
1k=2^10;b:位;B:字節(jié)1kb=1024 位1kB=1024 字節(jié)。


8. 請至少列舉5個 PEP8 規(guī)范(越多越好)。

  1. 代碼編排

    1. 縮進。4個空格的縮進(編輯器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
    2. 每行最大長度79,換行可以使用反斜杠,最好使用圓括號。換行點要在操作符的后邊敲回車。
    3. 類和top-level函數(shù)定義之間空兩行;類中的方法定義之間空一行;函數(shù)內(nèi)邏輯無關(guān)段落之間空一行;其他地方盡量不要再空行。
  2. 文檔編排

    1. 模塊內(nèi)容的順序:模塊說明和docstring—import—globals&constants—其他定義。其中import部分,又按標準、三方和自己編寫順序依次排放,之間空一行。
    2. 不要在一句import中多個庫,比如import os, sys不推薦。
    3. 如果采用from XX import XX引用庫,可以省略‘module.’,都是可能出現(xiàn)命名沖突,這時就要采用import XX。
  3. 空格的使用

    • 總體原則,避免不必要的空格。
    1. 各種右括號前不要加空格。
    2. 逗號、冒號、分號前不要加空格。
    3. 函數(shù)的左括號前不要加空格。如Func(1)。
    4. 序列的左括號前不要加空格。如list[2]。
    5. 操作符左右各加一個空格,不要為了對齊增加空格。
    6. 函數(shù)默認參數(shù)使用的賦值符左右省略空格。
    7. 不要將多句語句寫在同一行,盡管使用‘;’允許。
    8. if/for/while語句中,即使執(zhí)行語句只有一句,也必須另起一行。
  4. 注釋

    • 總體原則,錯誤的注釋不如沒有注釋。所以當一段代碼發(fā)生變化時,第一件事就是要修改注釋!
    • 注釋必須使用英文,最好是完整的句子,首字母大寫,句后要有結(jié)束符,結(jié)束符后跟兩個空格,開始下一句。如果是短語,可以省略結(jié)束符。
    1. 塊注釋,在一段代碼前增加的注釋。在‘#’后加一空格。段落之間以只有‘#’的行間隔。
    2. 行注釋,在一句代碼后加注釋。比如:x = x + 1 # Increment x
      但是這種方式盡量少使用。
    3. 避免無謂的注釋。
  5. 文檔描述

    1. 為所有的共有模塊、函數(shù)、類、方法寫docstrings;非共有的沒有必要,但是可以寫注釋(在def的下一行)。
    2. 如果docstring要換行,用三引號。
  6. 命名規(guī)范

    • 總體原則,新編代碼必須按下面命名風格進行,現(xiàn)有庫的編碼盡量保持風格。
    1. 盡量單獨使用小寫字母‘l’,大寫字母‘O’等容易混淆的字母。
    2. 模塊命名盡量短小,使用全部小寫的方式,可以使用下劃線。
    3. 包命名盡量短小,使用全部小寫的方式,不可以使用下劃線。
    4. 類的命名使用CapWords的方式,模塊內(nèi)部使用的類采用_CapWords的方式。
    5. 異常命名使用CapWords+Error后綴的方式。
    6. 全局變量盡量只在模塊內(nèi)有效,類似C語言中的static。實現(xiàn)方法有兩種,一是all機制;二是前綴一個下劃線。
    7. 函數(shù)命名使用全部小寫的方式,可以使用下劃線。
    8. 常量命名使用全部大寫的方式,可以使用下劃線。
    9. 類的屬性(方法和變量)命名使用全部小寫的方式,可以使用下劃線。
    10. 類的屬性有3種作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public屬性前,前綴一條下劃線。
    11. 類的屬性若與關(guān)鍵字名字沖突,后綴一下劃線,盡量不要使用縮略等其他方式。
    12. 為避免與子類屬性命名沖突,在類的一些屬性前,前綴兩條下劃線。比如:類Foo中聲明__a,訪問時,只能通過Foo._Foo__a,避免歧義。如果子類也叫Foo,那就無能為力了。
    13. 類的方法第一個參數(shù)必須是self,而靜態(tài)方法第一個參數(shù)必須是cls。
  7. 編碼建議

    1. 編碼中考慮到其他python實現(xiàn)的效率等問題,比如運算符‘+’在CPython(Python)中效率很高,都是Jython中卻非常低,所以應該采用.join()的方式。
    2. 盡可能使用‘is’‘is not’取代‘==’,比如if x is not None 要優(yōu)于if x。
    3. 使用基于類的異常,每個模塊或包都有自己的異常類,此異常類繼承自Exception。
    4. 異常中不要使用裸露的except,except后跟具體的exceptions。
    5. 異常中try的代碼盡可能少。比如:
try:
value = collection[key]
except KeyError:
return key_not_found(key)
else:
return handle_value(value)

要優(yōu)于

try:
# Too broad!
return handle_value(collection[key])
except KeyError:
# Will also catch KeyError raised by handle_value()
return key_not_found(key)
  1. 使用startswith() and endswith()代替切片進行序列前綴或后綴的檢查。比如:
    Yes: if foo.startswith('bar'):優(yōu)于
    No: if foo[:3] == 'bar':
  2. 使用isinstance()比較對象的類型。比如
    Yes: if isinstance(obj, int): 優(yōu)于
    No: if type(obj) is type(1):
  3. 判斷序列空或不空,有如下規(guī)則
    Yes: if not seq:
    if seq:
    優(yōu)于
    No: if len(seq)
    if not len(seq)
    1. 字符串不要以空格收尾。
    2. 二進制數(shù)據(jù)判斷使用 if boolvalue的方式。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 Python基礎(chǔ)篇(80題) 1、為什么學習Python? Python相對于其他編程語言有很多優(yōu)點: ...
    清清子衿木子水心閱讀 1,828評論 0 1
  • 本節(jié)內(nèi)容 Python介紹 發(fā)展史 Python 2 or 3? 安裝 Hello World程序 變量 用戶輸入...
    小小不懂11閱讀 3,548評論 2 30
  • 一、 Python介紹 1.1、Python現(xiàn)狀 python的創(chuàng)始人為吉多·范羅蘇姆(Guido van Ros...
    Horne閱讀 955評論 0 51
  • 今晚和超哥吃了久違的串串香,喝了2瓶雞尾酒,在好幾個小時的胡言亂語下,我很佩服我自己,依然能和邋遢的工作對接,和很...
    行走的骨頭架閱讀 451評論 0 1
  • Day2,8月29日作業(yè):拍攝兩張照片,早上七點和晚上七點的天空。 看到Linda老師布置的作業(yè),第一個念頭...
    飛云品文閱讀 333評論 0 0

友情鏈接更多精彩內(nèi)容