Python面試100題

來源:https://www.cnblogs.com/lmx123/p/9230589.html

1惩激、Python基礎(chǔ)

Q1. 什么是Python?

答:Python是一種面向?qū)ο蟮幕蕖⒔换ナ降摹⒔忉屝?/strong>的計(jì)算機(jī)程序設(shè)計(jì)語言淳蔼。
Python具有高可讀性,它使用英語關(guān)鍵詞而非標(biāo)點(diǎn)符號(hào)脐彩,語法結(jié)構(gòu)也比其他語言簡(jiǎn)單酿矢。

Q2. Python的主要功能是什么?
  • (1)Python是一種解釋型語言盔夜;
  • (2)聲明變量和類似變量時(shí)负饲,不需要重復(fù)聲明變量的類型堤魁;
  • (3)Python非常適合面向?qū)ο蟮木幊涛沽矗驗(yàn)樗试S類的定義以及組合和繼承;
  • (4)函數(shù)是第一類對(duì)象妥泉,這意味著它們可以分配給變量椭微,從其他函數(shù)返回并傳遞給函數(shù),類也是第一類對(duì)象盲链;
  • (5)用于許多領(lǐng)域蝇率,包括Web應(yīng)用程序、自動(dòng)化刽沾、科學(xué)建模本慕、大數(shù)據(jù)應(yīng)用程序等。
Q3. 一行代碼實(shí)現(xiàn)1-100的和
print(sum(range(1,101)))
Q4. 如何在一個(gè)函數(shù)內(nèi)部修改全局變量侧漓?

答:利用global修改全局變量

>>> a = 5
>>> def fun():
    global a
    a = 4

>>> fun()
>>> print(a)
4
Q5. 列出5個(gè)標(biāo)準(zhǔn)Python庫(kù)

答:

庫(kù) 作用
os 提供不少與操作系統(tǒng)相關(guān)的函數(shù)
sys 通常用于命令行參數(shù)
re 正則匹配
math 數(shù)學(xué)運(yùn)算
datetime 處理日期時(shí)間
Q6. 字典如何刪除鍵和合并兩個(gè)字典

答:del和update方法

>>> dic = {'name':'zs','age':'18'}
>>> del dic['name'] # 刪除鍵
>>> dic
{'age': '18'}
>>> dic2 = {'name':'lm'}
>>> dic.update(dic2)
>>> dic
{'age': '18', 'name': 'lm'}
Q7. 談一下python的GIL

答:GIL是python的全局解鎖器锅尘,同一進(jìn)程中假如有多個(gè)線程運(yùn)行,一個(gè)線程在運(yùn)行python程序的時(shí)候會(huì)霸占python解釋器(加了一把鎖即GIL)布蔗,使該進(jìn)程內(nèi)其他線程無法運(yùn)行藤违,等該線程運(yùn)行完成后其他線程才能運(yùn)行。如果線程運(yùn)行過程中遇到耗時(shí)操作纵揍,則解釋器解開顿乒,使其他線程運(yùn)行。所以在多線程中泽谨,線程的運(yùn)行仍是有先后順序的璧榄,并不是同時(shí)進(jìn)行特漩。

多進(jìn)程中因?yàn)槊總€(gè)進(jìn)程都能被系統(tǒng)分配資源,相當(dāng)于每個(gè)進(jìn)程有了一個(gè)python解釋器犹菱,所以多進(jìn)程可以實(shí)現(xiàn)多個(gè)進(jìn)程的同時(shí)運(yùn)行拾稳,缺點(diǎn)是進(jìn)程系統(tǒng)資源開銷大。

Q8. python實(shí)現(xiàn)列表去重的方法

答:先通過集合去重腊脱,再轉(zhuǎn)列表访得。

>>> list = [11,12,13,12,15,16,13]
>>> a = set(list)
>>> a
{11, 12, 13, 15, 16}
>>> [x for x in a]
[11, 12, 13, 15, 16]
Q9. fun(args,kwargs)中的args, **kwargs是什么意思?
def demo(args_f,*args_v):
    print(args_f)
    a = []
    for x in args_v:
        a.append(x)
    print(a)
demo('a','b','c','d')

a
['b', 'c', 'd']

kwargs允許你將不定長(zhǎng)度的鍵值對(duì)陕凹,作為參數(shù)傳遞給一個(gè)函數(shù)悍抑。如果你想要在一個(gè)函數(shù)里處理帶名字的參數(shù),你應(yīng)該使用kwargs杜耙。這里有個(gè)例子幫你理解這個(gè)概念:

def demo(**args_v):
    for k,v in args_v.items():
        print(k,v)

demo(name='njcx')
#輸出
name njcx
Q10. python2 和 python3 的range(100)的區(qū)別

答:python2返回列表搜骡,python3返回迭代器,節(jié)約內(nèi)存佑女。

Q11. 一句話解釋什么樣的語言能夠用裝飾器?

答:函數(shù)可以作為參數(shù)傳遞的語言记靡,可以使用裝飾器。

Q12. python內(nèi)建數(shù)據(jù)類型有哪些团驱?

答:

類型 表示
整型 int
布爾型 bool
字符串 str
列表 list
元組 tuple
字典 dict
Q13. 簡(jiǎn)述面向?qū)ο笾衉_new__和__init__區(qū)別?

答:__init__是初始化方法摸吠,創(chuàng)建對(duì)象后,就立刻被默認(rèn)調(diào)用了嚎花,可接收參數(shù)寸痢,如下示例:

class Bike:

    def __init__(self,newWheelNum,newColor): # __init__方法自動(dòng)被調(diào)用,可以創(chuàng)建對(duì)象接收參數(shù)
        self.wheelNum = newWheelNum
        self.color = newColor

    def move(self):
        print('車會(huì)跑')
# 創(chuàng)建對(duì)象
BM = Bike(2,'green')

print('車的顏色為:%s' %BM.color)
print('車輪子的數(shù)量為:%d' %BM.wheelNum)

#輸出 只打印__init__方法執(zhí)行的結(jié)果紊选,move方法未執(zhí)行
車的顏色為:green
車輪子的數(shù)量為:2 

1啼止、__new__至少要有一個(gè)參數(shù)cls,代表當(dāng)前類兵罢,此參數(shù)在實(shí)例化時(shí)由Python解釋器自動(dòng)識(shí)別;

2献烦、__new__必須要有返回值,返回實(shí)例化出來的實(shí)例卖词,這點(diǎn)在自己實(shí)現(xiàn)__new__時(shí)要特別注意巩那,可以return父類(通過super(當(dāng)前類名, cls))__new__出來的實(shí)例,或者直接是object的__new__出來的實(shí)例

3坏平、__init__有一個(gè)參數(shù)self拢操,就是這個(gè)__new__返回的實(shí)例,__init__在__new__的基礎(chǔ)上可以完成一些其它初始化的動(dòng)作舶替,__init__不需要返回值

4令境、如果__new__創(chuàng)建的是當(dāng)前類的實(shí)例,會(huì)自動(dòng)調(diào)用__init__函數(shù)顾瞪,通過return語句里面調(diào)用的__new__函數(shù)的第一個(gè)參數(shù)是cls來保證是當(dāng)前類實(shí)例舔庶,如果是其他類的類名抛蚁,那么實(shí)際創(chuàng)建返回的就是其他類的實(shí)例,其實(shí)就不會(huì)調(diào)用當(dāng)前類的__init__函數(shù)惕橙,也不會(huì)調(diào)用其他類的__init__函數(shù)瞧甩。

class A(object):
    def __init__(self):
        print('這是 init 方法',self)

    def __new__(cls):
        print('這是cls的ID',id(cls))
        print('這是 new 方法',object.__new__(cls))
        return object.__new__(cls)
