Python筆試面試題小結(jié)
1.字符串處理
將字符串中的數(shù)字替換成其兩倍的值,例如:
修改前:"AS7G123m (d)F77k"
修改后:"AS14G246m (d)F154k"
個(gè)人思路:先用正則表達(dá)式將其中的數(shù)字匹配出來(lái)進(jìn)行乘2操作,然后將字符串根據(jù)其中的數(shù)字進(jìn)行切割,得到一個(gè)字符列表,最終將乘以2后的數(shù)字和原有的字符進(jìn)行拼接得到最后的結(jié)果。(我腦子比較笨,想不到別的,如果您有更好更簡(jiǎn)便的方法,希望可以分享一下?。?/p>
import re text = "AS7G123m (d)F77k" nums = re.findall(r'(\d+)', text) # 取出字符串中數(shù)字 double_nums = [2 * int(i) for i in nums] # 乘以2 the_str = [] # 字符列表 for i in nums: the_str.append(text.split(i, 1)[0]) text = text.split(i, 1)[1] result = "" # 結(jié)果 for i in range(len(double_nums)): result += the_str[i] + str(double_nums[i]) result += text print(result)
2.Python傳參是值傳遞還是引用傳遞?
答案是Python中傳遞參數(shù)是引用傳遞,那么要證明是引用傳遞呢?可以參考下面這個(gè)例子:
def f(x): print(id(x)) a = 1 print(id(a)) f(a) # 140716760159264 # 140716760159264
這里分別打印了兩個(gè)地址,一個(gè)是對(duì)象a的地址,一個(gè)是傳入的參數(shù)x的地址,可以看到兩個(gè)地址是一樣的,這也就說(shuō)明Python中的傳參使用的引用傳遞!需要注意的是:對(duì)于不可變類型,在函數(shù)中對(duì)其操作并不會(huì)對(duì)原對(duì)象產(chǎn)生影響,但對(duì)于可變類型,在函數(shù)中對(duì)其操作則可能會(huì)改變其值,如下:
1)傳入的參數(shù)是不可變類型:
def f(x): x += "666" # 這里會(huì)創(chuàng)建一個(gè)新的對(duì)象 print(x) s = "777" # 字符串不可變 print(s) f(s) print(s) # 777 # 777666 # 777
2)傳入的參數(shù)是可變類型:
def f(x): x.append(4) # 修改原對(duì)象的值 print(x) s = [1, 2, 3] # 列表可變 print(s) f(s) print(s) # [1, 2, 3] # [1, 2, 3, 4] # [1, 2, 3, 4]
3.淺拷貝與深拷貝的那些事
在Python中,淺拷貝與深拷貝是一定要分清楚的!對(duì)于淺拷貝和深拷貝,可以這么理解:
1)淺拷貝:創(chuàng)建一個(gè)對(duì)象,但其中包含的是原對(duì)象中所包含項(xiàng)的引用,如果用引用的方式修改了其中的對(duì)象,就會(huì)對(duì)原對(duì)象進(jìn)行改變。
2)深拷貝:創(chuàng)建一個(gè)對(duì)象,并且遞歸復(fù)制原對(duì)象中所包含的對(duì)象,此時(shí)修改數(shù)據(jù)不會(huì)對(duì)原對(duì)象產(chǎn)生影響。
在下面的代碼中包含了賦值、淺拷貝和深拷貝,在Python中賦值即引用對(duì)象,所以對(duì)c操作也就是對(duì)原對(duì)象a進(jìn)行操作,對(duì)于淺拷貝對(duì)象b和d,對(duì)其中的引用進(jìn)行操作會(huì)改變對(duì)a中的對(duì)象,而對(duì)深拷貝對(duì)象e進(jìn)行操作就與原對(duì)象a無(wú)關(guān)了。
import copy a = [1, [2], 3] b = a[:] # 使用切片操作,淺拷貝 c = a # 賦值操作,即引用 d = a.copy() # 淺拷貝 e = copy.deepcopy(a) # 深拷貝 b.append(4) c.append(5) d.append(6) d[1].append(2) e.append(7) e[1].append(3) print(a) # [1, [2, 2], 3, 5] print(b) # [1, [2, 2], 3, 4] print(c) # [1, [2, 2], 3, 5] print(d) # [1, [2, 2], 3, 6] print(e) # [1, [2, 3], 3, 7]
4.Python一行式能干嘛?
下面是一些Python一行式的示例,從中可以看出Python是非常簡(jiǎn)潔和強(qiáng)大的!
1)一行代碼輸出一百以內(nèi)的奇數(shù):
print([x for x in range(100) if x % 2])
2)一行代碼求水仙花數(shù):
print([x for x in range(100, 1000) if int(str(x)[0])**3 + int(str(x)[1])**3 + int(str(x)[2])**3 == x])
3)一行代碼打印九九乘法表:
print("".join(["{} * {} = {}\t".format(x, y, x * y) if x != y else "{} * {} = {}\n".format(x, y, x * y) for x in range(1, 10) for y in range(1, x + 1)]))
4)一行代碼實(shí)現(xiàn)IP地址轉(zhuǎn)換,如將192.168.12.1轉(zhuǎn)換成0b11000000 10101000 00001100 00000001:
print("0b"+" ".join(("00000000" + bin(int(i)).replace("0b", ""))[-8:] for i in ip.split(".")))
5)一行代碼求1到10的和:
from functools import reduce; print(reduce(lambda x, y: x + y, [i for i in range(1, 11)]))
5.下面這段代碼的結(jié)果是什么?
def mul(): return [lambda x: x * i for i in range(4)] print([m(2) for m in mul()])
以上這段代碼輸出的結(jié)果是[6, 6, 6, 6],而不是[0, 2, 4, 6]!
產(chǎn)生這個(gè)問(wèn)題的原因在于Python閉包的延遲綁定。這意味著內(nèi)部函數(shù)被調(diào)用時(shí),參數(shù)的值在閉包內(nèi)進(jìn)行查找。所以當(dāng)mul()返回的函數(shù)被調(diào)用時(shí),i的值會(huì)在返回的函數(shù)里查找,而for循環(huán)完成后i的值為3,也就是i最終賦值為3。因此,每次返回的函數(shù)乘以傳入的值就是最后的結(jié)果,得到的結(jié)果就是[6, 6, 6, 6]。
如果要解決這個(gè)問(wèn)題,可以參考以下方法:
1)使用Python生成器。
def mul(): for i in range(4): yield lambda x: x * i print([m(2) for m in mul()])
2)創(chuàng)造一個(gè)閉包,利用默認(rèn)函數(shù)進(jìn)行綁定。
def mul(): return [lambda x, i=i: x * i for i in range(4)] print([m(2) for m in mul()])
這篇文章先介紹到這,后期腳本之家小編會(huì)為大家分享更多的文章。
相關(guān)文章
在Python的Django框架中simple-todo工具的簡(jiǎn)單使用
這篇文章主要介紹了在Python的Django框架中simple-todo工具的簡(jiǎn)單使用,該工具基于原web.py中的開(kāi)源項(xiàng)目,需要的朋友可以參考下2015-05-05對(duì)python .txt文件讀取及數(shù)據(jù)處理方法總結(jié)
下面小編就為大家分享一篇對(duì)python .txt文件讀取及數(shù)據(jù)處理方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python深度學(xué)習(xí)pytorch實(shí)現(xiàn)圖像分類數(shù)據(jù)集
這篇文章主要為大家講解了關(guān)于Python深度學(xué)習(xí)中pytorch實(shí)現(xiàn)圖像分類數(shù)據(jù)集的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10Python實(shí)戰(zhàn)爬蟲(chóng)之女友欲買(mǎi)文胸不知何色更美
實(shí)踐來(lái)源于理論,做爬蟲(chóng)前肯定要先了解相關(guān)的規(guī)則和原理,網(wǎng)絡(luò)爬蟲(chóng)又稱為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò)機(jī)器人,更經(jīng)常的稱為網(wǎng)頁(yè)追逐者,是一種按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或者腳本。一句話概括就是網(wǎng)上信息搬運(yùn)工。本篇文章帶你深入了解,需要的朋友可以參考下2021-09-09python編程scrapy簡(jiǎn)單代碼實(shí)現(xiàn)搜狗圖片下載器
這篇文章主要為大家介紹了使用python scrapy簡(jiǎn)單代碼實(shí)現(xiàn)搜狗圖片下載器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11用Python登錄Gmail并發(fā)送Gmail郵件的教程
這篇文章主要介紹了用Python登錄Gmail并發(fā)送Gmail郵件的教程,利用了Python的SMTP庫(kù),代碼非常簡(jiǎn)單,需要的朋友可以參考下2015-04-04Python 如何實(shí)時(shí)向文件寫(xiě)入數(shù)據(jù)(附代碼)
這篇文章主要介紹了Python 如何實(shí)時(shí)向文件寫(xiě)入數(shù)據(jù)(附代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07利用python實(shí)現(xiàn)PSO算法優(yōu)化二元函數(shù)
這篇文章主要介紹了python實(shí)現(xiàn)PSO算法優(yōu)化二元函數(shù)的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11