備注:自用回答
1哗脖、為什么學(xué)習(xí)Python?
答:(1)編譯型語言:一次性扳还,將全部的程序編譯成二進(jìn)制文件才避,然后在運(yùn)行。(c氨距,c++ 工扎,go)
? ? 優(yōu)點(diǎn):運(yùn)行速度快。
? ? 缺點(diǎn):開發(fā)效率低衔蹲,不能跨平臺肢娘。
(2) 解釋型語言:當(dāng)你的程序運(yùn)行時,一行一行的解釋舆驶,并運(yùn)行橱健。(python , PHP)
? ? 優(yōu)點(diǎn):調(diào)試代碼很方便沙廉,開發(fā)效率高拘荡,并且可以跨平臺。
? ? 缺點(diǎn):運(yùn)行速度慢撬陵。
(3) 我對程序的定義是人可以讀懂珊皿,而機(jī)器剛好可以執(zhí)行的一段代碼网缝,注重于代碼的可讀性。
? 而Python的定位是“優(yōu)雅”蟋定、“明確”粉臊、“簡單”,用它編寫的程序簡單易懂驶兜,這與我當(dāng)初的想法不謀而合
2扼仲、通過什么途徑學(xué)習(xí)的Python?
答:書籍抄淑,上網(wǎng)
3屠凶、Python和Java、PHP肆资、C矗愧、C#、C++等其他語言的對比郑原?
答:python膠水語言
4贱枣、簡述解釋型和編譯型編程語言?
答:解釋型語言編寫的程序不需要編譯颤专,在執(zhí)行的時候,專門有一個解釋器能夠?qū)⒄Z言翻譯成機(jī)器語言钠乏,每個語句都是執(zhí)行的時候才翻譯栖秕。這樣解釋型語言每執(zhí)行一次就要翻譯一次,效率比較低晓避。
用編譯型語言寫的程序執(zhí)行之前簇捍,需要一個專門的編譯過程,通過編譯系統(tǒng)俏拱,把源高級程序編譯成為機(jī)器語言文件暑塑,翻譯只做了一次,運(yùn)行時不需要翻譯锅必,所以編譯型語言的程序執(zhí)行效率高事格,但也不能一概而論
5、Python解釋器種類以及特點(diǎn)搞隐?
答:https://www.cnblogs.com/jackzz/p/9080288.html
6驹愚、位和字節(jié)的關(guān)系?
答:?8位(bit)=1字節(jié)(Byte
7劣纲、b逢捺、B、KB癞季、MB劫瞳、GB 的關(guān)系倘潜?
答:8位(bit)=1字節(jié)(Byte),1024字節(jié)=1KB; 1M=1024KB志于;1GB=1024MB
8涮因、請至少列舉5個 PEP8 規(guī)范(越多越好)。
答:http://blog.sae.sina.com.cn/archives/4781
(1) 縮進(jìn)恨憎。4個空格的縮進(jìn)(編輯器都可以完成此功能)蕊退,不使用Tap,更不能混合使用Tap和空格憔恳。
(2) 每行最大長度79瓤荔,換行可以使用反斜杠,最好使用圓括號钥组。換行點(diǎn)要在操作符的后邊敲回車输硝。
(3) 類和top-level函數(shù)定義之間空兩行;類中的方法定義之間空一行程梦;函數(shù)內(nèi)邏輯無關(guān)段落之間空一行点把;其他地方盡量不要再空行。
(4)不要在一句import中多個庫屿附,比如import os, sys不推薦郎逃。
(5) 如果采用from XX import XX引用庫,可以省略‘module.’挺份,都是可能出現(xiàn)命名沖突褒翰,這時就要采用import XX。
9匀泊、通過代碼實(shí)現(xiàn)如下轉(zhuǎn)換:
二進(jìn)制轉(zhuǎn)換成十進(jìn)制:v = “0b1111011”
答:print (int(v,2))
十進(jìn)制轉(zhuǎn)換成二進(jìn)制:v = 18?
答:print (bin(v))
八進(jìn)制轉(zhuǎn)換成十進(jìn)制:v = “011”?
答:print (int(v,8))
十進(jìn)制轉(zhuǎn)換成八進(jìn)制:v = 30?
答:print (oct(v))
十六進(jìn)制轉(zhuǎn)換成十進(jìn)制:v = “0x12”?
答:print (int(v,16))
十進(jìn)制轉(zhuǎn)換成十六進(jìn)制:v = 87
答:print (hex(v))
10优训、請編寫一個函數(shù)實(shí)現(xiàn)將IP地址轉(zhuǎn)換成一個整數(shù)。
如 10.3.9.12 轉(zhuǎn)換規(guī)則為:
再將以上二進(jìn)制拼接起來計(jì)算十進(jìn)制結(jié)果:00001010 00000011 00001001 00001100 = 各聘?
答:
print " ".join(bin(int(i))[2:].zfill(8)for iin ip.split('.'))
print "".join([" ".join(str(bin(int(i))[2:]).rjust(8,"0")for iin ip.split("."))])
print '.'.join(str(int(i,2))for iin bin.split(' '))
11揣非、python遞歸的最大層數(shù)?
答:998躲因,得到的最大數(shù)字在3925-3929之間浮動早敬,這個是和計(jì)算機(jī)有關(guān)系的,不然也不會是一個浮動的數(shù)字了(數(shù)學(xué)邏輯講求嚴(yán)謹(jǐn))大脉。
12搁嗓、求結(jié)果:
13、ascii箱靴、unicode腺逛、utf-8、gbk 區(qū)別衡怀?
答:ASCII的編碼是128個字符?
GB2312編碼用來把中文編進(jìn)去的棍矛,日本把日文編進(jìn)Shift_JIS里...
GBK是GB2312的擴(kuò)展字符集安疗,支持繁體字,兼容GB2312
Unicode是為了解決各國亂碼的够委,但浪費(fèi)存儲空間?
UTF-8字符編碼把一個Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6字節(jié)荐类,英文字符是1個字節(jié),漢字通常是3個字節(jié)茁帽,生僻字符是4-6個字節(jié)
14玉罐、字節(jié)碼和機(jī)器碼的區(qū)別?
答:機(jī)器碼是電腦CPU直接讀取運(yùn)行的機(jī)器指令潘拨,運(yùn)行速度最快吊输,但是非常晦澀難懂铁追,也比較難編寫季蚂,一般從業(yè)人員接觸不到。
字節(jié)碼是一種中間狀態(tài)(中間碼)的二進(jìn)制代碼(文件)琅束。需要直譯器轉(zhuǎn)譯后才能成為機(jī)器碼扭屁。
15、三元運(yùn)算規(guī)則以及應(yīng)用場景涩禀?
答:三元運(yùn)算符就是在賦值變量的時候料滥,可以直接加判斷,然后賦值
16艾船、列舉 Python2和Python3的區(qū)別葵腹?
答:https://www.cnblogs.com/kendrick/p/7478304.html
Python3對Unicode字符的原生支持
Python3采用的是絕對路徑的方式進(jìn)行import。
Python2中存在老式類和新式類的區(qū)別丽声,Python3統(tǒng)一采用新式類。新式類聲明要求繼承object觉义,必須用新式類應(yīng)用多重繼承雁社。
Python3使用更加嚴(yán)格的縮進(jìn)。
17晒骇、用一行代碼實(shí)現(xiàn)數(shù)值交換:
答 ?a,b = b,a
18霉撵、Python3和Python2中 int 和 long的區(qū)別?
答:在python3里洪囤,只有一種整數(shù)類型int,大多數(shù)情況下徒坡,和python2中的長整型類似。
19瘤缩、xrange和range的區(qū)別喇完?
答:xrange 用法與 range 完全相同,所不同的是生成的不是一個list對象剥啤,而是一個生成器锦溪。要生成很大的數(shù)字序列的時候不脯,用xrange會比range性能優(yōu)很多,因?yàn)椴恍枰簧蟻砭烷_辟一塊很大的內(nèi)存空間刻诊。
20防楷、文件操作時:xreadlines和readlines的區(qū)別?
答:readlines() 讀取文件所有內(nèi)容则涯,按行為單位放到一個列表中复局,返回list類型。
xreadlines()返回一個生成器粟判,來循環(huán)操作文件的每一行亿昏。循環(huán)使用時和readlines基本一樣,但是直接打印就不同
21浮入、列舉布爾值為False的常見值龙优?
答:bool(0),-0,"",False
22、字符串事秀、列表彤断、元組、字典每個常用的5個方法易迹?
答:str[1:-1],str.split('.'),''.join(),str.strip(),str.count(),len(str)
list.append(), 在列表末尾添加新的對象
list.clear()清空列表
list.pop(),list.remove(),list.reverse(),list.sort()
tuple[0], del tuple,len(tuple),cmp(tuple),max(tuple)
dict[key],dict.popitem(),del dict[key],d.clear() 清空字典,dict.get('name')
23宰衙、lambda表達(dá)式格式以及應(yīng)用場景?
答:Python中睹欲,也有幾個定義好的全局函數(shù)方便使用的供炼,filter, map, reduce
24、pass的作用窘疮?
答:pass 不做任何事情袋哼,一般用做占位語句。
25闸衫、*arg和**kwarg作用
答:當(dāng)傳入了更多實(shí)參的時候
*arg會把多出來的位置參數(shù)轉(zhuǎn)化為tuple
**kwarg會把關(guān)鍵字參數(shù)轉(zhuǎn)化為dict
26涛贯、is和==的區(qū)別
答:is也被叫做同一性運(yùn)算符,這個運(yùn)算符比較判斷的是對象間的唯一身份標(biāo)識蔚出,也就是id是否相同弟翘。
==是python標(biāo)準(zhǔn)操作符中的比較操作符,用來比較判斷兩個對象的value(值)是否相等
27骄酗、簡述Python的深淺拷貝以及應(yīng)用場景稀余?
答:淺拷貝指僅僅拷貝數(shù)據(jù)集合的第一層數(shù)據(jù),深拷貝指拷貝數(shù)據(jù)集合的所有層趋翻。所以對于只有一層的數(shù)據(jù)集合來說深淺拷貝的意義是一樣的睛琳,比如字符串,數(shù)字,還有僅僅一層的字典掸掏、列表茁影、元祖等.
對于 數(shù)字 和 字符串 而言,賦值丧凤、淺拷貝和深拷貝無意義募闲,因?yàn)槠溆肋h(yuǎn)指向同一個內(nèi)存地址。
28愿待、Python垃圾回收機(jī)制浩螺?
答:Python的GC模塊主要運(yùn)用了引用計(jì)數(shù)來跟蹤和回收垃圾。在引用計(jì)數(shù)的基礎(chǔ)上仍侥,還可以通過“標(biāo)記-清除”解決容器對象可能產(chǎn)生的循環(huán)引用的問題要出。
29、Python的可變類型和不可變類型农渊?
答:可變類型:list患蹂,dict
不可變類型:int,long砸紊,bool传于,str,tuple
30醉顽、求結(jié)果:
31沼溜、求結(jié)果:
32、列舉常見的內(nèi)置函數(shù)游添?
答:doc系草,print,raw_input,abs,round,power
33唆涝、filter找都、map、reduce的作用廊酣?
答:filter 篩選
map 匹配
reduce 累加
34能耻、一行代碼實(shí)現(xiàn)9*9乘法表
答:print (["%d*%d=%d"%(i,j,i*j) for i in range(1,10)for j in range(1,i+1)])
35、如何安裝第三方模塊啰扛?以及用過哪些第三方模塊嚎京?
答:pip install 嗡贺,request隐解,json
36、至少列舉8個常用模塊都有那些诫睬?
答:json煞茫,re,request,sys(sys.path)续徽,math(pow)蚓曼,random,decimal钦扭,time
37纫版、re的match和search區(qū)別?
答:match()函數(shù)只檢測RE是不是在string的開始位置匹配客情,
?search()會掃描整個string查找匹配其弊;
38、什么是正則的貪婪匹配膀斋?
答:貪婪模式是把所有匹配的獲取到,非貪婪模式只取到第一個匹配到的字符串,
39梭伐、求結(jié)果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
答:a:[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
b:返回是個生成器
40、求結(jié)果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
答:a:1 b:2 c:False d:True
41仰担、def func(a,b=[]) 這種寫法有什么坑糊识?
答:函數(shù)的默認(rèn)參數(shù)是一個list 當(dāng)?shù)谝淮螆?zhí)行的時候?qū)嵗艘粋€list 第二次執(zhí)行還是用第一次執(zhí)行的時候?qū)嵗牡刂反鎯?所以三次執(zhí)行的結(jié)果就是 [1, 1, 1] 想每次執(zhí)行只輸出[1] ,默認(rèn)參數(shù)應(yīng)該設(shè)置為None
42摔蓝、如何實(shí)現(xiàn) “1,2,3” 變成 [‘1’,’2’,’3’] ?
答:str1 = "1,2,3"
print (list(str1.replace(',','')))
43赂苗、如何實(shí)現(xiàn)[‘1’,’2’,’3’]變成[1,2,3] ?
答:list1 = ['1','2','3']
list2 = []
for i in list1:
? ? list2.append(int(i))
print (list2)
44、比較: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區(qū)別项鬼?
答:列表里面的內(nèi)容不一樣
45哑梳、如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100] ?
答:print (list(int(i) for i in (["%d"% (x*x ) for x in range(1,11)])))
46、一行代碼實(shí)現(xiàn)刪除列表中重復(fù)的值 ?
答:print set(list1)
47绘盟、如何在函數(shù)中設(shè)置一個全局變量 ?
答:global
48鸠真、logging模塊的作用?以及應(yīng)用場景龄毡?
答:使用python的標(biāo)準(zhǔn)日志模塊logging可以非常方便地記錄日志吠卷。
(1)程序調(diào)試
(2)了解軟件程序運(yùn)行情況,是否正常
(3)軟件程序運(yùn)行故障分析與問題定位
49沦零、請用代碼簡單實(shí)現(xiàn)stack 祭隔。
答:classStack(object):?
?def__init__(object): ?self.stack = []
? ? defpush(self, value):? ? ? ? self.stack.append(value)
? ? defpop(self):? ? ? ? if self.stack:
? ? ? ? ? ? self.stack.pop()
? ? ? ? else:
? ? ? ? ? ? raise LookupError('stack is empty!')
? ? defis_empty(self):? ? ? ? return bool(self.stack)
? ? deftop(self):? ? ? ? #取出目前stack中最新的元素? ? ? ? return self.stack[-1]
50、常用字符串格式化哪幾種路操?
答:print('hello?%(first)s?and?%(second)s'%{'first':'df','second':'another df'})
51疾渴、簡述 生成器、迭代器屯仗、可迭代對象 以及應(yīng)用場景搞坝?
答:迭代器是訪問集合元素的一種方式,迭代器只能往前不會后退;
帶有 yield 的函數(shù)在 Python 中被稱之為 generator(生成器)魁袜,生成器其實(shí)是一種特殊的迭代器
可以返回一個迭代器的對象都可稱之為可迭代對象
52桩撮、用Python實(shí)現(xiàn)一個二分查找的函數(shù)敦第。
答:def BinarySearch(arr, key):
if keyin arr :
return arr.index(key)
else:
print "找不到數(shù)字"
53、談?wù)勀銓﹂]包的理解店量?
答:在一個外函數(shù)中定義了一個內(nèi)函數(shù)芜果,內(nèi)函數(shù)里運(yùn)用了外函數(shù)的臨時變量,并且外函數(shù)的返回值是內(nèi)函數(shù)的引用融师。這樣就構(gòu)成了一個閉包右钾。
54、os和sys模塊的作用旱爆?
答:os模塊負(fù)責(zé)程序與操作系統(tǒng)的交互霹粥,提供了訪問操作系統(tǒng)底層的接口;sys模塊負(fù)責(zé)程序與python解釋器的交互,提供了一系列的函數(shù)和變量疼鸟,用于操控python的運(yùn)行時環(huán)境后控。
55、如何生成一個隨機(jī)數(shù)空镜?
答:import random
print random.randint(1,10)
56浩淘、如何使用python刪除一個文件?
答:import os
os.remove(file_path)
57吴攒、談?wù)勀銓γ嫦驅(qū)ο蟮睦斫猓?/p>
答:封裝张抄、繼承、多態(tài)
58洼怔、Python面向?qū)ο笾械睦^承有什么特點(diǎn)署惯?
答:單繼承、多繼承?
重寫 父類方法有兩種情況:
1.覆蓋 父類的方法 2.對父類方法進(jìn)行 擴(kuò)展
59镣隶、面向?qū)ο笊疃葍?yōu)先和廣度優(yōu)先是什么极谊?
答:深度優(yōu)先 廣度優(yōu)先
60、面向?qū)ο笾衧uper的作用安岂?
答:super()?函數(shù)是用于調(diào)用父類(超類)的一個方法轻猖。
super 是用來解決多重繼承問題的,直接用類名調(diào)用父類方法在使用單繼承的時候沒問題域那,但是如果使用多繼承咙边,會涉及到查找順序(MRO)、重復(fù)調(diào)用(鉆石繼承)等種種問題次员。
MRO 就是類的方法解析順序表, 其實(shí)也就是繼承父類方法時的順序表败许。
61、是否使用過functools中的函數(shù)淑蔚?其作用是什么市殷?
答:functools模塊中有兩個方法是從_functools引入的,分別是partial和reduce函數(shù)束倍。
62被丧、列舉面向?qū)ο笾袔聞澗€的特殊方法,如:__new__绪妹、__init__
答:__init__(self,...) 甥桂、__del__(self) 、__call__(self,?*args) 邮旷、__str__(self方法)黄选、__add__、__dic__婶肩、__getitem__办陷、__setitem__、__delitem__律歼、__iter__
63民镜、如何判斷是函數(shù)還是方法?
答:(1)函數(shù)要手動傳self险毁,方法不用傳self
(2)如果是一個函數(shù)制圈,用類名去調(diào)用,如果是一個方法畔况,用對象去調(diào)用?
64鲸鹦、靜態(tài)方法和類方法區(qū)別?
答:(1)靜態(tài)方法就是一個普通的方法跷跪,與類和對象無關(guān)
(2)類方法就是JAVA里面的類方法馋嗜,屬于類,被各個對象共享
65吵瞻、列舉面向?qū)ο笾械奶厥獬蓡T以及應(yīng)用場景
答:https://www.jb51.net/article/111964.htm
66葛菇、1、2橡羞、3熟呛、4、5 能組成多少個互不相同且無重復(fù)的三位數(shù)
答:list1 = []
for iin range(1,6):
for jin range(i,6):
for kin range(j,6):
if (i != j) & (j!=k):
list1.append(i*100+j*10+k)
print len(list1)
67尉姨、什么是反射庵朝?以及應(yīng)用場景?
答:python的反射又厉,它的核心本質(zhì)其實(shí)就是利用字符串的形式去對象(模塊)中操作(查找/獲取/刪除/添加)成員九府,一種基于字符串的事件驅(qū)動!python的四個重要內(nèi)置函數(shù):getattr覆致、hasattr侄旬、delattr和setattr較為全面的實(shí)現(xiàn)了基于字符串的反射機(jī)制
68、metaclass作用煌妈?以及應(yīng)用場景儡羔?
答:metaclass的實(shí)例化結(jié)果是類宣羊,而class實(shí)例化的結(jié)果是instanc
69寥袭、用盡量多的方法實(shí)現(xiàn)單例模式所意。
答:https://www.cnblogs.com/huchong/p/8244279.html
70橘霎、裝飾器的寫法以及應(yīng)用場景荒叶。
答:參數(shù)檢查(Agrument checking)
緩存(Caching)
代理(Proxy)
提供上下文(Context Provider)
71凡伊、異常處理寫法以及如何主動跑出異常(應(yīng)用場景)
答:try except
72交胚、什么是面向?qū)ο蟮膍ro
答:對于你定義的每一個類中鼠,python會計(jì)算出一個方法解析順序(MRO)列表胯究,這個MRO列表就是一個簡單的所有基類的線性順序列表
73色难、isinstance作用以及應(yīng)用場景泼舱?
答:來判斷一個對象是否是一個已知的類型
74、寫代碼并實(shí)現(xiàn):
75枷莉、json序列化時娇昙,可以處理的數(shù)據(jù)類型有哪些?如何定制支持datetime類型笤妙?
答:s
76涯贞、json序列化時,默認(rèn)遇到中文會轉(zhuǎn)換成unicode危喉,如果想要保留中文怎么辦宋渔?
答:在編程過程還發(fā)現(xiàn)一個問題,在序列化時辜限,中文漢字總是被轉(zhuǎn)換為unicode碼皇拣,在網(wǎng)上搜索后發(fā)現(xiàn),在dumps函數(shù)中添加參數(shù)ensure_ascii=False即可解決
77薄嫡、什么是斷言氧急?應(yīng)用場景?
答:沒有特定的規(guī)則毫深,斷言應(yīng)該用于:
??? 防御型的編程
??? 運(yùn)行時檢查程序邏輯
??? 檢查約定
??? 程序常量
??? 檢查文檔
78吩坝、有用過with statement嗎?它的好處是什么哑蔫?
答:with語句適用于對資源進(jìn)行訪問的場合钉寝,確保不管使用過程中是否發(fā)生異常都會執(zhí)行必要的“清理”操作,釋放資源闸迷,比如文件使用后自動關(guān)閉嵌纲、線程中鎖的自動獲取和釋放等。
79腥沽、使用代碼實(shí)現(xiàn)查看列舉目錄下的所有文件逮走。
答:importos
forfilename inos.listdir(r'c:\\windows'):
printfilename
80、簡述 yield和yield from關(guān)鍵字今阳。
答:yield from 是 Python3.3 后新加的語言結(jié)構(gòu)师溅。在其他語言中茅信,類似的結(jié)構(gòu)使用 await 關(guān)鍵字,這個名稱好多了墓臭,因?yàn)樗鼈鬟_(dá)了至關(guān)重要的一點(diǎn):在生成器 gen 中使用 yield from subgen() 時蘸鲸,subgen 會獲得控制權(quán),把產(chǎn)出的值傳給 gen 的調(diào)用方起便,即調(diào)用方可以直接控制 subgen。與此同時窖维,gen 會阻塞榆综,等待 subgen 終止。