A()
print('這是類A的ID',id(A))
    
#輸出
這是cls的ID 2880637165512  
這是 new 方法 <__main__.A object at 0x0000029EB39222E8>
這是 init 方法 <__main__.A object at 0x0000029EB39222E8>        #init方法和new方法中返回值地址一樣,說明返回值是對(duì)象
這是類A的ID 2880637165512    #cls和類ID一樣弥鹦,說明指向同一個(gè)類肚逸,也就是cls就是創(chuàng)建的實(shí)例類
Q14. 簡(jiǎn)述with方法打開處理文件幫我我們做了什么?

答:

f = open("./1.txt","wb")
try:
    f.write("hello world")
except:
    pass
finally:
    f.close()

打開文件在進(jìn)行讀寫的時(shí)候可能會(huì)出現(xiàn)一些異常狀況彬坏,如果按照常規(guī)的f.open寫法朦促,我們需要try,except,finally,做異常判斷栓始,并且文件最終不管遇到什么情況务冕,都要執(zhí)行finally f.close()關(guān)閉文件,with方法幫我們實(shí)現(xiàn)了finally中f.close幻赚,更簡(jiǎn)潔有效禀忆。

with open("./2.txt","w") as f:
    f.write("hello python")

(當(dāng)然還有其他自定義功能,有興趣可以研究with方法源碼)

Q15. 列表[1,2,3,4,5],請(qǐng)使用map()函數(shù)輸出[1,4,9,16,25]落恼,并使用列表推導(dǎo)式提取出大于10的數(shù)箩退,最終輸出[16,25]

答:map()函數(shù)第一個(gè)參數(shù)是fun,第二個(gè)參數(shù)是一般是list领跛,第三個(gè)參數(shù)可以寫list乏德,也可以不寫撤奸,根據(jù)需求

>>> print(list(map(lambda x:x**2,[1,2,3,4,5])))
[1, 4, 9, 16, 25]
>>> a = [1, 4, 9, 16, 25]
>>> b = [i for i in a if i>10]
>>> b
[16, 25]
Q16. python中生成隨機(jī)整數(shù)吠昭、隨機(jī)小數(shù)、0--1之間小數(shù)方法胧瓜。

答:

  • 隨機(jī)整數(shù):random.randint(a,b),生成區(qū)間內(nèi)的整數(shù)
  • 隨機(jī)小數(shù):習(xí)慣用numpy庫(kù)矢棚,利用np.random.randn(5)生成5個(gè)隨機(jī)小數(shù)
  • 0-1隨機(jī)小數(shù):random.random(),括號(hào)中不傳參
import random
import numpy as np
result = random.randint(10,20)
res = np.random.randn(5)
ret = random.random()
print('隨機(jī)正整數(shù)',result)
print('5個(gè)隨機(jī)小數(shù)',res)
print('0-1隨機(jī)一個(gè)小數(shù)',ret)

#輸出:
隨機(jī)正整數(shù) 16
5個(gè)隨機(jī)小數(shù) [ 0.60713108  0.31552514 -1.38000673 -0.5888923   0.1802922 ]
0-1隨機(jī)一個(gè)小數(shù) 0.09464817136015036
Q17. 避免轉(zhuǎn)義給字符串加哪個(gè)字母表示原始字符串?

答:r , 表示需要原始字符串府喳,不轉(zhuǎn)義特殊字符蒲肋。

Q18. <div class="nam">中國(guó)</div>,用正則匹配出標(biāo)簽里面的內(nèi)容(“中國(guó)”)钝满,其中class的類名是不確定的兜粘。

答:

import re

str = '<div class="nam">中國(guó)</div>'
res = re.findall(r'<div class=".*">(.*?)</div>',str)
print(res)

# . 代表可有可無
# * 代表任意字符,滿足類名可以變化
# (.*?)提取文本

補(bǔ)充:常用正則匹配規(guī)則

image.png

Q19. Python中斷言方法舉例

答:

a = 3
assert(a>1)
print("斷言成功弯蚜,程序繼續(xù)向下執(zhí)行")

b = 4
assert(b>7)
print("斷言失敗孔轴,程序報(bào)錯(cuò)(這條不會(huì)被執(zhí)行)")

輸出:

斷言成功,程序繼續(xù)向下執(zhí)行
Traceback (most recent call last):
  File "C:/Users/dybhh/Desktop/pypractice/q18.py", line 6, in <module>
    assert(b>7)
AssertionError
Q20. 數(shù)據(jù)表student有id,name,score,city字段碎捺,其中name中的名字可有重復(fù)路鹰,需要消除重復(fù)行,請(qǐng)寫sql語句贷洲。

答:SELECT DISTINCT name FROM student

Q21. python2和python3區(qū)別?列舉5個(gè)
  • 1晋柱、Python3 使用 print 必須要以小括號(hào)包裹打印內(nèi)容优构,比如 print('hi')
    Python2 既可以使用帶小括號(hào)的方式,也可以使用一個(gè)空格來分隔打印內(nèi)容雁竞,比如 print 'hi'
  • 2钦椭、python2 range(1,10)返回列表,python3中返回迭代器碑诉,節(jié)約內(nèi)存
  • 3玉凯、python2中使用ascii編碼,python3中使用utf-8編碼
  • 4联贩、python2中unicode表示字符串序列漫仆,str表示字節(jié)序列
    python3中str表示字符串序列,byte表示字節(jié)序列
  • 5泪幌、python2中為正常顯示中文盲厌,引入coding聲明,python3中不需要
  • 6祸泪、python2中是raw_input()函數(shù)吗浩,python3中是input()函數(shù)
Q22. 列出python中可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型,并簡(jiǎn)述原理没隘。

答:

  • 不可變數(shù)據(jù)類型:數(shù)值型懂扼、字符串型string和元組tuple

不允許變量的值發(fā)生變化,如果改變了變量的值右蒲,相當(dāng)于是新建了一個(gè)對(duì)象阀湿,而對(duì)于相同的值的對(duì)象,在內(nèi)存中則只有一個(gè)對(duì)象(一個(gè)地址)瑰妄,如下圖用id()方法可以打印對(duì)象的id


image.png
  • 可變數(shù)據(jù)類型:列表list和字典dict陷嘴;

允許變量的值發(fā)生變化,即如果對(duì)變量進(jìn)行append间坐、+=等這種操作后灾挨,只是改變了變量的值,而不會(huì)新建一個(gè)對(duì)象竹宋,變量引用的對(duì)象的地址也不會(huì)變化劳澄,不過對(duì)于相同的值的不同對(duì)象,在內(nèi)存中則會(huì)存在不同的對(duì)象蜈七,即每個(gè)對(duì)象都有自己的地址秒拔,相當(dāng)于內(nèi)存中對(duì)于同值的對(duì)象保存了多份,這里不存在引用計(jì)數(shù)宪潮,是實(shí)實(shí)在在的對(duì)象溯警。


image.png
Q23. s = 'ajldjlajfdljfddd'趣苏,去重并從小到大排序輸出“adfjl”。

答:

>>> s = 'ajldjlajfdljfddd'
>>> s = set(s)
>>> s
{'d', 'a', 'f', 'j', 'l'}
>>> s = list(s)
>>> s
['d', 'a', 'f', 'j', 'l']
>>> s.sort()
>>> s
['a', 'd', 'f', 'j', 'l']
>>> res = "".join(s)
>>> res
'adfjl'
Q24. 用lambda實(shí)現(xiàn)兩個(gè)數(shù)相乘梯轻。

答:

