版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
精心整理170道Python面試題
精心整理的Python相關的基礎知識,用于面試,或者平時
復習,都是很好的!廢話不多說,直接開搞
由于文章過長,蘿卜哥也貼心的把文章整理成了PDF文檔,
在文末查看獲取方式
基礎篇
1.為什么學習Python
2.解釋型和編譯型語言的區(qū)別
3.簡述下Python中的字符串、列表、元組和字典
4.簡述上述數據類型的常用方法
5.簡述Python中的字符串編碼
6.一行代碼實現數值交換
7.is和==的區(qū)別
8.Python函數中的參數類型
9.'米arg'和'**kwarg'作用
10.一行代碼實現1-100之和
11.獲取當前時間
12.PEP8規(guī)范
13.Python的深淺拷貝
14.查看下面代碼的輸出
15.可變類型與不可變類型
16.打印九九乘法表
17.filter>map、reduce的作用
18.re的match和search區(qū)別
19.面向對象中'_new_'和'_init_'區(qū)別
20.三元運算規(guī)則
21.生成隨機數
22.zip函數用法
23.range和xrange的區(qū)別
24.with方法打開文件的作用
25.什么是正則的貪婪匹配
26.為什么不建議函數的默認參數傳入可變對象
27.字符串轉列表
28.字符串轉整數
29.刪除列表中的重復值
30.字符串單詞統(tǒng)計
31.列表推導,求奇偶數
32.一行代碼展開列表
33.實現二分法查找函數
34.字典和json轉換
35.列表推導式、字典推導式和生成器
36.簡述read^readline>readlines的區(qū)別
37.打亂一個列表
38.反轉字符串
39.單下劃線和雙下劃線的作用
40.新式類和舊式類
41.Python面向對象中的繼承有什么特點
42.super函數的作用
43.類中的各種函數
44.如何判斷是函數還是方法
45.isinstance的作用以及與type()的區(qū)別
46.單例模式與工廠模式
47.查看目錄下的所有文件
48.計算1到5組成的互不重復的三位數
49.去除字符串首尾空格
50.去除字符串中間的空格
51.字符串格式化方式
52.將”helloworld”轉換為首字母大寫"HelloWorld”(不使用
title函數)
53.一行代碼轉換列表中的整數為字符串
54.合并兩個元組到字典
55.給出如下代碼的輸入,并簡單解釋
56.Python中的反射
57.實現一個簡單的API
58.metaclass兀類
59.sort和sorted的區(qū)別
60.Python中的GIL
61.產生8位隨機密碼
62.輸出原始字符
63.列表內,字典按照value大小排序
64.簡述any()和all()方法
65.反轉整數
66.函數式編程
67.簡述閉包
68.簡述裝飾器
69.協(xié)程的優(yōu)點
70.實現一個斐波那契數列
71.正則切分字符串
72.yield用法
73.冒泡排序
74快速排序
75.requests簡介
76.比較兩個json數據是否相等
77.讀取鍵盤輸入
78.enumerate
79.pass語句
80.正則匹配郵箱
81.統(tǒng)計字符串中大寫字母的數量
82.json序列化時保留中文
83.簡述繼承
84.什么是猴子補丁
85.help()函數和dir()函數
86.解釋Python中的和'**'運算符
87.主動拋出異常
88.tuple和list轉換
89.簡述斷言
9。.什么是異步非阻塞
91.什么是負索引
92.退出Python后,內存是否全部釋放
93.Flask和Django的異同
94.創(chuàng)建刪除操作系統(tǒng)上的文件
95.簡述logging模塊
96.統(tǒng)計字符串中單詞出現次數
97.正則plie的作用
98.tryexceptelsefinally的意義
99.反轉列表
100.字符串中數字替換
綜合篇:網絡編程
101.簡述OSI七層協(xié)議
102.三次握手、四次揮手的流程
103.什么是C/S和B/S架構
104.TCP和UDP的區(qū)別
105.局域網和廣域網
106.arp協(xié)議
107.什么是socket?簡述基于TCP協(xié)議的套接字通信流程
108.簡述進程、線程、協(xié)程的區(qū)別以及應用場景
109.如何使用線程池和進程池
110.進程之間如何進行通信
111.進程鎖和線程鎖
112.什么是并發(fā)和并行
113.threading.local的作用
114.什么是域名解析
115.LVS是什么及作用
116.Nginx的作用
117.keepalived及HAProxy
118.什么是rpc
119.從瀏覽器輸入一個網址到展示網址頁面的過程
120.什么是cdn
綜合篇:數據庫和框架
121.列舉常見的數據庫
122.數據庫設計三大范式
123.什么是數據庫事務
124.MySQL索引種類
125.數據庫設計中一對多和多對多的應用場景
126.簡述觸發(fā)器、函數、視圖、存儲過程
127.常用SQL語句
128.主鍵和外鍵的區(qū)別
129.如何開啟MySQL慢日志查詢
130.MySQL數據庫備份命令
131.char和varchar的區(qū)別
132.最左前綴原則
133.無法命中索引的情況
134.數據庫讀寫分離
135.數據庫分庫分表
136.redis和memcachecl比較
137.redis中數據庫默認是多少個db及作用
138.redis有哪幾種持久化策略
139.redis支持的過期策略
140.如何保證redis中的數據都是熱點數據
141.Python操作redis
142.基于redis實現發(fā)布和訂閱
143.如何高效的找到redis中的某個KEY
144.基于redis實現先進先出、后進先出及優(yōu)先級隊列
145.redis如何實現主從復制
146.循環(huán)獲取redis中某個非常大的列表數據
147.redis中的watch的命令的作用
148.redis分布式鎖
149.http協(xié)議
150.uwsgi,uWSGI和WSGI的區(qū)別
151.HTTP狀態(tài)碼
152.HTTP常見請求方式
153.響應式布局
154.實現一個簡單的AJAX請求
155.同源策略
156.什么是CORS
157.什么是CSRF
158.前端實現輪詢、長輪詢
159.簡述MVC和MTV
160.接口的幕等性
161.Flask框架的優(yōu)勢
162.什么是ORM
163.PV、UV的含義
164.supervisor的作用
165.使用ORM和原生SQL的優(yōu)缺點
166.列舉一些cljango的內置組件
167.列舉Django中執(zhí)行原生sql的方法
168.cookie和session的區(qū)別
169.beautifulsoup模塊的作用
170.Selenium模塊簡述
基礎篇
1.為什么學習Python
Python語言簡單易懂,上手容易,隨著AI風潮,越來越火
2.解釋型和編譯型語言的區(qū)別
編譯型語言:把做好的源程序全部編譯成二進制的可運行程
序。然后,可直接運行這個程序。如:C,C++解釋型語言:
把做好的源程序翻譯一句,然后執(zhí)行一句,直至結束!如:
Python,(Java有些特殊,java程序也需要編譯,但是沒有
直接編譯稱為機器語言,而是編譯稱為字節(jié)碼,然后用解釋
方式執(zhí)行字節(jié)碼。)
3.簡述下Python中的字符串、列表、元組和
字符串(str):字符串是用引號括起來的任意文本,是編程
語言中最常用的數據類型。列表(list):列表是有序的集合,
可以向其中添加或刪除元素。元組(tuple):元組也是有序
集合,但是是無法修改的。即元組是不可變的。字典(diet):
字典是無序的集合,是由key-value組成的。集合(set):
是一組key的集合,每個元素都是唯一,不重復且無序的。
4.簡述上述數據類型的常用方法
字符串:
切片mystr='luobodazahui'mystr[l:3]output'no'
2.
3.
formatmystr2="welcometoluobodazahui,dear{name}',
mystrZ.fb門nat(name="baby")output'welcometoluobodazahui,
dearbaby,
4.
5.
join可以用來連接字符串,將字符串、元組、列表中的元素
以指定的字符(分隔符)連接生成一個新的字符串。mylist二
'bo','da','za','hui'2jmystrS=-'.join(mylist)print(mystrS)
outout'luo-bo-da-za-hui'
6.
7.
replaceString.replace(old,new,count)將字符串中的old字符
替換為New字符,count為替換的個數mystr4=
'luobodazahui-haha'print(mystr4.replace('haha','good'))
8.
outputluobodazahui-good
1.split切割字符串,得到一個列表
|mystr5='luobo,dazahuigood
print(mystr5.splil。)|
print(mystr5.splil('h'))|
print(mystr5.splil(7))|
output
)o,daza*,*ui|
[luobo'Jdazahuigood']
列表:
1.切片同字符串
2.append和extend向列表中國添加兀素
[mylistl.append(mylist2)|
|mylist3.extend(mylis⑵]
outout
1.刪除元素del:根據下標進行刪除pop:刪除最后一個
元素remove:根據元素的值進行刪除
向dist4=[履,b,七',d]|
debnylist4f(j
print(mylist4)|
ii「:
|mylist4.remove('c')|
print(rnylist4)^^B
output
b,'c',d]
1.元素排序sort:是將list按特定順序重新排列,默認為
由小到大,參數reverse=True可改為倒序,由大到小。
reverse:是將list逆置
|mylist5.sortQ^^^^B
|my1ist5.reverseQ^^B
卜門nilnnqi、l5)唯■徐■
output
U,2,3,4,5]|
I-Mil
字典:
1.清空字典dict.clear()
Wict^^e^^e^2)
1
output
1.指定刪除使用pop方法來指定刪除字典中的某一項
[ictl={key「:l,'key2,:2}
output
{key2':2}
1.遍歷字典
klict^^lceW^^Jkey2^2}^H
|mykey=[keyforkeyindiet對
|myvalue=[valueforvalueindict2.values()]|
|key_value=[(k,v)fork,vindict2.items()])
output
gey^ey2]^^B
1.fromkeys用于創(chuàng)建一個新字典,以序列中元素做字典的
鍵,value為字典所有鍵對應的初始值
[keys=「zhangfei;'guanyu;'liubei;'zhaoyun']|
output
'zhangfei':0,'guanyu':0,'liubei':0,'zhaoyurf:0}
5.簡述Python中的字符串編碼
計算機在最初的設計中,采用了8個比特(bit)作為一個字
節(jié)(byte)的方式。一個字節(jié)能表示的最大的整數就是255
(二進制11111111二十進制255),如果要表示更大的整數,
就必須用更多的字節(jié)。最早,計算機只有ASCII編碼,即只
包含大小寫英文字母、數字和一些符號,這些對于其他語言,
如中文,日文顯然是不夠用的。后來又發(fā)明了Unicode,
Unicode把所有語言都統(tǒng)一到一套編碼里,這樣就不會再有
亂碼問題了。當需要保存到硬盤或者需要傳輸的時候,就轉
換為UTF-8編碼。UTF-8是隸屬于Unicode的可變長的編
碼方式。在Python中,以Unicode方式編碼的字符串,可
以使用encode()方法來編碼成指定的bytes,也可以通過
decodeQ方法來把bytes編碼成字符串。encode
中文”.encode('utf-8')
output
b,\xe4\xb8\xad\xe6\x96\x871
decode
b*\xe4\xb8\xad\xe6\x96\x87,.decode(,utf-8,)
output
中文
6.一行代碼實現數值交換
la=1
|3a,b=b,a|
|4print(a,國
output
121
7.is和二二的區(qū)別
先來看個例子
|Kint(cis(1)|
brint(c==d)|
print(cise)?
print(c二二e)|
output
fnuel
二二是比較操作符,只是判斷對象的值(value)是否一致,
而is則判斷的是對象之間的身份(內存地址)是否一致。
對象的身份,可以通過id()方法來查看
output
B8^808d
K855828S
可以看出,只有id一致時,is比較才會返回True,而當
value一致時,:——比較就會返回True
8.Python函數中的參數類型
位置參數,默認參數,可變參數,關鍵字參數
允許我們在調用函數的時候傳入多個實參
|deftest(*arg,**kwarg):?
|if
test('ni','hao',key='world')[
output
[kearg:{'key':'world'}
可以看出,*arg會把位置參數轉化為tuple**kwarg會把關鍵
字參數轉化為diet
10.一行代碼實現1-100之和
|sum(range(l,101)
11.獲取當前時間
[import
|print(datetime.datetim6.now(5)^^^^^^^^^B
output
|2019-06-0718:12:11.16533(
P01WS)^8JTH^^B
12.PEP8規(guī)范
簡單列舉10條:盡量以免單獨使用小寫字母T,大寫字母,O)
以及大寫字母T等容易混淆的字母。函數命名使用全部小寫
的方式,可以使用下劃線。常量命名使用全部大寫的方式,
可以使用下劃線。使用has或is前綴命名布爾元素,如:
is_connect二True;has_member=False不要在行尾加分號,
也不要用分號將兩條命令放在同一行。不要使用反斜杠連接
行。頂級定義之間空2行,方法定義之間空1行,頂級定義
之間空兩行。如果一個類不繼承自其它類,就顯式的從object
繼承。內部使用的類、方法或變量前,需加前綴—表明此為內
部使用的。要用斷言來實現靜態(tài)類型檢測。
13.Python的深淺拷貝
淺拷貝
|list2=copy.copy(listl)|
|list2,appendCa5^^^B
IprinKlistIJist2)^HB
output
『1,2,3,[1,2,'a']][1,2,3,[1,2,'a'],'a']|
能夠看出,淺拷貝只成功”獨立“拷貝了列表的外層,而列表
的內層列表,還是共享的
深拷貝
|list3=copy.deepcopy(list1)|
|list3.appendCa^^^^^^^1
卜門nl(li、iLli、[3
output
,2,3,[1,2]]n,2,3JL2,'a'],'a']|
深拷貝使得兩個列表完全獨立開來,每一個列表的操作,都
不會影響到另一個
14.查看下面代碼的輸出
pefnum():
return[lambdax:i*xforiinrange(4)]]
1)min
output
『3,3,3,3]|
通過運行結果,可以看出i的取值為3,很神奇
15.可變類型與不可變類型
可變數據類型:list、dict>set
不可變數據類型:int/float、str>tuple
16.打印九九乘法表
|foriinrange(l,
|forjinrange(1,i+1
output
1*1=1
2*1=22*2=4
^^9*^89*^79*4^69*^59^=5^^=639^=729*9=81
print函數,默認是會換行的,其有一個默認參數end,如果
像例子中,我們把end參數顯示的置為"",那么print函數
執(zhí)行完后,就不會換行了,這樣就達到了九九乘法表的效果
T
17.filter>map、reduce的作用
filter函數用于過濾序列,它接收一個函數和一個序列,把函
數作用在序列的每個元素上,然后根據返回值是True還是
False決定保留還是丟棄該元素
|list(filter(lambdax:x%2二二1,mylistH
output
1,3,5,7,幻
保留奇數列表
map函數傳入一個函數和一個序列,并把函數作用到序列的
每個元素上,返回一個可迭代對象
|list(map(lambdax:x*2,mylist))
output
『2,4,6,8,10,12,14,16,18]|
reduce函數用于遞歸計算,同樣需要傳入一個函數和一個序
列,并把函數和序列元素的計算結果與下一個元素進行計算
,educe(lambdax,y:x+y,range。01))|
output
505(
可以看出,上面的三個函數與匿名函數相結合使用,可以寫
出強大簡潔的代碼
18.re的match和search區(qū)別
match。函數只檢測要匹配的字符是不是在string的開始位
置匹配,search。會掃描整個string查找匹配
19.面向對象中_new—和—init
_new_是在實例創(chuàng)建之前被調用的,因為它的任務就是創(chuàng)建
實例然后返回該實例對象,是個靜態(tài)方法。_init_是當實例
對象創(chuàng)建完成后被調用的,然后設置對象屬性的一些初始
值,通常用在初始化一個類實例的時候,是一個實例方法
1、_new_至少要有一個參數cis,代表當前類,此參數在實
例化時由Python解釋器自動識別。2、—new—必須要有返
回值,返回實例化出來的實例,這點在自己實現_new_時要
特別注意,可以return父類(通過super(當前類名,cis))
—new—出來的實例,或者直接是object的—new—出來的實
例。3、_init_有一個參數self,就是這個_new_返回的實例,
_init_在_new_的基礎上可以完成一些其它初始化的動作,
_init_不需要返回值。4、如果_new_創(chuàng)建的是當前類的實
例,會自動調用_init_函數,通過return語句里面調用的
_new_函數的第一個參數是cis來保證是當前類實例,如果
是其他類的類名,;那么實際創(chuàng)建返回的就是其他類的實例,
其實就不會調用當前類的_init_函數,也不會調用其他類的
_init_函數
20.三元運算規(guī)則
M—MW
output
21.生成隨機數
print(random.randint(1,100))|
print(random.unilbrm(1.5.))■
output
0.03765019937131564
1.8458555362279228
22.zip函數用法
zip()函數將可迭代的對象作為參數,將對象中對應的元素打
包成一個個元組,然后返回由這些元組組成的列表
卜、H/11山、?!、m)腐■■,^^亶
output
■'zhangfei;0),('guanyu:3),('liubei:2),('zhaoyun',4)]|
23.range和xrange的區(qū)別
range([startjstop],step]),根據start與stop指定的范圍以
及step設定的步長,生成一個序列。而xrange生成一個生
成器,可以很大的節(jié)約內存
24.with方法打開文件的作用
開文件在進行讀寫的時候可能會出現一些異常狀況,如果按
照常規(guī)的f.open寫法,我們需要try,except,finally,做異常
判斷,并且文件最終不管遇到什么情況,都要執(zhí)行finally
f.close()關閉文件,with方法幫我們實現了finally中f.close
25.什么是正則的貪婪匹配
Python中默認是貪婪匹配模式
貪婪模式:正則表達式一般趨向于最大長度匹配
非貪婪模式:在整個表達式匹配成功的前提下,盡可能少的
匹配
26.為什么不建議函數的默認參數傳入可變對象
例如:
denest(L=n)^^B
|L.appendCtest)|
output
|test()#[test;test』
默認參數是一個列表,是可變對象口,Python在函數定義的
時候,默認參數L的值就被計算出來了,是口,每次調用函
數,如果L的值變了,那么下次調用時,默認參數的值就已
經不再是口了
27.字符串轉列表
mysti^^K23j
|mystT.split(',')[
output
28.字符串轉整數
|list(map(lambdax:im(x),mylist))|
output
1,2,3]
29.刪除列表中的重復值
|list(sct(in
30.字符串單詞統(tǒng)計
[fromcollectionsimport
|mystr='sdfsfsfsdfsd^ere^rhrgege.sdfweisfsdfe]
'r':3,
31.列表推導,求奇偶數
|[xforxinrange(lO)ifx%2==1
output
L3,5,7,91
32.一行代碼展開列表
output
|[1,2,3,4,5,6]|
33.實現二分法查找函數
二分查找算法也稱折半查找,基本思想就是折半,對比大小
后再折半查找,必須是有序序列才可以使用二分查找
遞歸算法
Idefbinary_search(data,
|return
|!..■:!ii->inaiA_searcii!diHa|:inid|,ileir.J
|returnbinary_search(data[mid+1:],item)|
|return
binarysearch(listl,999)
非遞歸算法
defbinary_search(data,item):|
n=len(data)^^^^^B
last=n-
whilefirst<=last:^^[
mid=(first+last)〃:|
ifdatafmid]==item:|
returnTrue^^^B
elifdata[mid]>item:|
last=mid-1
else:
first=mid+1
|return
|binary_search(listl,99)|
34.字典和json轉換
字典轉json
importjson
|dictl={'zhangfei':l,"liubei”:2,“guanyu“:4,“zhaoyun":3}|
|myjson=json.dumps(dictl)|
output]
dic〔j、(巾」ckn〕、卜川
invdict
output
'zhangfei':1,'liubei':2,'guanyu':4,'zhaoyun':3}
35.列表推導式、字典推導式和生成器
|import
|ge_list=(iforiin
output
列表推導式[0,1,2,3,4,5,6,7,8,9](class'list',
上成器(generatorobject<genexpr>at0x0139F070>|
36.簡述read、readline>readlines的區(qū)別
read讀取整個文件
readline讀取下一行,使用生成器方法
readlines讀取整個文件到一個迭代器以供我們遍歷
37.打亂一個列表
|random.shuffle(list2)|
「門:山—
output
『4,6,5,1,2,31
38.反轉字符串
卜皿二'luobodazahui
output
iuhazadoboul
39.單下劃線和雙下劃線的作用
_foo_:一種約定,Python內部的名字,用來區(qū)別其他用戶
自定義的命名,以防沖突,就是例如_init_(),_del_(),_calL_()
些特殊方法
_foo:一種約定,用來指定變量私有。不能用frommodule
import米導入,其他方面和公有變量一樣訪問
—f00:這個有真正的意義:解析器用,屈$惘!116—foo來代替這
個名字,以區(qū)別和其他類相同的命名,它無法直接像公有成
員一樣隨便訪問,通過對象名.一類名—XXX這樣的方式可以訪
問
4。.新式類和舊式類
a.在python里凡是繼承了object的類,都是新式類
b.Pythons里只有新式類
c.Pythons里面繼承object的是新式類,沒有寫父類的是經
典類
d.經典類目前在Python里基本沒有應用
41.Python面向對象中的繼承有什么特點
a.同時支持單繼承與多繼承,當只有一個父類時為單繼承,
當存在多個父類時為多繼承
b.子類會繼承父類所有的屬性和方法,子類也可以覆蓋父類
同名的變量和方法
c.在繼承中基類的構造(_init_())方法不會被自動調用,
它需要在其派生類的構造中專門調用
d.在調用基類的方法時,需要加上基類的類名前綴,且需要
帶上self參數變量。區(qū)別于在類中調用普通函數時并不需要
帶上self參數
42.super函數的作用
super()函數是用于調用父類(超類)的一個方法
class
class
super(B,self).funcA()
|ins.funcA_in_B0|
Hns^hincCO^^H
output
thisisfunc囚
thisisfuncC
43.類中的各種函數
主要分為實例方法、類方法和靜態(tài)方法
實例方法
定義:第一個參數必須是實例對象,該參數名一般約定為
"self,通過它來傳遞實例的屬性和方法(也可以傳類的屬性
和方法)
調用:只能由實例對象調用
類方法
定義:使用裝飾器@classmethod。第一個參數必須是當前類
對象,該參數名一般約定為“cis”,通過它來傳遞類的屬性和
方法(不能傳實例的屬性和方法)
調用:實例對象和類對象都可以調用
靜態(tài)方法
定義:使用裝飾器@staticmethod。參數隨意,沒有“self和“c】s”
參數,但是方法體中不能使用類或實例的任何屬性和方法
調用:實例對象和類對象都可以調用
靜態(tài)方法是類中的函數,不需要實例。靜態(tài)方法主要是用來
存放邏輯性的代碼,主要是一些邏輯屬于類,但是和類本身
沒有交互。即在靜態(tài)方法中,不會涉及到類中的方法和屬性
的操作??梢岳斫鉃閷㈧o態(tài)方法存在此類的名稱空間中
類方法是將類本身作為對象進行操作的方法。他和靜態(tài)方法
的區(qū)別在于:不管這個方式是從實例調用還是從類調用,它
都用第一個參數把類傳遞過來
44.如何判斷是函數還是方法
與類和實例無綁定關系的function都屬于函數(function)
與類和實例有綁定關系的function都屬于方法(method)
普通函數:
Iy、T」「1
|@staticmethod^^^^^^^M
|@classmethod^^^^^^^M
|deffunc4(cls)i^^^^^^^M
people=
|‘門「」1Ii「
卜「in〔(I-pk.「um、4
output
kbounchrietho^eopleifunc^^^^naii^JPeopl^bjec^UkO^BSCQO^J
〈boundmclhodPeople.func4of〈class_main_.Peoplc'?^mMMMH|
45.isinstance的作用以及與type()的區(qū)別
isinstance()函數來判斷一個對象是否是一個已知的類型,類
似type()
區(qū)別:
type()不會認為子類是一種父類類型,不考慮繼承關系
isinstance()會認為子類是一種父類類型,考慮繼承關系
classA(object):^^M
class
print(isinstance(b,A))|
l"1L\-d:「\).
p「int(type(b)=二A),.
output
fTrue|
ruc[
True]
Esd
46.單例模式與工廠模式
單例模式:主要目的是確保某一個類只有一個實例存在
工廠模式:包涵一個超類,這個超類提供一個抽象化的接口
來創(chuàng)建一個特定類型的對象,而不是決定哪個對象可以被創(chuàng)
建
47.查看目錄下的所有文件
〔import
|print(os.listdir('.,))l
48.計算1到5組成的互不重復的三位數
#1到5組成的4:不重復的三位
forjinrange(l,6):M
forzinrange。,豆
print(”%s%s%s”%(i,j,z))|
output
49.去除字符串首尾空格
g^^^^Tell^iihao
「「I,7門「
output
,hellonihaol
50.去除字符串中間的空格
str2="helloyouaregood
■■
output
|hcH()y()ua「cgs)d.
I'helloyouaregood'l
51.字符串格式化方式
i,使用%操作符
output
rhi^^b^Python^^^^B
ThisisforPython,andYou|
1.str.format
在Pythons中,引入了這個新的字符串格式化方法
print("Thisis{name},hopeyoucan{do}”.format(name="zhouluob”,do="like"))|
output
[Thisismychat|
Thisiszhouluob,hopeyoucanlike
1.f-strings
在Python3-6中,引入了這個新的字符串格式化方法
print(f'hello{name}”)
output
helloluobodazahui
一個復雜些的例子:
|defmytest(name,
|returnf”helk){name},youare{age}yearsold?
output
|helloluobo,youare20yearsold!|
52.將“helloworld”轉換為首字母大寫“Hello
World”(不使用title函數)
output
HelloWorlcj
meH^orkll
53.一行代碼轉換列表中的整數為字符串
如:口,2,刃->[叮",“2“,“31
|list(map(lambdax:str(x),listl))|
output
54.合并兩個元組到字典
如:("zhangfei'*,"guanyu"),(66,80)->{'zhangfei':66,'guanyu':
80}
^^^zhangfeT/^uanyu"
1#c;
output
'zhangfei':66,'guanyu':80}
55.給出如下代碼的輸入,并簡單解釋
例子1:
|a=(l,2,3,[4,5,6,7],8)|
的同0
output
|TypeErrorTraceback(mostrecentcalllast)
<i”[hcm-inpu[-35-59469d550cb()〉invmodu
FypeError:'tuple'objectdoesnotsupportitemassignment]
例子2:
output
|(1,2,3,[4,5,2,7],8)|
從例子1的報錯中也可以看出,tuple是不可變類型,不能改
變tuple里的元素,例子2中,list是可變類型,改變其元
素是允許的
56.Python中的反射
反射就是通過字符串的形式,導入模塊;通過字符串的形式,
去模塊尋找指定函數,并執(zhí)行。利用字符串的形式去對象(模
塊)中操作(查找/獲取/刪除/添加)成員,一種基于字符
串的事件驅動!
簡單理解就是用來判斷某個字符串是什么,是變量還是方法
|classNewClass(object):^^^^^^M
|def_init_(self,name,
|二
|def
|print(fMynameis{}')|
|print(fIama{
|print(gctaHr(pcoplc、
output
Truej
luobq
即1
getattr,hasattr,setattr,delattr對模塊的修改都在內存中進行,
并不會影響文件中真實內容
57.實現一個簡單的API
使用flask構造web服務器
IromflaskiiriportFlask,rcquc[U
|def
|■result=request.geIt_json()^^B
58.metaclass兀類
類與實例:
首先定義類以后,就可以根據這個類創(chuàng)建出實例,所以:先
定義類,然后創(chuàng)建實例
類與元類:
先定義元類,根據metaclass創(chuàng)建出類,所以:先定義
metaclass,然后創(chuàng)建類
classMyMetaclass(type):
def_new_(cis,class_name,class_parents,class_attr):
class_attr['print']="thisismymetaclass'ssubclass%s"%class_name|
returntype.—new—(cis,class_name,class_parents,class_attr)
classMyNewclass(obiect,metaclass=MyMetaclass):
pass
|myinstance=MyNewclass()|
output
「thisismymetaclass'ssubclassMyNewclass”
59.sort和sorted的區(qū)別
sort()是可變對象列表(list)的方法,無參數,無返回值,
sort()會改變可變對象
Rictl='test2':2}
1H8I-HBM
|print(listl.sort()
output
NoneB
sorted()是產生一個新的對象。sorted(L)返回一個排序后的
L,不改變原始的L,sorted。適用于任何可迭代容器
Hictl=lest2':2}
listl=[2,1,3]
)rint(sorted(dict1))print(sorted(list1))|
output
□,2,3]
60.Python中的GIL
GIL是Python的全局解釋器鎖,同一進程中假如有多個線
程運行,一個線程在運行Python程序的時候會占用Python
解釋器(加了一把鎖即GIL),使該進程內的其他線程無法
運行,等該線程運行完后其他線程才能運行。如果線程運行
過程中遇到耗時操作,則解釋器鎖解開,使其他線程運行。
所以在多線程中,線程的運行仍是有先后順序的,并不是同
時進行
61.產生8位隨機密碼
|import
1.join(random.choice(string.printable[:-7])foriinrange(5|
output
|,d5ANdNJp||
62.輸出原始字符
print(rhello\nwoiid')|
output
■■
63.列表內,字典按照value大小排序
^^fname^liubef/age^3^^B
|sort6d(listl,key=lambdax:x「age'])|
output
|{'name,:'guanyiT,'age,:29},?
64.簡述any()和all()方法
all如果存在0NullFalse返回False,否則返回True;any
如果都是0,None,False,Null時,返回True
print(any([O,None,False]))|
output
ralsd
Falsq
65.反轉整數
Idefreverse_int(x):^^^B
|ifnotisinstance(x,int)
|returnFals^^^^M
Itmp=str(x)^^^^^M
|tmp=
|returnint(tmp)^^B
|tmp=tmp[l:][::-1]■
Ix=int(tmp)^^^^J
output
-73832
首先判斷是否是整數,再判斷是否是一位數字,最后再判斷
是不是負數
66.函數式編程
函數式編程是一種抽象程度很高的編程范式,純粹的函數式
編程語言編寫的函數沒有變量,因此,任意一個函數,只要
輸入是確定的,輸出就是確定的,這種純函數稱之為沒有副
作用。而允許使用變量的程序設計語言,由于函數內部的變
量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出,因此,
這種函數是有副作用的。由于Python允許使用變量,因此,
Python不是純函數式編程語言
函數式編程的一個特點就是,允許把函數本身作為參數傳入
另一個函數,還允許返回一個函數!
函數作為返回值例子:
|defsum(*args):^^M
|definner_sum()iB
|foriinargs:^^[
■M||
Ireturn
|i.
|mysum=sum(2,4,6)|
|print(type(mysum))B
output
kclass'function'^
幽
67.簡述閉包
如果在一個內部函數里,對在外部作用域(但不是在全局作
用域)的變量進行引用,那么內部函數就被認為是閉包
(closure)附上函數作用域圖片
閉包特點
1.必須有一個內嵌函數
2.內嵌函數必須引用外部函數中的變量
3.外部函數的返回值必須是內嵌函數
68.簡述裝飾器
裝飾器是一種特殊的閉包,就是在閉包的基礎上傳遞了一個
函數,然后覆蓋原來函數的執(zhí)行入口,以后調用這個函數的
時候,就可以額外實現一些功能了
一個打印log的例子:
|import
|def
|definn6r_log(*args,
|print("CaU:{}".format(func.—name))|
HIE「!.」一,嘴
imer()
output
H56O17UOS28365
本質上,decorator就是一個返回函數的高階函數
69.協(xié)程的優(yōu)點
子程序切換不是線程切換,而是由程序自身控制
沒有線程切換的開銷,和多線程比,線程數量越多,協(xié)程的
性能優(yōu)勢就越明顯
不需要多線程的鎖機制,因為只有一個線程,也不存在同時
寫變量沖突,在協(xié)程中控制共享資源不加鎖
70.實現一個斐波那契數列
斐波那契數列:
又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、
8、13、21、34、……在數學上,斐波納契數列以如下被以
遞歸的方法定義:F(l)=l,F(2)=l,F(n)=F(n-l)+F(n-2)(n>=2,
nGN*)
生成器法:
ifnotisinstance(n,int)or(abs(n)!=n):
while
a,b=
yield
|[iforiinfib(10)]|
output
In,1,2,3,5,8,13,21,34,55]|
遞歸法:
ifnotisinstance(n,int)or(abs(n)!=n):|
return
return
『fib(i)foriinrange(l,11)]|
output
1,1,2,3,5,8,13,21,34,55]
71.正則切分字符串
tri='hellowo「ld:kiobodazahtd]
,'
「csult二rc.spli1(r:|[sW
)rint(result)
output
『hello'Jworld','luobo'Jdazahui]
72.yield用法
yield是用來生成迭代器的語法,在函數中,如果包含了
yield,那么這個函數就是一個迭代器。當代碼執(zhí)行至yield
時,就會中斷代碼執(zhí)行,直到程序調用next()函數時,才會
在上次yield的地方繼續(xù)執(zhí)行
^mntCstarnes^ield^
|while
|result二yield
|print(”result:\result
I「(”、MJ
print(next(g)j
print(next(g))|
output
Harttestyield|
可以看到,第一個調用next()函數,程序只執(zhí)行到了"result
=yield5n這里,同時由于yield中斷了程序,所以result也
沒有被賦值,所以第二次執(zhí)行next()時,result是None
73.冒泡排序
defpaixu(data,reverse=False):^^^^^^^^^B
ifnot
foriinrange(len(data)
forjinrange(len(data)-1-
「()「iin「;ingc("((Mla)-1
forjinrange(len(data)-1?i):|
^^^^dataH]^ata^^^^ata^^^ata[jj
print(paixu(listl,reverse=True))|
output
HWdldldlt煙I
74.快速排序
快排的思想:首先任意選取一個數據(通常選用數組的第一
個數)作為關鍵數據,然后將所有比它小的數都放到它前面,
所有比它大的數都放到它后面,這個過程稱為一趟快速排
序,之后再遞歸排序兩邊的數據
挑選基準值:從數列中挑出一個元素,稱為“基準"(pivot)
分割:重新排序數列,所有比基準值小的元素擺放在基準前
面,所有比基準值大的元素擺在基準后面(與基準值相等的
數可以到任何一邊)
在這個分割結束之后,對基準值的排序就已經完成
遞歸排序子序列:遞歸地將小于基準值元素的子序列和大于
基準值元素的子序列排序
|listl=[8,5,1,3,2,10,11,4,12,20],
|def
|pivot二arr[high]
|forjinrange(Iow,
|arr[i+l],arr[high]-arr[high],arr[i+l]
|return
|defquicksort(arr
|pi二partition(arr,low,high)
|quickso「l(aiT.pi+1.high)
huicksort(listl,0,]en(listl)?l)|
print(listl)
output
|[1,2,3,4,5,8,10,11,12,201
75.requests簡介
該庫是發(fā)起HTTP請求的強大類庫,調用簡單,功能強大
importrequests)
url="http:〃www.luobodazahui.top”
response二requests.get(url)
response.encoding="ut18”
html二】esponse.text
binary_content=response.content
raw=requests.get(url,stream二True)
,二「cqucsls.gcl(u「Lheaders二header
cookies={"cookie“:”#yourcookie"}|
r=requests.get(url,cookies=cookies)
76.比較兩個json數據是否相等
dictl={"zhangfei11:12,Hguanyun:13,nliubein:1
dict2={"zhangfei”:12,“guanyu“:13,"liubei":18}
defcompare_dict(dictl,
issame=
forkin
issame.append(2)^^^^^^^^^^^^^M
issame
print(
ifsum_6xcept二=sum_actually:^^^^^^^^^B
print(nthistwodietare
print。thistwodietarenotsame!
returnFalse
|test二compare_dict(dictl,dict2)|
output
rthistwodietaresame!
77.讀取鍵盤輸入
[nput()函數■
Heffo「input():|
print("yourinputtextis:“,input_text)|
|forinput()|
output
lyourinputtextis:heHo|
78.enumerate
enumerateQ函數用于將一個可遍歷的數據對象(如列表、元
組或字符串)組合為一個索引序列,同時列出數據和數據下
標,一般用在for循環(huán)當中
|fori,enuinenumerate(dataiy^B
print(i,enu)|
output
pass是空語句,是為了保持程序結構的完整性。pass不做任
何事情,一般用做占位語句
defforpass(n):
卜si〕ri、、(i)■■■
80.正則匹配郵箱
bremailemail
print(”%s是符合規(guī)定的郵件地址,匹配后結果是:%s“%(emailjet.group。))
output
.」「,一
81.統(tǒng)計字符串中大寫字母的數量
|str2,werrQWSDdiWuW||
|counter=
|foriin
|ifi.isupper():^^^^^M
Icoi!i)!cr-=
Drint(counter)
output
82.json序列化時保留中文
普通序列化:
|import
Hictl_new二json.dumps(dictl),
|print(dictlLnew)^^^^^^^^B
output
{"name":”\u841d\u535c","age":18}
保留中文
|import
|dictl_new二json.dumps(dictl,ensure_ascii=False)|
mnt(dictl_new)
output
{"name":"蘿卜","age":18}
83.簡述繼承
一個類繼承自另一個類,也可以說是一個孩子類/派生類/子
類,繼承自父類/基類/超類,同時獲取所有的類成員(屬性
和方法)
繼承使我們可以重用代碼,并且還可以更方便地創(chuàng)建和維護
代碼
Python支持以下類型的繼承:
單繼承-一個子類類繼承自單個基類
多重繼承-一個子類繼承自多個基類
多級繼承-一個子類繼承自一個基類,而基類繼承自另一個
基類
分層繼承-多個子類繼承自同一個基類
混合繼承-兩種或兩種以上繼承類型的組合
84.什么是猴子補丁
猴子補丁是指在運行時動態(tài)修改類和模塊
猴子補丁主要有以下幾個用處:
在運行時替換方法、屬性等
在不修改第三方代碼的情況下增加原來不支持的功能
在運行時為內存中的對象增加patch而不是在磁盤的源代
碼中增加
85.help()函數和dir()函數
help()函數返回幫助文檔和參數說明:
|help(dict)|
output
Helponclassdietinmodulebuiltins:|
classdict(object))
|dict()->newempty
|dicl(rmipping)-〉newdiclionai〉inili”i/cd「isnamiippingobjccl'、,
|(key,value)
|dicl(imblc)-〉newdicli()rKiryiniti;ili/cd心i「\
dict(**kwargs)?>newdictionaryinitializedwiththename二valuepairs|
|inthekeywordargumentlist.Forexample:dict(one=l,two=2)?
dir()函數返回對象中的所有成員(任何類型)
dir(dict)
output
contains.
.delattr_
delitem.
86.解釋Python中的//,%而米米運算符
〃運算符執(zhí)行地板除法,返回結果的整數部分(向下取整)
%是取模符號,返回除法后的余數
**符號表不取幕.a**b返回a的b次方
print(5//3)l
print(5/3)B
pHnt(5**31
output
1.6666666666666667
125
87.主動拋出異常
使用raise
peftest_raise(n):^^^^B
ifnolisinstance(n,int):|
raiseException('notainttype)
pMnt('good')|
test_raise(8.9)
output
ExceptionTraceback(mostrecentcalllast)
<ipython-input-262-b45324f5484e>in<module>
4
>6tcst_raise(8.9)^^^g
<ipython-input-262-b45324f5484e>intest_raise(n)
1deftest_raise(n):
2ifnotisinstance(n,int):|
—>3raiseException('notainttype'
〔Exceplion:nolainilype^M
88.tuple和list轉換
tuple1=(1,2,3,4)
listl=list(tuplel)
print(listl)
tuple2=tuple(listl)
)rint(tuple2)
output
1,2,3,4](1,2,3,4)|
89.簡述斷言
Python的斷言就是檢測一個條件,如果條件為真,它什么都
不做;反之它觸發(fā)一個帶可選錯誤信息的AssertionError
|deftestassert(n):^^^^^M
output
AssertionErrorTraceback(mostrecentcalllast)|
<ipy[h()n-inpu〔-268-a9dfd6c79c73>in〈module)
2assertn二二2,"nisnot2
——>4testassert(l)
vipython-input-268-a9dfd6c79e73>intestassert(n)|
1deftestassert(n):
——>2assertn二二2,"nisnot2"
3print('nis2')|
4testassert(1)
AssertionEnor:nisnot2
90.什么是異步非阻塞
同步異步指的是調用者與被調用者之間的關系
所謂同步,就是在發(fā)出一個功能調用時,在沒有得到結果之
前,該調用就不會返回,一旦調用返回,就得到了返回值
異步的概念和同步相對,調用在發(fā)出之后,這個調用就直接返
回了,所以沒有返回結果。當該異步功能完成后,被調用者可
以通過狀態(tài)、通知或回調來通知調用者
阻塞非阻塞是線程或進程之間的關系
阻塞調用是指調用結果返回之前,當前線程會被掛起(如遇
到io操作)。調用線程只有在得到結果之后才會返回。函數
只有在得到結果之后才會將阻塞的線程激活
非阻塞和阻塞的概念相對應,非阻塞調用指在不能立刻得到
結果之前也會立刻返回,同時該函數不會阻塞當前線程
91.什么是負索引
Python中的序列是有索引的,它由正數和負數組成。正的數
字使用U作為第一個索引,T作為第二個索引,以此類推
負數的索引從開始,表示序列中的最后一個索引,'-2作
為倒數第二個索引,依次類推
92.退出
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)藥冷鏈運輸服務合同
- 建筑工程人才中介合同
- 花店翻新墊資合同
- 行業(yè)專項作業(yè)指南 財務管理基礎
- 經營用房租租賃合同書
- 印刷合同協(xié)議書
- 門衛(wèi)臨時聘用合同
- 軟件開發(fā)流程優(yōu)化與項目管理體系建立指南
- 員工離職后保密協(xié)議
- 購房協(xié)議和購房合同
- 2024年中考語文試題分類匯編:散文、小說閱讀(第03期)含答案及解析
- 《宮頸癌篩查》課件
- 2024年中儲糧油脂有限公司招聘筆試真題
- 消化科護理疑難病例討論
- 杭氧股份深度報告:工業(yè)氣體龍頭期待2025景氣復蘇
- 2024年學校意識形態(tài)工作總結
- 2024年聯勤保障部隊第九四〇醫(yī)院社會招聘考試真題
- 慢性腎臟病健康知識科普
- DB31-T 596-2021 城市軌道交通合理通風技術管理要求
- 《客戶異議處理培訓》課件
- 2024年河北省公務員錄用考試《行測》真題及解析
評論
0/150
提交評論