摘要:所以在多線程中,線程的運(yùn)行仍是有先后順序的,并不是同時(shí)進(jìn)行。哈希函數(shù)的目的是使鍵均勻地分布在數(shù)組中。由于不同的鍵可能具有相同的哈希值,即可能出現(xiàn)沖突,高級(jí)的哈希函數(shù)能夠使沖突數(shù)目最小化。
首先這篇文章在我的《Python數(shù)據(jù)結(jié)構(gòu)》公眾號(hào)已經(jīng)提及,但是本篇文章提供了更為高級(jí)的解法,來發(fā)散大家的思維;同時(shí)為大家提供我的草稿py文件,大家可以關(guān)注《Python數(shù)據(jù)結(jié)構(gòu)》公眾號(hào)后恢復(fù) 120 獲取源代碼。
1、一行代碼實(shí)現(xiàn)1--100之和?
sum(range(0, 100))
2、如何在一個(gè)函數(shù)內(nèi)部修改全局變量?
num = 5 def func(): global num num = 4 func() print(num)
3、 列出5個(gè)常用Python標(biāo)準(zhǔn)庫(kù)?
os:提供了不少與操作系統(tǒng)相關(guān)聯(lián)的函數(shù) sys:通常用于命令行參數(shù) re:正則匹配 math:數(shù)學(xué)運(yùn)算 datetime:處理日期時(shí)間
4 、如何合并兩個(gè)字典?
name = {"name": "Gage"} age = {"age": 25} name.update(age) print(name)
5、談下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)資源開銷大。
6、Python實(shí)現(xiàn)列表去重的方法?
num_list = [1, 3, 1, 5, 3, 6, 1] print([num for num in set(num_list)])
7、fun(args,kwargs)中的args,kwargs什么意思?
如果你有其他語言基礎(chǔ)的話,你應(yīng)該聽說過重載的概念,對(duì),Python為了避免這種繁瑣的情況發(fā)送,引入了args和kwargs;args用來接受非鍵值對(duì)的數(shù)據(jù),即元組類型,而kwargs則用來接受鍵值對(duì)數(shù)據(jù),即字典類
8、Python2和Python3的range(100)的區(qū)別?
Python2返回列表,Python3返回迭代器,節(jié)約內(nèi)存。
9、生成一個(gè)16位的隨機(jī)字符串?
import string print("".join((random.choice(string.printable)) for i in range(16))) ------------------------------------------------- X{|op?_gSM-ra%N
10、一句話解釋什么樣的語言能夠用裝飾器?
函數(shù)可以作為參數(shù)傳遞的語言,可以使用裝飾器。
11、Python內(nèi)建數(shù)據(jù)類型有哪些?
整型--int 布爾型--bool 字符串--str 列表--list 元組--tuple 字典--dict
12、簡(jiǎn)述面向?qū)ο笾衉_new__和__init__區(qū)別?
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ù)。
13、簡(jiǎn)述with方法打開處理文件幫我我們做了什么?
打開文件在進(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(當(dāng)然還有其他自定義功能,有興趣可以研究with方法源碼)。
14、列表[1,2,3,4,5],請(qǐng)使用map()函數(shù)輸出[1,4,9,16,25],并使用列表推導(dǎo)式提取出大于10的數(shù),最終輸出[16,25]?
num_list = [1, 2, 3, 4, 5] print([x for x in list(map(lambda x: x * x, num_list)) if x > 10])
15、python中生成隨機(jī)整數(shù)、隨機(jī)小數(shù)、0--1之間小數(shù)方法?
import random print(random.randint(1, 10)) # 隨機(jī)整數(shù) print(random.random()) # 0-1隨機(jī)小數(shù) print(random.uniform(2, 6)) # 指定隨機(jī)小數(shù)
16、避免轉(zhuǎn)義給字符串加哪個(gè)字母表示原始字符串?
b"input " # bytes字節(jié)符,打印以b開頭。 輸出: b"input " ------- r"input " # 非轉(zhuǎn)義原生字符,經(jīng)處理" "變成了""和"n"。也就是 表示的是兩個(gè)字符,而不是換行。 輸出: "input " ------- u"input " # unicode編碼字符,python3默認(rèn)字符串編碼方式。 輸出: "input "
17、
import re s = "Python" print(re.findall(r"(.*?)", s))
18、Python中斷言方法舉例?
age = 10 assert 0 < age < 10 -------------------- Traceback (most recent call last): File "F:/MxOnline/110/exam.py", line 69, inassert 0 < age < 10 AssertionError
19、dict中fromkeys的用法
keys = ("info",) print(dict.fromkeys(keys, ["Gage", "25", "man"]))
20、請(qǐng)用正則表達(dá)式輸出漢字
import re a = "not 404 found 中國(guó) 2018 我愛你" r1 = "[a-zA-Z0-9’!"#$%&"()*+,-./:;<=>?@,。?★、…【】《》?“”‘’![]^_`{|}~]+s?" print(re.sub(r1, "", a))
21、Python2和Python3區(qū)別?列舉5個(gè)
1.去除了<>,全部改用!= 2.xrange() 改名為range() 3.內(nèi)存操作cStringIO改為StringIO 4.加入nonlocal 作用:可以引用外層非全局變量 5.zip()、map()和filter()都返回迭代器,而不是生成器,更加節(jié)約內(nèi)存
22、列出Python中可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型,為什么?
1、可變數(shù)據(jù)類型:list、dict、set 2、不可變數(shù)據(jù)類型:int/float、str、tuple 3、原理:可變數(shù)據(jù)類型即公用一個(gè)內(nèi)存空間地址,不可變數(shù)據(jù)類型即每產(chǎn)生一個(gè)對(duì)象就會(huì)產(chǎn)生一個(gè)內(nèi)存地址
23、dict的內(nèi)部實(shí)現(xiàn)?
在Python中,字典是通過哈希表實(shí)現(xiàn)的。也就是說,字典是一個(gè)數(shù)組,而數(shù)組的索引是鍵經(jīng)過哈希函數(shù)處理后得到的。哈希函數(shù)的目的是使鍵均勻地分布在數(shù)組中。由于不同的鍵可能具有相同的哈希值,即可能出現(xiàn)沖突,高級(jí)的哈希函數(shù)能夠使沖突數(shù)目最小化。
24、s = "ajldjlajfdljfffffd",去重并從小到大排序輸出"adfjl"?
s1 = "ajldjlajfdljfffffd" print("".join(sorted(set(s1))))
25、用lambda函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)相乘?
mul = lambda x, y: x*y print(mul(2, 4))
26、字典根據(jù)鍵從小到大排序?
info = {"name": "Gage", "age": 25, "sex": "man"} print(sorted(info.items(), key=lambda x: x[0]))
27、Python獲取當(dāng)前日期?
import time import datetime print(datetime.datetime.now()) print(time.strftime("%Y-%m-%d %H:%M:%S"))
28、獲取請(qǐng)求頭的參數(shù)?
from urllib.parse import urlparse, parse_qs s2 = "/get_feed_list?version_name=5.0.9.0&device_id=12242channel_name=google" def spiltline(value): url = {"site": urlparse(value).path} url.update(parse_qs(urlparse(value).query)) return url
29、例舉五條PEP8 規(guī)范
不要在行尾加分號(hào), 也不要用分號(hào)將兩條命令放在同一行 不要使用反斜杠連接行 不要在返回語句或條件語句中使用括號(hào) 頂級(jí)定義之間空2行, 方法定義之間空1行,頂級(jí)定義之間空兩行 如果一個(gè)類不繼承自其它類, 就顯式的從object繼承
30、Python語言的運(yùn)行機(jī)制
31、Fibonacci數(shù)列
def fab(n): a, b = 0, 1 while n: yield b a, b = b, a+b n -= 1
32、Python三目運(yùn)算
# 若果 a>b 成立 就輸出 a-b 否則 a+b h = a-b if a>b else a+b
33、單例模式
class Single(object): __isstance = None __first_init = False def __new__(cls, *args, **kwargs): if not cls.__isstance: cls.__isstance = object.__new__(cls) return cls.__isstance def __init__(self, name): if not self.__first_init: self.name = name Singleton.__first_init = True
34、正則匹配優(yōu)先級(jí)
35、遞歸
def digui(n): if n == 1: return 1 else: return (n * digui(n-1))
36、統(tǒng)計(jì)字符串每個(gè)單詞出現(xiàn)的次數(shù)
from collections import Counter s3 = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h" print(Counter(s3))
37、正則re.complie作用
re.compile是將正則表達(dá)式編譯成一個(gè)對(duì)象,加快速度,并重復(fù)使用
38、filter方法求出列表所有奇數(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] print(list(filter(lambda x: x % 2, a)))
39、列表推導(dǎo)式求列表所有奇數(shù)并構(gòu)造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print([x for x in a if x % 2])
40、a=(1,)b=(1),c=("1") 分別是什么類型的數(shù)據(jù)?
print(type((1, ))) # tuple print(type((1))) # int print(type(("1"))) # str
41、兩個(gè)列表[1,5,7,9]和[2,2,6,8]合并為[1,2,2,3,6,7,8,9]
l1 = [1, 5, 7, 9] l2 = [2, 2, 6, 8] l1.extend(l2)
42、用python刪除文件和用linux命令刪除文件方法
python:os.remove(文件名) linux: rm 文件名
43、logging模塊的使用?
import logging logging.basicConfig(level = logging.INFO,format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s") logger = logging.getLogger(__name__) logger.info("Start print log") logger.debug("Do something") logger.warning("Something maybe fail.") logger.info("Finish")
44、寫一段自定義異常代碼
#自定義異常用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了
45、正則表達(dá)式匹配中,(.)和(.?)匹配區(qū)別?
#(.*)是貪婪匹配,會(huì)把滿足正則的盡可能多的往后匹配 #(.*?)是非貪婪匹配,會(huì)把滿足正則的盡可能少匹配 s = "哈哈呵呵" import re res1 = re.findall("(.*)", s) print("貪婪匹配", res1) res2 = re.findall("(.*?)", s) print("非貪婪匹配", res2) ------------------------- 輸出: 貪婪匹配 ["哈哈呵呵"] 非貪婪匹配 ["哈哈", "呵呵"]
46、[[1,2],[3,4],[5,6]]一行代碼展開該列表,得出[1,2,3,4,5,6]
a=[[1,2],[3,4],[5,6]] print([j for i in a for j in i])
47、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"] a=x.join(y) b=x.join(z) print(a) print(b) 均輸出: dabceabcf
48、舉例說明異常模塊中try except else finally的相關(guān)意義
try..except..else沒有捕獲到異常,執(zhí)行else語句 try..except..finally不管是否捕獲到異常,都執(zhí)行finally語句
49、python中交換兩個(gè)數(shù)值
a,b=1,2 a,b=b,a
50、舉例說明zip()函數(shù)用法
list1 = [1, 2, 3, 5] list2 = [4, 5, 6] zipped = zip(list1, list2) # print(list(zipped)) # [(1, 4), (2, 5), (3, 6)] # print(list(zip(*zipped))) # [(1, 2, 3), (4, 5, 6)]
51、a="張明 98分",用re.sub,將98替換為100
import re a="張明 98分" ret=re.sub(r"d+","100",a) print(ret)
52、a="hello"和b="你好"編碼成bytes類型
a=b"hello" b="你好".encode() print(a,b) print(type(a),type(b))
53、[1,2,3]+[4,5,6]的結(jié)果是多少?
print([1,2,3]+[4,5,6]) # [1, 2, 3, 4, 5, 6]
54、提高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ù),提高效率
55、遇到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ò)誤問題
56、list=[2,3,5,4,9,6],從小到大排序,不許用sort,輸出[2,3,4,5,6,9]
def quicksort(list): if len(list)<2: return list else: midpivot = list[0] lessbeforemidpivot = [i for i in list[1:] if i<=midpivot] biggerafterpivot = [i for i in list[1:] if i > midpivot] finallylist = quicksort(lessbeforemidpivot)+[midpivot]+quicksort(biggerafterpivot) return finallylist print quicksort([2,3,5,4,9,6])
57、兩數(shù)相除保留兩位小數(shù)
print(round(5/3, 2))
58、正則匹配,匹配日期2018-03-20
import re print(re.findall("((?:(?:[2468][048]00|[13579][26]00|[1-9]d0[48]|[1-9]d[2468][048]|[1-9]d[13579][26])/(?:0?2/(?:0[1-9]|0?[1-9](?=D)|[12]d)))|(?:(?:[12]d{3})/(?:(?:0?2/(?:0[1-9]|0?[1-9](?=D)|1d|2[0-8]))|(?:0?[3578]/(?:0[1-9]|0?[1-9](?=D)|[12]d|3[01]))|(?:0?[469]/(?:0[1-9]|0?[1-9](?=D)|[12]d|30))|(?:1[02]/(?:0[1-9]|0?[1-9](?=D)|[12]d|3[01]))|(?:11/(?:0[1-9]|0?[1-9](?=D)|[12]d|30))|(?:0?1/(?:0[1-9]|0?[1-9](?=D)|[12]d|3[01])))))", "Date:2018/03/20"))
59、使用pop和del刪除字典中的"name"字段,dic={"name":"zs","age":18}
dic = {"name": "zs", "age": 18} dic.pop("name") del dic["age"] print(dic) # {}
60、簡(jiǎn)述多線程、多進(jìn)程
進(jìn)程是資源(CPU、內(nèi)存等)分配的基本單位,它是程序執(zhí)行時(shí)的一個(gè)實(shí)例。 線程是程序執(zhí)行時(shí)的最小單位,它是進(jìn)程的一個(gè)執(zhí)行流。 進(jìn)程有自己的獨(dú)立地址空間,每啟動(dòng)一個(gè)進(jìn)程,系統(tǒng)就會(huì)為它分配地址空間,建立數(shù)據(jù)表來維護(hù)代碼段、堆棧段和數(shù)據(jù)段,這種操作非常昂貴 線程是共享進(jìn)程中的數(shù)據(jù)的,使用相同的地址空間,因此CPU切換一個(gè)線程的花費(fèi)遠(yuǎn)比進(jìn)程要小很多,同時(shí)創(chuàng)建一個(gè)線程的開銷也比進(jìn)程要小很多
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43356.html
1、css3新增偽類有哪些?2、html5有哪些新特性、移除了哪些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分HTML和HTML5?3、使用jquery遇到過哪些問題?你是怎么解決的?4、jquery中有哪些方法可以遍歷節(jié)點(diǎn)?5、在ajax中data主要有幾種方式?6、自定義指令(v-check、v-focus)的方法有哪些?它主要有哪些鉤子函數(shù)? 隨記:我拿到這個(gè)題目的時(shí)候,我看到紙...
1、css3新增偽類有哪些?2、html5有哪些新特性、移除了哪些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分HTML和HTML5?3、使用jquery遇到過哪些問題?你是怎么解決的?4、jquery中有哪些方法可以遍歷節(jié)點(diǎn)?5、在ajax中data主要有幾種方式?6、自定義指令(v-check、v-focus)的方法有哪些?它主要有哪些鉤子函數(shù)? 隨記:我拿到這個(gè)題目的時(shí)候,我看到紙...
1、css3新增偽類有哪些?2、html5有哪些新特性、移除了哪些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分HTML和HTML5?3、使用jquery遇到過哪些問題?你是怎么解決的?4、jquery中有哪些方法可以遍歷節(jié)點(diǎn)?5、在ajax中data主要有幾種方式?6、自定義指令(v-check、v-focus)的方法有哪些?它主要有哪些鉤子函數(shù)? 隨記:我拿到這個(gè)題目的時(shí)候,我看到紙...
摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...
閱讀 543·2023-04-25 14:26
閱讀 1299·2021-11-25 09:43
閱讀 3492·2021-09-22 15:25
閱讀 1461·2019-08-30 15:54
閱讀 536·2019-08-30 12:57
閱讀 781·2019-08-29 17:24
閱讀 3177·2019-08-28 18:13
閱讀 2699·2019-08-28 17:52