>>> sum = lambda x,y:x*y
>>> sum(5,4)
20
Q25. 字典根據(jù)鍵從小到大排序食磕。

答:

dict  = {"name":"zs","age":"18","city":"深圳","tel":"1818181818"}
list = sorted(dict.items(),key=lambda i:i[0],reverse=False)
print("sorted根據(jù)字典鍵排序",list)
new_dict = {}
for i in list:
    new_dict[i[0]]=i[1]
print("新字典是:",new_dict)
#輸出
>>> sorted根據(jù)字典鍵排序 [('age', '18'), ('city', '深圳'), ('name', 'zs'), ('tel', '1818181818')]
新字典是: {'age': '18', 'city': '深圳', 'name': 'zs', 'tel': '1818181818'}
Q26. 利用collections庫(kù)的Counter方法統(tǒng)計(jì)字符串每個(gè)單詞出現(xiàn)的次數(shù)"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"

答:

from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
res = Counter(a)
print(res)

>>>Counter({'l': 9, ';': 6, 'h': 6, 'f': 5, 'a': 4, 'j': 3, 'd': 3, 's': 2, 'k': 1, 'g': 1, 'b': 1})
Q27. 字符串a(chǎn) = "not 404 found 張三 99 深圳",每個(gè)詞中間是空格喳挑,用正則過濾掉英文和數(shù)字彬伦,最終輸出"張三 深圳"。

答:

import re
a = "not 404 found 張三 99 深圳"
list = a.split(" ")
print(list)
res = re.findall('\d+|[a-zA-Z]+',a)
for i in res:
    if i in list:
        list.remove(i)

new_str = " ".join(list)
print(res)
print(new_str)

>>>['not', '404', 'found', '張三', '99', '深圳']
['not', '404', 'found', '99']
張三 深圳
Q28. filter方法求出列表所有奇數(shù)并構(gòu)造新列表伊诵,a = [1,2,3,4,5,6,7,8,9,10]单绑。

答:filter()函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件組成的新列表。接收兩個(gè)參數(shù)旦装,第一個(gè)為函數(shù),第二個(gè)為序列区转,序列的每個(gè)元素作為參數(shù)傳遞給函數(shù)進(jìn)行判斷,然后返回True或False版扩,最后將返回True的元素放到新列表废离。

a = [1,2,3,4,5,6,7,8,9,10]
def fn(a):
    return a%2 == 1

newlist = filter(fn,a)
newlist = [i for i in newlist]
print(newlist)

>>>[1, 3, 5, 7, 9]
Q29. 列表推倒式求列表所有奇數(shù)并構(gòu)造新列表,a = [1,2,3,4,5,6,7,8,9,10]礁芦。

答:

a = [1,2,3,4,5,6,7,8,9,10]
res = [i for i in a if i % 2 == 1]
print(res)

>>>[1, 3, 5, 7, 9]
Q30. 正則re.complie作用蜻韭?

答:re.complie是將正則表達(dá)式編譯成一個(gè)對(duì)象,加快速度柿扣,并重復(fù)使用肖方。
例如:

import re

def main():
    content = 'Hello, I am Jerry, from Chongqing, a montain city, nice to meet you……'
    regex = re.compile('\w*o\w*') # 查找所有含有“o”的單詞
    x = regex.findall(content)
    print(x)

if __name__ == '__main__':
    main()

>>>['Hello', 'from', 'Chongqing', 'montain', 'to', 'you']
Q31. a = (1,) b = (1) c = ('1') 分別是什么類型的數(shù)據(jù)?

答:

>>> type((1))
<class 'int'>
>>> type((1,))
<class 'tuple'>
>>> type(('1'))
<class 'str'>
Q32. 將兩個(gè)列表[1,5,7,9]和[2,2,6,8]并為[1,2,2,5,6,7,8,9].

答:

list1 = [1,5,7,9]
list2 = [2,2,6,8]
list1.extend(list2)
print(list1)

list1.sort(reverse=False)
print(list1)

>>>[1, 5, 7, 9, 2, 2, 6, 8]
[1, 2, 2, 5, 6, 7, 8, 9]
Q33. 用python和Linux命令刪除文件的方法窄刘。

答:python: os.remove(文件名)
linux: rm 文件名

Q34. log 日志種窥妇,我們需要時(shí)間戳記錄error,warning等發(fā)生的時(shí)間舷胜,請(qǐng)用datetime模塊打印當(dāng)前時(shí)間戳“ ”娩践。

答:順便把星期的代碼也貼上:

import datetime
a = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ' 星期' + str(datetime.datetime.now().isoweekday())
print(a)

>>>2019-10-22 09:06:26 星期2
Q35. 數(shù)據(jù)庫(kù)優(yōu)化查詢方法?

答:外鍵烹骨、索引翻伺、聯(lián)合查詢、選擇特定字段等沮焕。

Q36. 寫一段自定義異常代碼吨岭。

答:自定義異常使用raise拋出異常:

def fn():
    try:
        for i in range(5):
            if i >2:
                raise Exception('數(shù)字大于2了')
    except Exception as ret:
        print(ret)
fn()

>>>數(shù)字大于2了
Q37. 正則表達(dá)式匹配中,(.)和(.?)匹配區(qū)別峦树?

答:
(.*)是貪婪匹配辣辫,會(huì)把滿足正則的盡可能多的往后匹配
(.*?)是非貪婪匹配旦事,會(huì)把滿足正則的盡可能少匹配

import re
s = '<a>哈哈</a><a>呵呵</a>'
res1 = re.findall('<a>(.*)</a>',s)
print('貪婪匹配',res1)

res2 = re.findall('<a>(.*?)</a>',s)
print('非貪婪匹配',res2)

>>>貪婪匹配 ['哈哈</a><a>呵呵']
非貪婪匹配 ['哈哈', '呵呵']
Q38. 簡(jiǎn)述Django的orm。
image.png
Q39. 一行代碼展開列表a = [[1,2],[3,4],[5,6]],得出[1, 2, 3, 4, 5, 6]急灭。

答:

#一行代碼展開列表
a = [[1,2],[3,4],[5,6]]
x = [j for i in a for j in i]
print(x)

>>>[1, 2, 3, 4, 5, 6]
Q40. x = 'abc', y = 'def', z = ['d','e','f']姐浮,分別求出x.join(y)和 x.join(z)的結(jié)果。

答:join()括號(hào)里面的是可迭代對(duì)象葬馋,x插入可迭代對(duì)象中間卖鲤,結(jié)果一致。

x = 'abc'
y = 'def'
z = ['d','e','f']

m = x.join(y)
n = x.join(z)
print(m)
print(n)

>>>dabceabcf
dabceabcf
Q41. 舉例說明異常模塊中try except else finally的相關(guān)意義畴嘶。

答:try...except...else 沒有捕獲到異常蛋逾,執(zhí)行else語句。
try...except...finally 不管是否捕獲到異常窗悯,都執(zhí)行finally語句
例如:

try:
    num = 100
    print(num)
except NameError as errorMsg:
    print('產(chǎn)生錯(cuò)誤了:%s' %errorMsg)
else:
    print('沒有捕獲到異常区匣,則執(zhí)行該語句')

try:
    num = 100
    print(num)
except NameError as errorMsg:
    print('產(chǎn)生錯(cuò)誤了:%s' %errorMsg)
finally:
    print('不管是否捕獲到異常,都執(zhí)行該句')

>>>100
沒有捕獲到異常蒋院,則執(zhí)行該語句
100
不管是否捕獲到異常沉颂,都執(zhí)行該句
Q42. python中交換兩個(gè)數(shù)值。

答:

