第一部分 Python基礎(chǔ)篇(80題)
面試題,來自配齊老師的315題,個(gè)人整理用~
基礎(chǔ)題(80題):
1.為什么學(xué)習(xí)Python?
2.通過什么途徑學(xué)習(xí)的Python?
3.Python和Java、PHP、C、C#、C++等其他語(yǔ)言的對(duì)比?
4.簡(jiǎn)述解釋型和編譯型編程語(yǔ)言?
解釋型語(yǔ)言編寫的程序不需要編譯,每個(gè)語(yǔ)句都是執(zhí)行的時(shí)候才翻譯,邊執(zhí)行,邊編譯。
用編譯型語(yǔ)言寫的程序執(zhí)行之前,需要一個(gè)專門的編譯過程,通過編譯系統(tǒng),把源高級(jí)程序編譯成為機(jī)器語(yǔ)言文件(先編譯,再執(zhí)行)
5.Python解釋器種類以及特點(diǎn)?
CPython
當(dāng) 從Python官方網(wǎng)站下載并安裝好Python2.7后,就直接獲得了一個(gè)官方版本的解釋器:Cpython,這個(gè)解釋器是用C語(yǔ)言開發(fā)的,所以叫 CPython,在命名行下運(yùn)行python,就是啟動(dòng)CPython解釋器,CPython是使用最廣的Python解釋器。
IPython
IPython是基于CPython之上的一個(gè)交互式解釋器,也就是說,IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的,好比很多國(guó)產(chǎn)瀏覽器雖然外觀不同,但內(nèi)核其實(shí)是調(diào)用了IE。
PyPy
PyPy是另一個(gè)Python解釋器,它的目標(biāo)是執(zhí)行速度,PyPy采用JIT技術(shù),對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯,所以可以顯著提高Python代碼的執(zhí)行速度。
Jython
Jython是運(yùn)行在Java平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。
IronPython
IronPython和Jython類似,只不過IronPython是運(yùn)行在微軟.Net平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼。
在Python的解釋器中,使用廣泛的是CPython,對(duì)于Python的編譯,除了可以采用以上解釋器進(jìn)行編譯外,技術(shù)高超的開發(fā)者還可以按照自己的需求自行編寫Python解釋器來執(zhí)行Python代碼,十分的方便!
6.位和字節(jié)的關(guān)系?
最小的存儲(chǔ)單位稱為位(bit);只能容納兩個(gè)值(0或1)之一,不能在一個(gè)位中存儲(chǔ)更多的信息。位是計(jì)算機(jī)存儲(chǔ)的基本單位。
字節(jié)(byte)是常用的計(jì)算機(jī)存儲(chǔ)單位。字節(jié)的標(biāo)準(zhǔn)定義:一個(gè)字節(jié)均為8位。由于上述所講每個(gè)位或者是0或者是1,所以一個(gè)8位的字節(jié)包含256種可能的0,1組合
7.b、B、KB、MB、GB 的關(guān)系?
8.請(qǐng)至少列舉5個(gè) PEP8 規(guī)范(越多越好)。
空白: (1) 使用space(空格)來表示縮進(jìn),而不要用tab(制表符) (2) 和語(yǔ)法相關(guān)的每一層縮進(jìn)都用4個(gè)空格來表示 (3) 每行字符數(shù)不應(yīng)該超過79個(gè) (4) 對(duì)于占據(jù)多行的長(zhǎng)表達(dá)式來說,除了首行之外的其余各行都應(yīng)該在通常的縮進(jìn)級(jí)別之上再加4個(gè)空格 (5) 文件中的函數(shù)與類之間應(yīng)該用兩個(gè)空行隔開 (6) 同一個(gè)類中,各方法之間應(yīng)該用一個(gè)空行隔開 (7) 使用下標(biāo)來獲取元素、調(diào)用函數(shù)或給關(guān)鍵字參數(shù)賦值的時(shí)候,不要在兩邊加空格 (8) 為變量賦值的時(shí)候,賦值符號(hào)的左側(cè)和右側(cè)應(yīng)該各自加上一個(gè)空格 命名:略 表達(dá)式和語(yǔ)句:略
9.通過代碼實(shí)現(xiàn)如下轉(zhuǎn)換:
二進(jìn)制轉(zhuǎn)換成十進(jìn)制:v = “0b1111011”?
十進(jìn)制轉(zhuǎn)換成二進(jìn)制:v = 18?
八進(jìn)制轉(zhuǎn)換成十進(jìn)制:v = “011”?
十進(jìn)制轉(zhuǎn)換成八進(jìn)制:v = 30?
十六進(jìn)制轉(zhuǎn)換成十進(jìn)制:v = “0x12”?
十進(jìn)制轉(zhuǎn)換成十六進(jìn)制:v = 87
10.請(qǐng)編寫一個(gè)函數(shù)實(shí)現(xiàn)將IP地址轉(zhuǎn)換成一個(gè)整數(shù)。
如 10.3.9.12 轉(zhuǎn)換規(guī)則為:
10 00001010
? 3 00000011?
9 00001001
? 12 00001100?
再將以上二進(jìn)制拼接起來計(jì)算十進(jìn)制結(jié)果:00001010 00000011 00001001 00001100 = ?
11.python遞歸的最大層數(shù)?
答案:998,不超過1000。這是python專門設(shè)置的一種機(jī)制用來防止無限遞歸造成Python溢出崩潰。
12.求結(jié)果:
v1 = 1 or 3?
v2 = 1 and 3?
v3 = 0 and 2 and 1
? v4 = 0 and 2 or 1
? v5 = 0 and 2 or 1 or 4
? v6 = 0 or Flase and 1
13.ascii、unicode、utf-8、gbk 區(qū)別?
14.字節(jié)碼和機(jī)器碼的區(qū)別?
15.三元運(yùn)算規(guī)則以及應(yīng)用場(chǎng)景?
16.列舉 Python2和Python3的區(qū)別
17.用一行代碼實(shí)現(xiàn)數(shù)值交換:
? a = 1
? b = 2
18.Python3和Python2中 int 和 long的區(qū)別?
19.xrange和range的區(qū)別?
View Code
20.文件操作時(shí):xreadlines和readlines的區(qū)別?
readline()方法從字面意思可以看出,該方法每次讀出一行內(nèi)容,所以,讀取時(shí)占用內(nèi)存小,比較適合大文件,該方法返回一個(gè)字符串對(duì)象。
readlines()方法讀取整個(gè)文件所有行,保存在一個(gè)列表(list)變量中,每行作為一個(gè)元素,但讀取大文件會(huì)比較占內(nèi)存。
21.列舉布爾值為False的常見值?
22.字符串、列表、元組、字典每個(gè)常用的5個(gè)方法?
23.lambda表達(dá)式格式以及應(yīng)用場(chǎng)景?
24.pass的作用?
25.*arg和**kwarg作用
*arg和**kwarg 可以幫助我們處理上面這種情況,允許我們?cè)谡{(diào)用函數(shù)的時(shí)候傳入多個(gè)實(shí)參 *arg會(huì)把多出來的位置參數(shù)轉(zhuǎn)化為tuple **kwarg會(huì)把關(guān)鍵字參數(shù)轉(zhuǎn)化為dict
26.is和==的區(qū)別
==是python標(biāo)準(zhǔn)操作符中的比較操作符,用來比較判斷兩個(gè)對(duì)象的value(值)是否相等 is也被叫做同一性運(yùn)算符,這個(gè)運(yùn)算符比較判斷的是對(duì)象間的唯一身份標(biāo)識(shí),也就是id是否相同 例子: >>> x = y = [4,5,6] >>> z = [4,5,6] >>> x == y True >>> x == z True >>> x is y True >>> x is z False
27.簡(jiǎn)述Python的深淺拷貝以及應(yīng)用場(chǎng)景?
導(dǎo)入模塊:import copy 淺拷貝:copy.copy 深拷貝:copy.deepcopy 字面理解:淺拷貝指僅僅拷貝數(shù)據(jù)集合的第一層數(shù)據(jù),深拷貝指拷貝數(shù)據(jù)集合的所有層。所以對(duì)于只有一層的數(shù)據(jù)集合來說深淺拷貝的意義是一樣的,比如字符串,數(shù)字,還有僅僅一層的字典、列表、元祖等. 對(duì)于數(shù)字和字符串的深淺拷貝都只是將變量的索引指向了原來的內(nèi)存地址,例如在sum,sum1,sum2三個(gè)變量中,無論修改任意其中一個(gè)變量,只是將其指向了另一個(gè)內(nèi)存地址,其他兩個(gè)變量不會(huì)變,字符串同理。因此,對(duì)于 數(shù)字 和 字符串 而言,賦值、淺拷貝和深拷貝無意義,因?yàn)槠溆肋h(yuǎn)指向同一個(gè)內(nèi)存地址。 深淺拷貝都是對(duì)源對(duì)象的復(fù)制,占用不同的內(nèi)存空間 如果源對(duì)象只有一級(jí)目錄的話,源做任何改動(dòng),不影響深淺拷貝對(duì)象(如:字符串和數(shù)字類型) 如果源對(duì)象不止一級(jí)目錄的話,源做任何改動(dòng),都要影響淺拷貝,但不影響深拷貝 序列對(duì)象的切片其實(shí)是淺拷貝,即只拷貝頂級(jí)的對(duì)象
28.Python垃圾回收機(jī)制?
Python語(yǔ)言默認(rèn)采用的垃圾收集機(jī)制是『引用計(jì)數(shù)法 Reference Counting』
『引用計(jì)數(shù)法』的原理是:每個(gè)對(duì)象維護(hù)一個(gè)ob_ref字段,用來記錄該對(duì)象當(dāng)前被引用的次數(shù),每當(dāng)新的引用指向該對(duì)象時(shí),它的引用計(jì)數(shù)ob_ref加1,每當(dāng)該對(duì)象的引用失效時(shí)計(jì)數(shù)ob_ref減1,一旦對(duì)象的引用計(jì)數(shù)為0,該對(duì)象立即被回收,對(duì)象占用的內(nèi)存空間將被釋放
它的缺點(diǎn)是需要額外的空間維護(hù)引用計(jì)數(shù),這個(gè)問題是其次的,不過最主要的問題是它不能解決對(duì)象的“循環(huán)引用”,因此,也有很多語(yǔ)言比如Java并沒有采用該算法做來垃圾的收集機(jī)制。
29.Python的可變類型和不可變類型?
Python的每個(gè)對(duì)象都分為可變和不可變,主要的核心類型中,數(shù)字、字符串、元組是不可變的,列表、字典是可變的。
對(duì)不可變類型的變量重新賦值,實(shí)際上是重新創(chuàng)建一個(gè)不可變類型的對(duì)象,并將原來的變量重新指向新創(chuàng)建的對(duì)象(如果沒有其他變量引用原有對(duì)象的話(即引用計(jì)數(shù)為0),原有對(duì)象就會(huì)被回收)。
30.求結(jié)果:
? v = dict.fromkeys(['k1','k2'],[])?
v[‘k1’].append(666)
? print(v)?
v[‘k1’] = 777
? print(v)
31.求結(jié)果
def num():
return [lambda x : i*x for i in range(4)]
print ([m(2) for m in num()])
32.列舉常見的內(nèi)置函數(shù)?
33.filter、map、reduce的作用?
(1) filter, 遍歷序列中每個(gè)元素,判定每個(gè)元素得到的布爾值,如果是True,則留下來,一般用于過濾作用 (2)map, 處理系列中每個(gè)元素,得到的結(jié)果是個(gè)“列表”,該列表元素個(gè)數(shù)和位置與原來一樣 (3)reduce, 處理一個(gè)序列,然后把序列進(jìn)行合并操作(在python3中需要導(dǎo)入模塊,from funtools import reduce)
34.一行代碼實(shí)現(xiàn)9*9乘法表
print "\n".join("\t".join(["%s*%s=%s" %(x,y,x*y) for y in range(1, x+1)]) for x in range(1, 10))
35.如何安裝第三方模塊?以及用過哪些第三方模塊?
36.至少列舉8個(gè)常用模塊都有那些?
37.re的match和search區(qū)別?
match()函數(shù)只檢測(cè)RE是不是在string的開始位置匹配, search()會(huì)掃描整個(gè)string查找匹配; 也就是說match()只有在0位置匹配成功的話才有返回, 如果不是開始位置匹配成功的話,match()就返回none。 例如: print(re.match(‘super’, ‘superstition’).span()) 會(huì)返回(0, 5) 而print(re.match(‘super’, ‘insuperable’)) 則返回None search()會(huì)掃描整個(gè)字符串并返回第一個(gè)成功的匹配 例如:print(re.search(‘super’, ‘superstition’).span())返回(0, 5) print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)
38.什么是正則的貪婪匹配?
貪婪匹配:正則表達(dá)式一般趨向于最大長(zhǎng)度匹配,也就是所謂的貪婪匹配。如上面使用模式p匹配字符串str,結(jié)果就是匹配到:abcaxc(ab.*c)。 非貪婪匹配:就是匹配到結(jié)果就好,就少的匹配字符。如上面使用模式p匹配字符串str,結(jié)果就是匹配到:abc(ab.*c)。 默認(rèn)是貪婪模式;在量詞后面直接加上一個(gè)問號(hào)?就是非貪婪模式。
39.求結(jié)果:? a. [ i % 2 for i in range(10) ]? b. ( i % 2 for i in range(10) )
40.求結(jié)果:? a. 1 or 2? b. 1 and 2? c. 1 < (2==2)? d. 1 < 2 == 2
41. func(a,b=[]) 這種寫法有什么坑?
def func(a,b=[]): b.append(a) print(b) func(1) func(1) func(1) func(1) 看下結(jié)果 [1] [1, 1] [1, 1, 1] [1, 1, 1, 1] 函數(shù)的第二個(gè)默認(rèn)參數(shù)是一個(gè)list,當(dāng)?shù)谝淮螆?zhí)行的時(shí)候?qū)嵗艘粋€(gè)list,第二次執(zhí)行還是用第一次執(zhí)行的時(shí)候?qū)嵗牡刂反鎯?chǔ),所以三次執(zhí)行的結(jié)果就是 [1, 1, 1] ,想每次執(zhí)行只輸出[1] ,默認(rèn)參數(shù)應(yīng)該設(shè)置為None。
42.如何實(shí)現(xiàn) “1,2,3” 變成 [‘1’,’2’,’3’] ?
43.如何實(shí)現(xiàn)[‘1’,’2’,’3’]變成[1,2,3] ?
44.比較: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區(qū)別?
45.如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100]
46.一行代碼實(shí)現(xiàn)刪除列表中重復(fù)的值 ?
47.如何在函數(shù)中設(shè)置一個(gè)全局變量 ?
有一個(gè)全局file_content 的list,在函數(shù)內(nèi)部向其append數(shù)據(jù),是可以的,不需要加global 修飾,
但是當(dāng) 在函數(shù)內(nèi)部進(jìn)行對(duì)其 賦值操作時(shí),需要用global修飾該全局變量,因?yàn)橘x值操作默認(rèn)作為局部變量,
對(duì)全局變量進(jìn)行賦值修改,需要進(jìn)行顯示global聲明
每一次讀取file_content時(shí)候,讀取完或者開始讀取的時(shí)候要重新對(duì)該list清空,
防止每次讀取都會(huì)將上一次內(nèi)容讀重復(fù)讀取到,所以在賦值為空的時(shí)候 就必須用到global修飾該list變量,
48.logging模塊的作用?以及應(yīng)用場(chǎng)景?
Python的logging模塊提供了通用的日志系統(tǒng),可以方便第三方模塊或者是應(yīng)用使用。這個(gè)模塊提供不同的日志級(jí)別,并可以采用不同的方式記錄日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己實(shí)現(xiàn)具體的日志記錄方式。
使用場(chǎng)景的,比如說:開發(fā)一個(gè)日志系統(tǒng), 既要把日志輸出到控制臺(tái), 還要寫入日志文件。
49.請(qǐng)用代碼簡(jiǎn)答實(shí)現(xiàn)stack
50.常用字符串格式化哪幾種?
第一種:最方便的 缺點(diǎn):需一個(gè)個(gè)的格式化 print('hello %s and %s'%('df','another df')) 第二種:最好用的 優(yōu)點(diǎn):不需要一個(gè)個(gè)的格式化,可以利用字典的方式,縮短時(shí)間 print('hello %(first)s and %(second)s'%{'first':'df' , 'second':'another df'}) 第三種:最先進(jìn)的 優(yōu)點(diǎn):可讀性強(qiáng) print('hello {first} and {second}'.format(first='df',second='another df'))
51.簡(jiǎn)述 生成器、迭代器、可迭代對(duì)象 以及應(yīng)用場(chǎng)景?
迭代器的應(yīng)用場(chǎng)景 1). 如果數(shù)列的數(shù)據(jù)規(guī)模巨大 2). 數(shù)列有規(guī)律,但是依靠列表推導(dǎo)式描述不出來
52.用Python實(shí)現(xiàn)一個(gè)二分查找的函數(shù)。
data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35] def binary_search(dataset,find_num): if len(dataset) > 1: mid = int(len(dataset) / 2) if dataset[mid] == find_num: # find it print("找到數(shù)字", dataset[mid]) elif dataset[mid] > find_num: # 找的數(shù)在mid左面 print("\033[31;1m找的數(shù)在mid[%s]左面\033[0m" % dataset[mid]) return binary_search(dataset[0:mid], find_num) else: # 找的數(shù)在mid右面 print("\033[32;1m找的數(shù)在mid[%s]右面\033[0m" % dataset[mid]) return binary_search(dataset[mid + 1:], find_num) else: if dataset[0] == find_num: # find it print("找到數(shù)字啦", dataset[0]) else: print("沒的分了,要找的數(shù)字[%s]不在列表里" % find_num) binary_search(data,20)
53.談?wù)勀銓?duì)閉包的理解?
54.os和sys模塊的作用?
os模塊提供了一種方便的使用操作系統(tǒng)函數(shù)的方法。
sys模塊可供訪問由解釋器使用或維護(hù)的變量和與解釋器進(jìn)行交互的函數(shù)。
總結(jié)就是,os模塊負(fù)責(zé)程序與操作系統(tǒng)的交互,提供了訪問操作系統(tǒng)底層的接口;sys模塊負(fù)責(zé)程序與python解釋器的交互,提供了一系列的函數(shù)和變量,用于操控python的運(yùn)行時(shí)環(huán)境。
55.如何生成一個(gè)隨機(jī)數(shù)?
56.如何使用python刪除一個(gè)文件?
57.談?wù)勀銓?duì)面向?qū)ο蟮睦斫猓?/h3>
58.Python面向?qū)ο笾械睦^承有什么特點(diǎn)?
http://www.rzrgm.cn/emily-qin/p/7059638.html
59.面向?qū)ο笊疃葍?yōu)先和廣度優(yōu)先是什么?
60.面向?qū)ο笾衧uper的作用?
61.是否使用過functools中的函數(shù)?其作用是什么?
Python自帶的 functools 模塊提供了一些常用的高階函數(shù),也就是用于處理其它函數(shù)的特殊函數(shù)。換言之,就是能使用該模塊對(duì)可調(diào)用對(duì)象進(jìn)行處理。
具體參考:http://www.rzrgm.cn/Roc-Atlantis/p/9438983.html
62.列舉面向?qū)ο笾袔聞澗€的特殊方法,如:__new__、__init__
63.如何判斷是函數(shù)還是方法?
64.靜態(tài)方法和類方法區(qū)別?
65.列舉面向?qū)ο笾械奶厥獬蓡T以及應(yīng)用場(chǎng)景?
1. __doc__ #輸出:類的描述信息 2. __module__ 和 __class__ __module__ 表示當(dāng)前操作的對(duì)象在那個(gè)模塊 __class__ 表示當(dāng)前操作的對(duì)象的類是什么 3. __init__ 構(gòu)造方法,通過類創(chuàng)建對(duì)象時(shí),自動(dòng)觸發(fā)執(zhí)行。 4. __del__ 析構(gòu)方法,當(dāng)對(duì)象在內(nèi)存中被釋放時(shí),自動(dòng)觸發(fā)執(zhí)行。 5. __call__ 對(duì)象后面加括號(hào),觸發(fā)執(zhí)行。即: 對(duì)象() 或 類()() 6. __dict__ 類或?qū)ο笾械乃谐蓡T 7. __str__ 如果一個(gè)類中定義了__str__方法,那么在打印 對(duì)象 時(shí),默認(rèn)輸出該方法的返回值。 8. __getitem__ __setitem__ __delitem__ 類似字典一樣索引的操作,以上分別表示獲取,設(shè)置,刪除。(當(dāng)在類外面做了這些操作后觸發(fā)這些函數(shù),甚至可刪除不存在的數(shù)據(jù)) 9. __new__ 用來將類實(shí)例化的
66.1、2、3、4、5 能組成多少個(gè)互不相同且無重復(fù)的三位數(shù)
67.什么是反射?以及應(yīng)用場(chǎng)景?
其實(shí),反射就是通過字符串的形式,導(dǎo)入模塊;通過字符串的形式,去模塊尋找指定函數(shù),并執(zhí)行。利用字符串的形式去對(duì)象(模塊)中操作(查找/獲取/刪除/添加)成員,一種基于字符串的事件驅(qū)動(dòng)!
使用場(chǎng)景:基于反射機(jī)制模擬web框架路由,
可插拔式,
動(dòng)態(tài)導(dǎo)入模塊
68.metaclass作用?以及應(yīng)用場(chǎng)景?
69.用盡量多的方法實(shí)現(xiàn)單例模式。
70.裝飾器的寫法以及應(yīng)用場(chǎng)景。
參考博客:https://blog.csdn.net/xiangxianghehe/article/details/77170585
71.異常處理寫法以及如何主動(dòng)跑出異常(應(yīng)用場(chǎng)景)
72.什么是面向?qū)ο蟮膍ro
MRO 列表 事實(shí)上,對(duì)于你定義的每一個(gè)類,Python 會(huì)計(jì)算出一個(gè)方法解析順序(Method Resolution Order, MRO)列表,它代表了類繼承的順序,我們可以使用下面的方式獲得某個(gè)類的 MRO 列表: >>> C.mro() # or C.__mro__ or C().__class__.mro() [__main__.C, __main__.A, __main__.B, __main__.Base, object] 1 2 >>> C.mro() # or C.__mro__ or C().__class__.mro() [__main__.C, __main__.A, __main__.B, __main__.Base, object] 那這個(gè) MRO 列表的順序是怎么定的呢,它是通過一個(gè) C3 線性化算法來實(shí)現(xiàn)的,這里我們就不去深究這個(gè)算法了,感興趣的讀者可以自己去了解一下,總的來說,一個(gè)類的 MRO 列表就是合并所有父類的 MRO 列表,并遵循以下三條原則: 子類永遠(yuǎn)在父類前面 如果有多個(gè)父類,會(huì)根據(jù)它們?cè)诹斜碇械捻樞虮粰z查 如果對(duì)下一個(gè)類存在兩個(gè)合法的選擇,選擇第一個(gè)父類
73.isinstance作用以及應(yīng)用場(chǎng)景?
使用場(chǎng)景:用于判斷一個(gè)對(duì)象是否是一個(gè)類或者其子類的實(shí)例。
在Python中可以使用type()與isinstance()這兩個(gè)函數(shù)判斷對(duì)象類型,而isinstance()函數(shù)的使用上比type更加方便。
用到場(chǎng)景,個(gè)人觀點(diǎn):
可能用于比較2個(gè)值的數(shù)據(jù)類型是否一致
74.寫代碼并實(shí)現(xiàn):
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would
have exactly one solution, and you may not use the same element twice.
Example:?
Given nums = [2, 7, 11, 15], target = 9,
?Because nums[0] + nums[1] = 2 + 7 = 9,?
return [0, 1]
75.json序列化時(shí),可以處理的數(shù)據(jù)類型有哪些?如何定制支持datetime類型?
76.json序列化時(shí),默認(rèn)遇到中文會(huì)轉(zhuǎn)換成unicode,如果想要保留中文怎么辦?
dumps時(shí)指定ensure_ascii=False
77.什么是斷言?應(yīng)用場(chǎng)景?
斷言其實(shí)是防止程序意外出錯(cuò)的一種宏,如果其參數(shù)計(jì)算為假,則程序發(fā)出警告,且退出。
最常見的用法就是在函數(shù)入口處保證輸入?yún)?shù)的正確性。
斷言條件為真時(shí)代碼繼續(xù)執(zhí)行,否則拋出異常,這個(gè)異常通常不會(huì)去捕獲他.我們?cè)O(shè)置一個(gè)斷言目的就是要求必須實(shí)現(xiàn)某個(gè)條件
78.有用過with statement嗎?它的好處是什么?
with語(yǔ)句的作用是通過某種方式簡(jiǎn)化異常處理,它是所謂的上下文管理器的一種 文件操作時(shí)使用過. with語(yǔ)句下代碼完成后調(diào)用求值語(yǔ)句返回對(duì)象的__exit__方法,可以實(shí)現(xiàn)一些操作,比如關(guān)閉文件。 with語(yǔ)句會(huì)在嵌套的代碼執(zhí)行之后,自動(dòng)關(guān)閉文件。這種做法的還有另一個(gè)優(yōu)勢(shì)就是,無論嵌套的代碼是以何種方式結(jié)束的,它都關(guān)閉文件。如果在嵌套的代碼中發(fā)生異常,它能夠在外部exception handler catch異常前關(guān)閉文件。如果嵌套代碼有return/continue/break語(yǔ)句,它同樣能夠關(guān)閉文件。
79.使用代碼實(shí)現(xiàn)查看列舉目錄下的所有文件。
# 遞歸的方式 def print_directory_contents(sPath): import os for sChild in os.listdir(sPath): sChildPath = os.path.join(sPath, sChild) if os.path.isdir(sChildPath): print_directory_contents(sChildPath) else: print(sChildPath)
80.簡(jiǎn)述 yield和yield from關(guān)鍵字。
yield : 生成器函數(shù)關(guān)鍵字 yield from : 相當(dāng)于for i in obj : yield i

浙公網(wǎng)安備 33010602011771號(hào)