語言特性
1.談談對 Python 和其餘語言的區別python
語言特色:簡潔、優雅,省略了各類大括號和分號,還有一些關鍵字,類型說明; 語言類型:解釋型語言,運行的時候是一行一行的解釋,並運行,因此調試代碼很方便,開發效率很高; 第三方庫:python是開源的,而且python的定位時任由其發展,應用領域不少好比Web,運維,自動化測試,爬蟲,數據分析,人工智能。Python具備很是完備的第三方庫; Python和Java相比 Python比Java要簡單。Python是函數爲一等公民的語言,而Java是類爲一等公民的語言。Python是弱類型語言,而Java是強類型語言.; Python和C相比 對於使用: Python的類庫齊全而且使用簡潔,不多代碼實現的功能用C可能要很複雜對於速度; Python的運行速度相較於C,絕對是很慢了。Python和CPython解釋器都是C語言編寫的
2.簡述解釋型和編譯型編程語言程序員
編譯性和解釋型語言
解釋型:就是邊解釋邊執行;
編譯性:編譯後再執行
3.Python 的解釋器種類以及相關特色?編程
CPython
c語言開發的 使用最廣的解釋器
IPython
基於cpython之上的一個交互式計時器 交互方式加強 功能和cpython同樣
PyPy
目標是執行效率 採用JIT技術 對python代碼進行動態編譯,提升執行效率
JPython
運行在Java上的解釋器 直接把python代碼編譯成Java字節碼執行
IronPython
運行在微軟 .NET 平臺上的解釋器,把python編譯成. NET 的字節碼
4.說說你知道的Python3 和 Python2 之間的區別?數組
按照當前時間點(Python 2.7 和 Python3.6),從宏觀上介紹下Python 3和Python 2的區別,並舉一些對應常見的例子: 1. 統一了字符編碼支持。 2. 增長了新的語法。print/exec等成爲了函數,格式化字符串變量,類型標註,添加了nonlocal、yield from、async/await、yield for關鍵詞和__annotations__、__context__、__traceback__、__qualname__等dunder方法。 3. 修改了一些語法。metaclass,raise、map、filter以及dict的items/keys/values方法返回迭代對象而不是列表,描述符協議,保存類屬性定義順序,保存關鍵字參數順序 4. 去掉了一些語法。cmp、<>(也就是!=)、xrange(其實就是range)、再也不有經典類 5. 增長一些新的模塊。concurrent.futures、venv、unittest.mock、asyncio、selectors、typing等 6. 修改了一些模塊。主要是對模塊添加函數/類/方法(如functools.lru_cache、threading.Barrier)或者參數。 7. 模塊更名。把一些相關的模塊放進同一個包裏面(如httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib放進了http裏面,urllib, urllib2, urlparse, robotparse放進了urllib裏面),個例如SocketServer改爲了socketserver,Queue改爲queue等 8. 去掉了一些模塊或者函數。gopherlib、md五、contextlib.nested、inspect.getmoduleinfo等。去掉的內容的緣由主要是2點:1. 過期的技術產物,已經沒什麼人在用了;2. 出現了新的替代產物後者被證實存在乎義不大。理論上對於開發者影響很小。 9. 優化。從新實現了dict能夠減小20%-25%的內存使用;提高pickle序列化和反序列化的效率;collections.OrderedDict改用C實現;經過os.scandir對glob模塊中的glob()及iglob()進行優化,使得它們如今大概快了3-6倍等.. 這些都是喜大普奔的好消息,一樣開發者不須要感知,默默的就會讓結果變得更好。 10. 其餘。構建過程、C的API、安全性等方面的修改,一般對於開發者不須要關心。
5.Python3 和 Python2 中 int 和 long 區別?安全
python2中有long類型
python3中沒有long類型,只有int類型
6.xrange 和 range 的區別?cookie
xrange用於返回xrange對象,而range用於返回一個數組。無論那個範圍多大,xrange都使用一樣的內存。 注意:python3中沒有xrange。 python3中演示: >>> range(10) range(0, 10) >>> type(range(10)) <class 'range'>
編碼規範less
7.什麼是 PEP8?運維
1. 變量 常量:大寫加下劃線 USER_CONSTANT。 私有變量 : 小寫和一個前導下劃線 _private_value。 Python 中不存在私有變量一說,如果遇到須要保護的變量,使用小寫和一個前導下劃線。但這只是程序員之間的一個約定,用於警告說明這是一個私有變量,外部類不要去訪問它。但實際上,外部類仍是能夠訪問到這個變量。 內置變量 : 小寫,兩個前導下劃線和兩個後置下劃線 __class__兩個前導下劃線會致使變量在解釋期間被改名。這是爲了不內置變量和其餘變量產生衝突。用戶定義的變量要嚴格避免這種風格。以避免致使混亂。 2. 函數和方法 整體而言應該使用,小寫和下劃線。但有些比較老的庫使用的是混合大小寫,即首單詞小寫,以後 每一個單詞第一個字母大寫,其他小寫。但如今,小寫和下劃線已成爲規範。 私有方法 :小寫和一個前導下劃線,這裏和私有變量同樣,並非真正的私有訪問權限。同時也應該注意通常函數不要使用兩個前導下劃線(當遇到兩個前導下劃線時,Python 的名稱改編特性將發揮做用)。 特殊方法 :小寫和兩個前導下劃線,兩個後置下劃線這種風格只應用於特殊函數,好比操做符重載等。 函數參數 : 小寫和下劃線,缺省值等號兩邊無空格 3. 類 類老是使用駝峯格式命名,即全部單詞首字母大寫其他字母小寫。類名應該簡明,精確,並足以從中理解類所完成的工做。 4. 模塊和包 除特殊模塊 __init__ 以外,模塊名稱都使用不帶下劃線的小寫字母。 5. 關於參數 5.1 不要用斷言來實現靜態類型檢測。斷言能夠用於檢查參數,但不該僅僅是進行靜態類型檢測。Python 是動態類型語言,靜態類型檢測違背了其設計思想。斷言應該用於避免函數不被毫無心義的調用。 5.2 不要濫用 *args 和 **kwargs。*args 和 **kwargs 參數可能會破壞函數的健壯性。它們使簽名變得模糊,並且代碼經常開始在不該該的地方構建小的參數解析器。 6. 其餘 6.1 使用 has 或 is 前綴命名布爾元素 is_connect = True has_member = False 6.2 用複數形式命名序列 members = ['user_1', 'user_2'] 6.3 用顯式名稱命名字典 person_address = {'user_1':'10 road WD', 'user_2' : '20 street huafu'} 6.4 避免通用名稱 諸如 list, dict, sequence 或者 element 這樣的名稱應該避免。 6.5 避免現有名稱 諸如 os, sys 這種系統已經存在的名稱應該避免。 7. 一些數字 一行列數 : PEP 8 規定爲 79 列。根據本身的狀況,好比不要超過滿屏時編輯器的顯示列數。 一個函數 : 不要超過 30 行代碼, 便可顯示在一個屏幕類,能夠不使用垂直遊標便可看到整個函數。 一個類 : 不要超過 200 行代碼,不要有超過 10 個方法。一個模塊 不要超過 500 行。
8.瞭解 Python 之禪麼?socket
import this "The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!"
9.瞭解 dosctring 麼?async
就是函數方法的內置解釋,隨便import一個模塊,好比re正則,輸出re.__doc__就出現相似help(re)的文檔內容,不過比help()簡短多了。
10.瞭解類型註解麼?
Python解釋器會在運行的時候動態判斷變量和參數的類型,這樣的好處是編寫代碼速度很快,很靈活,可是壞處也很明顯,很差維護,可能代碼寫過一段時間從新看就很難理解了,由於那些變量、參數、函數返回值的類型,全都給忘記了。
並且當你在讀別人的代碼的時候,也沒法一眼看出變量或者參數的類型,常常要本身推敲,這樣給學習帶來了很大的障礙。
因此Python3裏有了這個新特性,能夠給參數、函數返回值和變量的類型加上註解,不過這個僅僅是註釋而已,對代碼的運行來講沒有任何影響,變量的真正類型仍是會有Python解釋器來肯定,你所作的只是在提升代碼的可讀性,僅此而已。