>>> a,b = 3,4
>>> print(a,b)
3 4
>>> a,b = b,a
>>> print(a,b)
4 3
Q43. 舉例說明zip()函數(shù)的用法悦污。

答:zip()函數(shù)在運(yùn)算時(shí)铸屉,會(huì)以一個(gè)或多個(gè)序列(可迭代對(duì)象)作為參數(shù),返回一個(gè)元組的列表切端。同時(shí)將這些序列中并排的元素配對(duì)彻坛。
zip()參數(shù)可以接受任何類型的序列,同時(shí)也可以有兩個(gè)以上的參數(shù)踏枣;當(dāng)傳入?yún)?shù)的長(zhǎng)度不同時(shí)昌屉,zip()能自動(dòng)以最短序列長(zhǎng)度為準(zhǔn)進(jìn)行截取,獲得元組茵瀑。

>>> # 列表
>>> a = [1,2]
>>> b = [3,4]
>>> res = [i for i in zip(a,b)]
>>> print(res)
[(1, 3), (2, 4)]
>>> # 元組
>>> a = (1,2)
>>> b = (3,4)
>>> res = [i for i in zip(a,b)]
>>> print(res)
[(1, 3), (2, 4)]
>>> # 字符串
>>> a = 'ab'
>>> b = 'xyz'
>>> res = [i for i in zip(a,b)]
>>> print(res)
[('a', 'x'), ('b', 'y')]
Q44. a="hello"和b="你好"編碼成bytes類型.

答:

>>> a = b'hello'
>>> b = '你好'.encode()
>>> print(a,b)
b'hello' b'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print(b)
b'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print(type(a),type(b))
<class 'bytes'> <class 'bytes'>
Q45. a = [1,2,3]和 b = [4,5,6]相加的結(jié)果是多少间驮?

答:兩個(gè)列表相加,等價(jià)于extend马昨。

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> res = a + b
>>> print(res)
[1, 2, 3, 4, 5, 6]
Q46. 提高python運(yùn)行效率的方法竞帽。

答:

  • 1、使用生成器鸿捧,因?yàn)榭梢怨?jié)約大量?jī)?nèi)存

  • 2屹篓、循環(huán)代碼優(yōu)化,避免過多重復(fù)代碼的執(zhí)行

  • 3匙奴、核心模塊用Cython PyPy等堆巧,提高效率

  • 4、多進(jìn)程、多線程谍肤、協(xié)程

  • 5啦租、多個(gè)if elif條件判斷,可以把最有可能先發(fā)生的條件放到前面寫荒揣,這樣可以減少程序判斷的次數(shù)刷钢,提高效率

Q47. 簡(jiǎn)述mysql和redis區(qū)別。

答:

  • redis: 內(nèi)存型非關(guān)系數(shù)據(jù)庫(kù)乳附,數(shù)據(jù)保存在內(nèi)存中内地,速度快
  • mysql:關(guān)系型數(shù)據(jù)庫(kù),數(shù)據(jù)保存在磁盤中赋除,檢索的話阱缓,會(huì)有一定的Io操作,訪問速度相對(duì)慢举农。
Q48. 遇到bug如何處理荆针?

答:

  • 1、細(xì)節(jié)上的錯(cuò)誤颁糟,通過print()打印航背,能執(zhí)行到print()說明一般上面的代碼沒有問題,分段檢測(cè)程序是否有問題棱貌,如果是js的話可以alert或console.log
  • 2玖媚、如果涉及一些第三方框架,會(huì)去查官方文檔或者一些技術(shù)博客婚脱。
  • 3今魔、對(duì)于bug的管理與歸類總結(jié),一般測(cè)試將測(cè)試出的bug用teambin等bug管理工具進(jìn)行記錄障贸,然后我們會(huì)一條一條進(jìn)行修改错森,修改的過程也是理解業(yè)務(wù)邏輯和提高自己編程邏輯縝密性的方法,我也都會(huì)收藏做一些筆記記錄篮洁。
  • 4涩维、導(dǎo)包問題、城市定位多音字造成的顯示錯(cuò)誤問題
Q49. 正則匹配日期2018-03-20,

url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
答:提取一段特征語句袁波,用(.*?)即可瓦阐。

import re

url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
result = re.findall(r'dateRange=(.*?)%7C(.*?)&',url)
print(result)

>>>[('2018-03-20', '2018-03-20')]
Q50. list = [2,3,5,4,9,6]。從小到大排列锋叨,不許用sort,輸出[2,3,4,5,6,9]垄分。

答:利用min()方法求出最小值,原列表刪除最小值娃磺,新列表加入最小值,遞歸調(diào)用獲取最小值的函數(shù)叫倍,反復(fù)操作偷卧。

list = [2,3,5,4,9,6]
new_list = []

def get_min(list):
    # 獲取列表最小值
    a = min(list)
    # 刪除最小值
    list.remove(a)
    # 將最小值加入新列表
    new_list.append(a)
    # 保證最后列表里面有值豺瘤,遞歸調(diào)用獲取最小值
    # 直到所有值獲取完,并加入新列表返回
    if len(list)>0:
        get_min(list)
    return new_list

new_list = get_min(list)
print(new_list)

>>>[2, 3, 4, 5, 6, 9]
Q51. 保留兩位小數(shù)听诸。

答:round(x,n)方法:返回浮點(diǎn)數(shù)x的四舍五入值(保留小數(shù)點(diǎn)后n位)坐求。

a = '%.03f' %1.3335    # 3前面的0表示補(bǔ)0
print(a,type(a))
b = round(float(a),1)
print(b)
c = round(float(a),2)
print(c)

>>>1.333 <class 'str'>
1.3
1.33
Q52. 求三個(gè)方法打印結(jié)果.

答:

  • fn("one",1)直接將鍵值對(duì)傳給字典;
  • fn("two",2)因?yàn)樽值湓趦?nèi)存中是可變數(shù)據(jù)類型晌梨,所以指向同一個(gè)地址桥嗤,傳了新的額參數(shù)后,會(huì)相當(dāng)于給字典增加鍵值對(duì)
  • fn("three",3,{})因?yàn)閭髁艘粋€(gè)新字典仔蝌,所以不再是原先默認(rèn)參數(shù)的字典
def fn(k,v,dic={}):
    dic[k] = v
    print(dic)

fn('one',1)
fn('two',2)
fn('three',3,{})

>>>
{'one': 1}
{'one': 1, 'two': 2}
{'three': 3}
Q53. 列出常見的狀態(tài)碼和意義泛领。

答:

狀態(tài)碼 意義
200 OK 請(qǐng)求正常處理完畢
204 No Content 請(qǐng)求成功處理,沒有實(shí)體的主體返回
206 Partial Content GET范圍請(qǐng)求已成功處理
301 Moved Permanently 永久重定向敛惊,資源已永久分配新URI
302 Found 臨時(shí)重定向渊鞋,資源已臨時(shí)分配新URI
303 See Other 臨時(shí)重定向,期望使用GET定向獲取
304 Not Modified 發(fā)送的附帶條件請(qǐng)求未滿足
307 Temporary Redirect 臨時(shí)重定向瞧挤,POST不會(huì)變成GET
400 Bad Request 請(qǐng)求報(bào)文語法錯(cuò)誤或參數(shù)錯(cuò)誤
401 Unauthorized 需要通過HTTP認(rèn)證锡宋,或認(rèn)證失敗
403 Forbidden 請(qǐng)求資源被拒絕
404 Not Found 無法找到請(qǐng)求資源(服務(wù)器無理由拒絕)
500 Internal Server Error 服務(wù)器故障或Web應(yīng)用故障
503 Service Unavailable 服務(wù)器超負(fù)載或停機(jī)維護(hù)
Q54. 分別從前端、后端特恬、數(shù)據(jù)庫(kù)闡述web項(xiàng)目的性能優(yōu)化执俩。

答:
前端優(yōu)化:

  • 減少http請(qǐng)求、例如制作精靈圖
  • html和CSS放在頁面上部癌刽,javascript放在頁面下面奠滑,因?yàn)閖s加載比HTML和Css加載慢,所以要優(yōu)先加載html和css,以防頁面顯示不全妒穴,性能差宋税,也影響用戶體驗(yàn)差
    后端優(yōu)化:
  • 緩存存儲(chǔ)讀寫次數(shù)高,變化少的數(shù)據(jù)讼油,比如網(wǎng)站首頁的信息杰赛、商品的信息等。應(yīng)用程序讀取數(shù)據(jù)時(shí)矮台,一般是先從緩存中讀取乏屯,如果讀取不到或數(shù)據(jù)已失效,再訪問磁盤數(shù)據(jù)庫(kù)瘦赫,并將數(shù)據(jù)再次寫入緩存辰晕。
  • 異步方式,如果有耗時(shí)操作确虱,可以采用異步含友,比如celery
  • 代碼優(yōu)化,避免循環(huán)和判斷次數(shù)太多,如果多個(gè)if else判斷窘问,優(yōu)先判斷最有可能先發(fā)生的情況
    數(shù)據(jù)庫(kù)優(yōu)化:
  • 如有條件辆童,數(shù)據(jù)可以存放于redis,讀取速度快
  • 建立索引惠赫、外鍵等
Q55. 使用pop和del刪除字典中的"name"字段把鉴,dic={"name":"zs","age":18}

答:

>>> dic = {'name':'zs','age':18}
>>> dic.pop('name')
'zs'
>>> dic
{'age': 18}
>>> dic = {'name':'zs','age':18}
>>> del dic['name']
>>> dic
{'age': 18}
Q56. 列出常見MYSQL數(shù)據(jù)存儲(chǔ)引擎

答:
InnoDB:支持事務(wù)處理,支持外鍵儿咱,支持崩潰修復(fù)能力和并發(fā)控制庭砍。如果需要對(duì)事務(wù)的完整性要求比較高(比如銀行),要求實(shí)現(xiàn)并發(fā)控制(比如售票)混埠,那選擇InnoDB有很大的優(yōu)勢(shì)怠缸。如果需要頻繁的更新、刪除操作的數(shù)據(jù)庫(kù)岔冀,也可以選擇InnoDB凯旭,因?yàn)橹С质聞?wù)的提交(commit)和回滾(rollback)。

MyISAM:插入數(shù)據(jù)快使套,空間和內(nèi)存使用比較低罐呼。如果表主要是用于插入新記錄和讀出記錄,那么選擇MyISAM能實(shí)現(xiàn)處理高效率侦高。如果應(yīng)用的完整性嫉柴、并發(fā)性要求比 較低,也可以使用奉呛。

MEMORY:所有的數(shù)據(jù)都在內(nèi)存中计螺,數(shù)據(jù)的處理速度快,但是安全性不高瞧壮。如果需要很快的讀寫速度登馒,對(duì)數(shù)據(jù)的安全性要求較低,可以選擇MEMOEY咆槽。它對(duì)表的大小有要求陈轿,不能建立太大的表。所以秦忿,這類數(shù)據(jù)庫(kù)只使用在相對(duì)較小的數(shù)據(jù)庫(kù)表麦射。

Q57. 計(jì)算一些代碼運(yùn)行結(jié)果。

答:

A = zip(('a','b','c','d','e'),(1,2,3,4,5))
A0 = dict(A)
A1 = range(10)
A2 = [i for i in A1 if i in A0]
A3 = [A0[s] for s in A0]

print('A0:',A0)
print(list(zip(('a','b','c','d','e'),(1,2,3,4,5))))
print('A2:',A2)
print('A3:',A3)

>>>
A0: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]
A2: []
A3: [1, 2, 3, 4, 5]

dict()創(chuàng)建字典新方法

#創(chuàng)建字典新方法
#列表
s = dict([['name','zs'],['age',18]])
print(s)

# 元組
a = dict([('name','zs'),('age',18)])
print(a)

>>>
{'name': 'zs', 'age': 18}
{'name': 'zs', 'age': 18}
Q58. 簡(jiǎn)述同源策略.

答: 同源策略需要同時(shí)滿足以下三點(diǎn)要求:

  • 協(xié)議相同
  • 域名相同
  • 端口相同

http:www.test.comhttps:www.test.com 不同源——協(xié)議不同
http:www.test.comhttp:www.admin.com 不同源——域名不同
http:www.test.comhttp:www.test.com:8081 不同源——端口不同

只要不滿足其中任意一個(gè)要求灯谣,就不符合同源策略潜秋,就會(huì)出現(xiàn)“跨域”

Q59. 簡(jiǎn)述cookie和session的區(qū)別

答:

    1. session 在服務(wù)器端,cookie 在客戶端(瀏覽器)胎许。
    1. session 的運(yùn)行依賴 session id峻呛,而 session id 是存在 cookie 中的罗售,也就是說,如果瀏覽器禁用了 cookie 杀饵,同時(shí) session 也會(huì)失效莽囤,存儲(chǔ)Session時(shí)谬擦,鍵與Cookie中的sessionid相同切距,值是開發(fā)人員設(shè)置的鍵值對(duì)信息,進(jìn)行了base64編碼惨远,過期時(shí)間由開發(fā)人員設(shè)置谜悟。
    1. cookie安全性比session差。
Q60. 簡(jiǎn)述多進(jìn)程北秽、多線程葡幸。

答:
進(jìn)程:

  • 操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,多個(gè)進(jìn)程之間相互獨(dú)立贺氓。
  • 穩(wěn)定性好蔚叨,如果一個(gè)進(jìn)程崩潰,不影響其他進(jìn)程辙培,但是進(jìn)程消耗資源大蔑水,開啟的進(jìn)程數(shù)量有限制。

線程:

  • CPU進(jìn)行資源分配和調(diào)度的基本單位扬蕊,線程是進(jìn)程的一部分搀别,是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位,一個(gè)進(jìn)程下的多個(gè)線程可以共享該進(jìn)程的所有資源尾抑。
  • 如果IO操作密集歇父,則可以多線程運(yùn)行效率高,缺點(diǎn)是如果一個(gè)線程崩潰再愈,都會(huì)造成進(jìn)程的崩潰榜苫。

應(yīng)用:

  • IO密集的用多線程,在用戶輸入翎冲,sleep 時(shí)候垂睬,可以切換到其他線程執(zhí)行,減少等待的時(shí)間府适。
  • CPU密集的用多進(jìn)程羔飞,因?yàn)榧偃鏘O操作少,用多線程的話檐春,因?yàn)榫€程共享一個(gè)全局解釋器鎖逻淌,當(dāng)前運(yùn)行的線程會(huì)霸占GIL,其他線程沒有GIL疟暖,就不能充分利用多核CPU的優(yōu)勢(shì)卡儒。
Q61. 簡(jiǎn)述any()和all()方法田柔。

答:

  • any():只要迭代器中有一個(gè)元素為真就為真
  • all():迭代器中所有的判斷項(xiàng)返回都是真,結(jié)果才為真
    python中什么元素為假骨望?
    (0硬爆,空字符串,空列表擎鸠、空字典缀磕、空元組、None, False)
Q62. 常見異常類型及其說明劣光。

答:

異常類型 說明
IOError 輸入輸出異常
AttributeError 試圖訪問一個(gè)對(duì)象沒有的屬性
ImportError 無法引入模塊或包袜蚕,基本是路徑問題
IndentationError 語法錯(cuò)誤,代碼沒有正確的對(duì)齊
IndexError 下標(biāo)索引超出序列邊界
KeyError 試圖訪問你字典里不存在的鍵
SyntaxError Python代碼邏輯語法出錯(cuò)绢涡,不能執(zhí)行
NameError 使用一個(gè)還未賦予對(duì)象的變量
Q63. 列出幾種魔法方法并簡(jiǎn)要介紹用途牲剃。

答:

方法 用途
__init__ 對(duì)象初始化方法
__new__ 創(chuàng)建對(duì)象時(shí)候執(zhí)行的方法,單列模式會(huì)用到
__str__ 當(dāng)使用print輸出對(duì)象的時(shí)候雄可,只要自己定義了__str__(self)方法凿傅,那么就會(huì)打印從在這個(gè)方法中return的數(shù)據(jù)
__del__ 刪除對(duì)象執(zhí)行的方法
Q64. 請(qǐng)將[i for i in range(3)]改成生成器。

答:生成器是特殊的迭代器

  • 列表表達(dá)式 [] 改為 () 即可變成生成器数苫。
  • 函數(shù)在返回值的時(shí)候出現(xiàn)yield就變成生成器聪舒,而不是函數(shù)了。
>>> a = [i for i in range(3)]
>>> type(a)
<class 'list'>
>>> b = (i for i in range(3))
>>> type(b)
<class 'generator'>
Q65. 去除字符串的空格文判。

答:

>>> a = ' hehehe '
>>> a
' hehehe '
>>> a.strip()
'hehehe'
Q66. 舉例sort和sorted對(duì)列表排序过椎,list = [0,-1,3,-10,5,9]

答:

list = [0,-1,3,-10,5,9]
list.sort(reverse=False) # 一種方法
print('list.sort在list基礎(chǔ)上修改,無返回值',list)

list2 = [0,-1,3,-10,5,9]
res = sorted(list2,reverse=False) #一種函數(shù)
print('sorted有返回值是新的list2',list2)
print('返回值',res)

>>>
list.sort在list基礎(chǔ)上修改戏仓,無返回值 [-10, -1, 0, 3, 5, 9]
sorted有返回值是新的list2 [0, -1, 3, -10, 5, 9]
返回值 [-10, -1, 0, 3, 5, 9]
Q67. 對(duì)list排序疚宇,foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函數(shù)從小到大排列赏殃。

答:

foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
a = sorted(foo,key=lambda x:x)
print(a)

>>>
[-20, -5, -4, -4, -2, 0, 2, 4, 8, 8, 9]
Q68. 使用lambda函數(shù)對(duì)list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]敷待,輸出結(jié)果為[0, 2, 4, 8, 8, 9, -2, -4, -4, -5, -20]

答:傳兩個(gè)條件,x<0和abs(x)

foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
b = sorted(foo,key = lambda x:(x<0,abs(x)))
print(b)

>>>[0, 2, 4, 8, 8, 9, -2, -4, -4, -5, -20]
Q69. 列表嵌套字典的排序仁热,分別根據(jù)年齡和姓名排序榜揖。

答:

foo = [{'name':'zs','age':19},{'name':'ss','age':54},
       {'name':'wa','age':17},{'name':'df','age':23}]
# 根據(jù)年齡從大到小排序
a = sorted(foo,key = lambda x:x['age'],reverse=True)
print('根據(jù)年齡從大到小排序:',a)
# 根據(jù)姓名從小到大
b = sorted(foo,key = lambda x:x['name'])
print('根據(jù)姓名從小到大排序:',b)

>>>根據(jù)年齡從大到小排序: [{'name': 'ss', 'age': 54}, {'name': 'df', 'age': 23}, {'name': 'zs', 'age': 19}, {'name': 'wa', 'age': 17}]
根據(jù)姓名從小到大排序: [{'name': 'df', 'age': 23}, {'name': 'ss', 'age': 54}, {'name': 'wa', 'age': 17}, {'name': 'zs', 'age': 19}]
Q70. 列表嵌套元組,分別按字母和數(shù)字排序抗蠢。

答:

foo = [('zs',19),('ss',54),
       ('wa',17),('df',23)]
# 根據(jù)年齡從大到小排序
a = sorted(foo,key = lambda x:x[1],reverse=True)
print('根據(jù)年齡從大到小排序:',a)
# 根據(jù)姓名從小到大
b = sorted(foo,key = lambda x:x[0])
print('根據(jù)姓名從小到大排序:',b)

>>> 根據(jù)年齡從大到小排序: [('ss', 54), ('df', 23), ('zs', 19), ('wa', 17)]
根據(jù)姓名從小到大排序: [('df', 23), ('ss', 54), ('wa', 17), ('zs', 19)]
Q71. 列表嵌套列表排序举哟,年齡數(shù)字相同怎么辦?

答:

foo =[['zs',19],['zl',54],
      ['wa',23],['df',23],['xf',23]]
a = sorted(foo,key=lambda x:(x[1],x[0])) #年齡相同迅矛,按字母排序
print(a)
b = sorted(foo,key=lambda x:x[0])
print(b)

>>>[['zs', 19], ['df', 23], ['wa', 23], ['xf', 23], ['zl', 54]]
[['df', 23], ['wa', 23], ['xf', 23], ['zl', 54], ['zs', 19]]
Q72. 根據(jù)鍵對(duì)字典排序(方法一妨猩,zip函數(shù))

答:

dic = {'name':'zs','sex':'man','city':'bj'}
foo = zip(dic.keys(),dic.values()) # 字典轉(zhuǎn)列表嵌套元組
foo = [i for i in foo]
print('字典轉(zhuǎn)成列表嵌套元組',foo)
b = sorted(foo,key=lambda x:x[0])
print('根據(jù)鍵排序',b)
new_dic = {i[0]:i[1] for i in b}
print('字典推倒式構(gòu)造新字典',new_dic)

>>>
字典轉(zhuǎn)成列表嵌套元組 [('name', 'zs'), ('sex', 'man'), ('city', 'bj')]
根據(jù)鍵排序 [('city', 'bj'), ('name', 'zs'), ('sex', 'man')]
字典推倒式構(gòu)造新字典 {'city': 'bj', 'name': 'zs', 'sex': 'man'}
Q73. 根據(jù)鍵對(duì)字典排序(方法二,不用zip)

答:

dic = {'name':'zs','sex':'man','city':'bj'}
print('字典轉(zhuǎn)成列表嵌套元組',dic.items())

b = sorted(dic.items(),key=lambda x:x[0])
print('根據(jù)鍵排序',b)
new_dic = {i[0]:i[1] for i in b}
print('字典推倒式構(gòu)造新字典',new_dic)

>>>字典轉(zhuǎn)成列表嵌套元組 dict_items([('name', 'zs'), ('sex', 'man'), ('city', 'bj')])
根據(jù)鍵排序 [('city', 'bj'), ('name', 'zs'), ('sex', 'man')]
字典推倒式構(gòu)造新字典 {'city': 'bj', 'name': 'zs', 'sex': 'man'}
Q74. 列表推導(dǎo)式秽褒、字典推導(dǎo)式壶硅、生成器

答:

>>> import random
>>> td_list = [i for i in range(10)]
>>> print('列表推導(dǎo)式',td_list,type(td_list))
列表推導(dǎo)式 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
>>> ge_list=(i for i in range(10))
>>> print('生成器',ge_list)
生成器 <generator object <genexpr> at 0x00000200A4BD4570>
>>> dic = {k:random.randint(4,9) for k in ['a','b','c','d']}
>>> print('字典推導(dǎo)式',dic,type(dic))
字典推導(dǎo)式 {'a': 7, 'b': 5, 'c': 8, 'd': 5} <class 'dict'>
Q75. 根據(jù)字符串長(zhǎng)度進(jìn)行排序威兜。

答:

>>> s = ['ab','abc','a','djsk']
>>> b = sorted(s,key=lambda x:len(x))
>>> print(b,s)
['a', 'ab', 'abc', 'djsk'] ['ab', 'abc', 'a', 'djsk']
>>> s.sort(key=len) #sort無返回值,在s自身修改
>>> print(s)
['a', 'ab', 'abc', 'djsk']
Q76. s = 'info:xiaozhang 33 shandong'庐椒,用正則切分字符串輸出['info','xiaozhang','33','shandong']椒舵。

答:| 表示或,根據(jù)冒號(hào)或空格進(jìn)行切分约谈。

>>> import re
>>> s = 'info:xiaozhang 33 shandong'
>>> res = re.split(r':| ',s)
>>> print(res)
['info', 'xiaozhang', '33', 'shandong']
Q77. 正則匹配以163.com結(jié)尾的郵箱笔宿。

答:

import re
email_list = ['xiaowang@163.com','xiaowang@163.comhei','xiaowang@qq.com','xiaos@163.com']

for email in email_list:
    ret = re.match('[\w]{4,20}@163\.com$',email)
    if ret:
        print('%s 是符合規(guī)定的郵箱地址,匹配后的結(jié)果是:%s' % (email,ret.group()))

    else:
        print('%s 不符合要求'% email)

>>>
xiaowang@163.com 是符合規(guī)定的郵箱地址窗宇,匹配后的結(jié)果是:xiaowang@163.com
xiaowang@163.comhei 不符合要求
xiaowang@qq.com 不符合要求
xiaos@163.com 是符合規(guī)定的郵箱地址措伐,匹配后的結(jié)果是:xiaos@163.com
Q78. 遞歸求和

答:

# 遞歸求1—10累加的和
def get_sum(num):
    if num>=1:
        res = num + get_sum(num-1)
    else:
        res = 0
    return res
res = get_s
um(10)
print(res)

>>>55
Q79. python字典和json字符串相互轉(zhuǎn)化方法特纤。

答:json.dumps():字典轉(zhuǎn)json字符串 军俊,json.loads():json轉(zhuǎn)字典

import json
dic = {'name':'zs'}
res = json.dumps(dic) # 字典轉(zhuǎn)json字符串
print(res,type(res))
ret = json.loads(res) # json字符串轉(zhuǎn)字典
print(ret,type(ret))

>>>
{"name": "zs"} <class 'str'>
{'name': 'zs'} <class 'dict'>
Q80. 統(tǒng)計(jì)字符串中某字符出現(xiàn)的次數(shù)

答:

str = '張三 美國(guó) 張三 哈哈 張 三'
res = str.count('張三')
print(res)

>>>2
Q81. 字符串轉(zhuǎn)換大小寫。

答:

str = 'HHHuuu'
print(str.upper())
print(str.lower())

>>>
HHHUUU
hhhuuu
Q82. 用兩種方法去空格捧存。

答:

str = 'hello world ha ha'
res = str.replace(' ','')
print(res)

list = str.split(' ')
print(list)
ret = ''.join(list)
print(ret)

>>>
helloworldhaha
['hello', 'world', 'ha', 'ha']
helloworldhaha
Q83. 正則匹配不是以4和7結(jié)尾的手機(jī)號(hào)

答:

import re
tels = ['13100001234','18936774821','10086','17389274827']
for tel in tels:
    ret = re.match('1\d{9}[0-3,5-6,8-9]',tel)
    if ret:
        print('想要的結(jié)果',ret.group())
    else:
        print('%s 不是想要的手機(jī)號(hào)' % tel)

>>>
13100001234 不是想要的手機(jī)號(hào)
想要的結(jié)果 18936774821
10086 不是想要的手機(jī)號(hào)
17389274827 不是想要的手機(jī)號(hào)
Q84. 正則表達(dá)式匹配第一個(gè)url粪躬。

答:findall結(jié)果無需加group(),search需要加group()提取昔穴。

import re
s = '<img data-original="https://ridc.sfhfh.cn/sffha/dghha/shams.jpg" src="https://shfsk/safj.jpg" dhdfksk;>'
res = re.findall(r"https://.*?\.jpg",s)[0]
print(res)
ret = re.search(r"https://.*?\.jpg",s)
print(ret.group())

>>>
https://ridc.sfhfh.cn/sffha/dghha/shams.jpg
https://ridc.sfhfh.cn/sffha/dghha/shams.jpg
Q85. 正則匹配中文镰官。

答:

import re
title = '你好,hello,世界'
pattern = re.compile(r'[\u4e00-\u9fa5]+') # 中文的 unicode 編碼范圍 主要在 [u4e00-u9fa5]
result = pattern.findall(title)

print(result)

>>>['你好', '世界']
Q86. r吗货、r+泳唠、rb、rb+文件打開模式區(qū)別

答:


image.png
Q87. 正則表達(dá)式匹配出<html><h1>www.itcast.cn</h1></html>

答:

import re
labels = ['<html><h1>www.itcast.cn</h1></html>','<html><h1>www.itcast.cn</h2></html>']
for label in labels:
    ret = re.match(r'<(\w*)><(\w*)>.*?</\2></\1>',label)
    if ret:
        print('%s 是符合要求的標(biāo)簽'% ret.group())
    else:
        print('%s 不符合要求'% label)

>>>
<html><h1>www.itcast.cn</h1></html> 是符合要求的標(biāo)簽
<html><h1>www.itcast.cn</h2></html> 不符合要求
Q88. python傳參數(shù)是傳值還是傳址宙搬?

答:Python中函數(shù)參數(shù)是引用傳遞(注意不是值傳遞)笨腥。對(duì)于不可變類型(數(shù)值型、字符串勇垛、元組)脖母,因變量不能修改,所以運(yùn)算不會(huì)影響到變量自身闲孤;而對(duì)于可變類型(列表谆级、字典)來說,函數(shù)體運(yùn)算可能會(huì)更改傳入的參數(shù)變量讼积。

def selfAdd(a):
    a += a

a_int = 1
print(a_int)
selfAdd(a_int)
print(a_int)

a_list = [1,2]
print(a_list)
selfAdd(a_list)
print(a_list)

>>>
1
1
[1, 2]
[1, 2, 1, 2]
Q89. 求兩個(gè)列表的交集肥照、差集、并集勤众。

答:

>>> a = [1,2,3,4]
>>> b = [4,3,5,6]
>>> jj1 = [i for i in a if i in b] # 在a中的i,并且也在b中舆绎,就是交集
>>> print('交集',jj1)
交集 [3, 4]
>>> jj2 = list(set(a).intersection(set(b))) #求交集的函數(shù)
>>> print('交集',jj2)
交集 [3, 4]
>>> bj1 = list(set(a).union(set(b))) # 用union求并集
>>> print('并集',bj1)
并集 [1, 2, 3, 4, 5, 6]
>>> cj1 = list(set(b).difference(set(a))) # b中有而a中沒有
>>> print('差集,b中有而a中沒有:',cj1)
差集决摧,b中有而a中沒有: [5, 6]
>>> cj1 = list(set(a).difference(set(b))) # a中有而b中沒有
>>> print('差集亿蒸,a中有而b中沒有:',cj1)
差集凑兰,a中有而b中沒有: [1, 2]
Q90. 生成0~100的隨機(jī)數(shù)

答:random.random()生成0~1之間的隨機(jī)小數(shù),所以乘100.

import random
res1 = 100*random.random() #隨機(jī)小數(shù)
res2 = random.choice(range(0,101)) #隨機(jī)整數(shù)
res3 = random.randint(1,100) #隨機(jī)整數(shù)
print(res1)
print(res2)
print(res3)

>>>
95.76401356168898
40
30
Q91. lambda匿名函數(shù)的好處

答:精簡(jiǎn)代碼边锁,lambda省去了定義函數(shù)姑食,map省去了寫for循環(huán)過程。

>>> a = ['蘇州','中國(guó)','','hh','','效率','']
>>> res = list(map(lambda x:'填充值' if x == '' else x,a))
>>> print(res)
['蘇州', '中國(guó)', '填充值', 'hh', '填充值', '效率', '填充值']
Q92. 常見的網(wǎng)絡(luò)傳輸協(xié)議茅坛。

答:UDP音半、TCP、FTP贡蓖、HTTP曹鸠、SMTP等等。

Q93. HTTP請(qǐng)求中g(shù)et和post區(qū)別斥铺。

答:

  • GET請(qǐng)求是通過URL直接請(qǐng)求數(shù)據(jù)彻桃,數(shù)據(jù)信息可以在URL中直接看到,比如瀏覽器訪問晾蜘;而POST請(qǐng)求是放在請(qǐng)求頭中的邻眷,我們是無法直接看到的;
  • GET提交有數(shù)據(jù)大小的限制剔交,一般是不超過1024個(gè)字節(jié)肆饶,而這種說法也不完全準(zhǔn)確,HTTP協(xié)議并沒有設(shè)定URL字節(jié)長(zhǎng)度的上限岖常,而是瀏覽器做了些處理驯镊,所以長(zhǎng)度依據(jù)瀏覽器的不同有所不同;POST請(qǐng)求在HTTP協(xié)議中也沒有做說明竭鞍,一般來說是沒有設(shè)置限制的板惑,但是實(shí)際上瀏覽器也有默認(rèn)值×耄總體來說洒放,少量的數(shù)據(jù)使用GET,大量的數(shù)據(jù)使用POST滨砍。
  • GET請(qǐng)求因?yàn)閿?shù)據(jù)參數(shù)是暴露在URL中的往湿,所以安全性比較低,比如密碼是不能暴露的惋戏,就不能使用GET請(qǐng)求领追;POST請(qǐng)求中,請(qǐng)求參數(shù)信息是放在請(qǐng)求頭的响逢,所以安全性較高绒窑,可以使用。在實(shí)際中舔亭,涉及到登錄操作的時(shí)候些膨,盡量使用HTTPS請(qǐng)求蟀俊,安全性更好。
Q94. python中讀取Excel文件的方法订雾。

答:應(yīng)用數(shù)據(jù)分析庫(kù)pandas

import pandas as pd
df = pd.read_excel('123.xlsx')
print(df)
Q95. 簡(jiǎn)述多線程肢预、多進(jìn)程。

答:
進(jìn)程

  • 操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位洼哎,多個(gè)進(jìn)程之間相互獨(dú)立烫映。
  • 穩(wěn)定性好,如果一個(gè)進(jìn)程崩潰噩峦,不影響其他進(jìn)程锭沟,但是進(jìn)程消耗資源大,開啟的進(jìn)程數(shù)量有限制识补。
    線程
  • CPU進(jìn)行資源分配和調(diào)度的基本單位族淮,線程是進(jìn)程的一部分,是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位李请,一個(gè)進(jìn)程下的多個(gè)線程可以共享該進(jìn)程的所有資源瞧筛;
  • 如果IO操作密集,則可以多線程運(yùn)行效率高导盅,缺點(diǎn)是如果一個(gè)線程崩潰,都會(huì)造成進(jìn)程的崩潰揍瑟。
    應(yīng)用
  • IO密集的用多線程白翻,在用戶輸入,sleep 時(shí)候绢片,可以切換到其他線程執(zhí)行滤馍,減少等待的時(shí)間;
  • CPU密集的用多進(jìn)程底循,因?yàn)榧偃鏘O操作少巢株,用多線程的話,因?yàn)榫€程共享一個(gè)全局解釋器鎖熙涤,當(dāng)前運(yùn)行的線程會(huì)霸占GIL阁苞,其他線程沒有GIL,就不能充分利用多核CPU的優(yōu)勢(shì)祠挫。
Q96. python正則中search和match

答:

import re
s = '小明年齡18歲 工資10000'
res = re.search(r'\d+',s).group() 
print('search結(jié)果(匹配到第一個(gè)匹配的數(shù)據(jù))',res)

res = re.findall(r'\d+',s)
print('findall結(jié)果(滿足正則那槽,都匹配,不用加group())',res)

res = re.match('小明',s).group()
print('match結(jié)果(匹配‘小明’開頭的字符串等舔,并匹配出小明)',res) 

res = re.match('工資',s).group()
print('match結(jié)果(‘工資’不是字符串開頭骚灸,匹配不到,報(bào)錯(cuò))',res) 

>>>
search結(jié)果(匹配到第一個(gè)匹配的數(shù)據(jù)) 18
findall結(jié)果(滿足正則慌植,都匹配甚牲,不用加group()) ['18', '10000']
match結(jié)果(匹配‘小明’開頭的字符串义郑,并匹配出小明) 小明
Traceback (most recent call last):
  File "C:/Users/dybhh/Desktop/pypractice/100-96.py", line 12, in <module>
    res = re.match('工資',s).group()
AttributeError: 'NoneType' object has no attribute 'group'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丈钙,隨后出現(xiàn)的幾起案子魔慷,更是在濱河造成了極大的恐慌,老刑警劉巖著恩,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件院尔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喉誊,警方通過查閱死者的電腦和手機(jī)邀摆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伍茄,“玉大人栋盹,你說我怎么就攤上這事》蠼茫” “怎么了例获?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)曹仗。 經(jīng)常有香客問我榨汤,道長(zhǎng),這世上最難降的妖魔是什么怎茫? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任收壕,我火速辦了婚禮,結(jié)果婚禮上轨蛤,老公的妹妹穿的比我還像新娘蜜宪。我一直安慰自己,他們只是感情好祥山,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布圃验。 她就那樣靜靜地躺著,像睡著了一般缝呕。 火紅的嫁衣襯著肌膚如雪澳窑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天岳颇,我揣著相機(jī)與錄音照捡,去河邊找鬼。 笑死话侧,一個(gè)胖子當(dāng)著我的面吹牛栗精,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼悲立,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鹿寨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起薪夕,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤脚草,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后原献,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馏慨,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年姑隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了写隶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讲仰,死狀恐怖慕趴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鄙陡,我是刑警寧澤冕房,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站趁矾,受9級(jí)特大地震影響耙册,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愈魏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一觅玻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧培漏,春花似錦、人聲如沸胡本。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侧甫。三九已至珊佣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間披粟,已是汗流浹背咒锻。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留守屉,地道東北人惑艇。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滨巴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子思灌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,720評(píng)論 0 10
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子恭取,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    伊森H閱讀 3,048評(píng)論 0 15
  • Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Category是什么?重寫一個(gè)類的方式用繼承好還是分類好...
    small_Sun閱讀 734評(píng)論 0 0
  • 1985年泰偿,當(dāng)喬布斯失去蘋果公司的實(shí)權(quán)之后,他選擇離職蜈垮,因?yàn)閷?duì)于30歲的喬布斯來說萨赁,還有很多夢(mèng)想要實(shí)現(xiàn)。他賣掉了蘋...
    甜茶不加奶閱讀 335評(píng)論 1 7