- python2和python3的區(qū)別
- fun(*args,**kwargs)中的*args,**kwargs什么意思?
- 談下python的GIL
- 列出5個python標(biāo)準(zhǔn)庫
- 一句話解釋什么樣的語言能夠使用裝飾器
- python的內(nèi)建數(shù)據(jù)類型有哪些
- 簡述_ _init_ _
- _ _new_ _和_ _init的區(qū)別
- 簡述with方法打開處理文件
- 列出python中可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型
- 裝飾器
- python為什么不需要編譯,你是怎么理解python解釋器的
- 你寫代碼的時候會考慮對代碼進(jìn)行優(yōu)化嗎
- python生成器與迭代器
- python的優(yōu)劣(為什么會慢)
- 講講hash,python的dict用的是哪種方法解決沖突
- python閉包
- lambda表達(dá)式寫一下,隨便寫一個,它的好處
- 條件表達(dá)式寫一個(三元表達(dá)式)
- python里深拷貝和淺拷貝說一下
- python里多線程和多進(jìn)程說一下
- python中如何實(shí)現(xiàn)多線程
- 進(jìn)程和線程
- python的反射和自省
- 單引號、雙引號和三引號的區(qū)別
- str的常用方法
- python導(dǎo)入文件,都用過哪些導(dǎo)入方式
- python的依賴用過嗎,多線程呢,繼承呢,多態(tài)呢
- 解釋繼承
- 解釋python中的help()和dir()
- 一大段字符串,單詞以空格隔開,統(tǒng)計每一個單詞的詞頻
- 什么是猴子補(bǔ)丁
- isinstance()和type()區(qū)別
- 大數(shù)據(jù)的文件讀取
- find和grep
- python中的異常處理
- 什么是斷言?應(yīng)用場景
- 列舉python中的五個異常類型及其含義
- python中變量有單下劃線前綴和結(jié)尾,雙下劃線前綴和結(jié)尾,區(qū)別是什么
- sort和sorted的區(qū)別
- 什么是負(fù)索引
- python的read()、readline()、readlines()、xreadlines()
- 如何隨機(jī)打亂列表中的元素,要求不引用額外的內(nèi)存空間
?
以上問題收集于各個面經(jīng)。
以下答案為個人總結(jié),部分來源于網(wǎng)絡(luò),僅供參考。
- (1)python2中print是語句,python3中print是函數(shù)。python3中print后必須是小括號,python2中print后可以是小括號也可以是空格分隔。? ? (2)python中使用ASCII編碼,python3中使用utf-8編碼。? ? (3)python中為了正常顯示中文需要引入coding聲明,python3不需要。? ? (4)python3去掉了long類型,現(xiàn)在只有整形.? ? (5)python2 range(1,10)返回列表,python3返回迭代器,節(jié)約內(nèi)存。
- *args代表 位置參數(shù) ,它會接收任意多個參數(shù)并把這些參數(shù)作為元組傳遞給函數(shù)。? ? **kwargs代表的關(guān)鍵字參數(shù),允許使用事先沒有定義的參數(shù)名,另外,位置參數(shù)一定要放在 關(guān)鍵字參數(shù) 前面。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在函數(shù)定義中使用? args 和 kwargs 傳遞可變長參數(shù)。? args 用來將參數(shù)打包成 tuple 給函數(shù)體調(diào)用。? kwargs 打包關(guān)鍵字參數(shù)成 dict 給函數(shù)體調(diào)用。
-
GIL(Global Interpreter Lock)全局解釋器鎖,任何Python線程執(zhí)行前,必須先獲得GIL鎖,然后,每執(zhí)行100條字節(jié)碼,解釋器就自動釋放GIL鎖,讓別的線程有機(jī)會執(zhí)行。這個GIL全局鎖實(shí)際上把所有線程的執(zhí)行代碼都給上了鎖,所以,多線程在Python中只能交替執(zhí)行,即使100個線程跑在100核CPU上,也只能用到1個核。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 利用多進(jìn)程可以實(shí)現(xiàn)同時運(yùn)行。但是多進(jìn)程中每個進(jìn)程都會被系統(tǒng)分配資源,相當(dāng)于每個進(jìn)程都有一個python解釋器。這樣導(dǎo)致系統(tǒng)的資源開銷大。
-
math: 數(shù)學(xué)運(yùn)算? ? ?re: 正則匹配? ? ?datetime: 處理日期時間? ? ?os: 提供與操作系統(tǒng)相關(guān)聯(lián)的函數(shù)? ? ?doctest: 測試相關(guān)。
-
函數(shù)可以作為參數(shù)傳遞的語言,可以使用裝飾器。
-
整形(int)、布爾型(bool)、字符串(str)、列表(list)、元組(tuple)、字典(dict)。
-
_ _init_ _是初始化方法,創(chuàng)建對象后,就立刻被默認(rèn)調(diào)用了,可接收函數(shù)。
-
創(chuàng)建一個新實(shí)例時調(diào)用_ _new_ _,初始化一個實(shí)例用_ _init_ _,這是他們最本質(zhì)的區(qū)別;? new方法會返回所構(gòu)造的對象,init不會,new函數(shù)必須以cls最為第一個參數(shù),而init則以self作為其第一個參數(shù)。
-
打開文件在讀寫的時候可能會出現(xiàn)一些異常情況,如果按照常規(guī)的f.open寫法,我們需要try、expect、finally,做出異常判斷,并且文件最終不管遇到什么情況,都要執(zhí)行finally? f.close()關(guān)閉文件,with幫我們實(shí)現(xiàn)了finally中的close。
-
python3的基本數(shù)據(jù)類型有6種:Num(int、float、bool、complex),string,list,set,dictionary,tuple。其中可變數(shù)據(jù)類型為:list、dic、set(列字集)。不可變數(shù)據(jù)類型為:Num、str、tuple(數(shù)字元)。
-
本質(zhì)上,裝飾器(decorator)就是一個返回函數(shù)的高階函數(shù)。它能使函數(shù)的功能得到補(bǔ)充,而同時不用修改函數(shù)的本身代碼。? 【作用和功能:引入日志、函數(shù)執(zhí)行時間統(tǒng)計、執(zhí)行函數(shù)前預(yù)備處理、執(zhí)行函數(shù)后的清理功能、權(quán)限校驗(yàn)等場景、緩存】
-
解釋器由一個編譯器和一個虛擬機(jī)組成,編譯器負(fù)責(zé)將源代碼轉(zhuǎn)換成字節(jié)碼文件,而虛擬機(jī)負(fù)責(zé)執(zhí)行字節(jié)碼,所以,解釋型語言也有編譯過程,只不過這個編譯過程并不是直接生成目標(biāo)代碼,而是中間代碼(字節(jié)碼),然后再通過虛擬機(jī)來解釋執(zhí)行字節(jié)碼。同一個代碼在下一次執(zhí)行的時候還要重新逐行解釋。
-
(1)使用直觀、貼切的函數(shù)和變量名? ? ?(2)with關(guān)鍵字? ? ?(3)避免導(dǎo)入整個庫? ?(4)使用生成器? ? ?
-
生成器是一次生成一個值的特殊類型函數(shù)。通過列表生成式可以直接創(chuàng)建一個列表。但是,收到內(nèi)存限制,列表容量有限。
-
【python是一個動態(tài)的解釋型語言,python中的值不是存儲在緩存區(qū)而是分散的存儲在對象中;python寫完程序,提交到解釋器,解釋器會立刻將第一行的代碼翻譯成機(jī)器碼,然后提交給CPU去執(zhí)行,然后進(jìn)入下一行。所以python比那些編譯型的語言執(zhí)行起來要慢】
-
hash(散列函數(shù))是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)。? ? ?python使用散列表來實(shí)現(xiàn)dict,在dict的散列表中,每個鍵值對都占用一個表元,每個表元都有兩個部分,一個是對鍵的引用,一個是對值得引用。因?yàn)槊總€表元的大小一致,所以可以通過偏移量來讀取某個表元。
-
在一個外函數(shù)中定義了一個內(nèi)函數(shù),內(nèi)函數(shù)里運(yùn)用了外函數(shù)的臨時變量,并且外函數(shù)的返回值是內(nèi)函數(shù)的引用。這樣就構(gòu)成了一個閉包。? ? ?如果在一個內(nèi)部函數(shù)里。對在外部作用域(但不是在全局作用域)的變量進(jìn)行引用,那么內(nèi)部函數(shù)就是一個閉包。? ? 【閉包作用:裝飾器、面向?qū)ο蟆?shí)現(xiàn)單利模式】
-
lambda x:x*x? ? ?lambda表示匿名函數(shù),因?yàn)闆]有函數(shù)名字,不必?fù)?dān)心函數(shù)名沖突。簡潔,不用def、return。
-
?x=1 if x>y else 0
-
淺拷貝(copy()):只是對另一個變量內(nèi)存地址的拷貝,這兩個變量只想同一個內(nèi)存地址。【特點(diǎn):共用一個值、內(nèi)存地址一樣、其中一個值改變,另一個變量的值也會改變】? ? ?深拷貝(deepcopy()):一個變量對另一個變量的值拷貝。【特點(diǎn):兩個變量的內(nèi)存地址不同、連個變量各有自己的值,互不影響、任意一個改變不會影響另一個】? ?
深淺拷貝用法來自copy模塊。
導(dǎo)入模塊:import copy
淺拷貝:copy.copy
深拷貝:copy.deepcopy
-
1、進(jìn)程就是活著的程序,程序不過是一些文本,運(yùn)行著的程序就是進(jìn)程,是系統(tǒng)進(jìn)行資源調(diào)度和分配的基本單位,掌握資源,包括內(nèi)存等,線程就是輕量級進(jìn)程,是CPU調(diào)度和分派基本單位。? ? ?2、由于進(jìn)程占有資源,壓棧和出棧慢,所以切換不靈活,線程不占資源,只占必要的資源(遞歸要壓棧所以有一點(diǎn)資源),所以線程容易通信->在進(jìn)程分來的內(nèi)存中直接通信,容易并發(fā)->切換靈活,同一進(jìn)程的線程切換速度很快,因此線程開銷小? ? ?3、地址空間,進(jìn)程獨(dú)立,同一進(jìn)程的線程共享資源,對其他進(jìn)程的線程獨(dú)立
-
線程是輕量級的進(jìn)程,多線程允許一次執(zhí)行多個線程。眾所周知,Python 是一種多線程語言,它有一個多線程包。
GIL(全局解釋器鎖)確保一次執(zhí)行單個線程。一個線程保存 GIL 并在將其傳遞給下一個線程之前執(zhí)行一些操作,這就產(chǎn)生了并行執(zhí)行的錯覺。但實(shí)際上,只是線程輪流在 CPU 上。當(dāng)然,所有傳遞都會增加執(zhí)行的開銷。
-
對于操作系統(tǒng)來說,一個任務(wù)就是一個進(jìn)程(Process),比如打開一個瀏覽器就是啟動一個瀏覽器進(jìn)程,有些進(jìn)程還不止同時干一件事,比如Word,它可以同時進(jìn)行打字、拼寫檢查、打印等事情。在一個進(jìn)程內(nèi)部,要同時干多件事,就需要同時運(yùn)行多個線程(Tread)。? ? ? ? ? ? ? ? ? ? 在Unix/Linux下,可以使用fork()調(diào)用實(shí)現(xiàn)多進(jìn)程,要實(shí)現(xiàn)跨平臺的多進(jìn)程,可以使用multiprocessing模塊。進(jìn)程間通信通過queue、pipes實(shí)現(xiàn)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Python解釋器由于設(shè)計時有GIL全局鎖,導(dǎo)致了多線程無法利用多核。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?多線程和多進(jìn)程最大的不同在于,多進(jìn)程中,同一個變量,各自有一份拷貝存在于每個進(jìn)程中,互不影響,而多線程中,所有變量都由所有線程共享,所以,任何一個變量都可以被任何一個線程修改,因此,線程之間共享數(shù)據(jù)最大的危險在于多個線程同時改一個變量,把內(nèi)容給改亂了。
-
反射的作用就是列出對象所有的屬性和方法,發(fā)射就是告訴我們,這個對象到底是什么,提供什么功能。dir()是一個內(nèi)置的反射函數(shù),可以列出對象的屬性和方法。
-
單引號和雙引號的普通用法是相同的,單引號和雙引號的區(qū)別主要體現(xiàn)在用單引號包起來的字符串里包含雙引號的時候,不需要轉(zhuǎn)義符,反過來也是一樣。? ? ?三引號的核心用法主要體現(xiàn)在跨行的字符串上,會包含兩個界定符之間所有字符。還有就是三引號可以多行注釋。
-
0
-
0
-
0
-
一個類繼承自另一個類,也可以說是一個孩子類/派生類/子類,繼承自父類/基類/超類,同時獲取所有的類成員(屬性和方法)。
繼承使我們可以重用代碼,并且還可以更方便地創(chuàng)建和維護(hù)代碼。Python 支持以下類型的繼承:
1. 單繼承- 一個子類類繼承自單個基類
2. 多重繼承- 一個子類繼承自多個基類
3. 多級繼承- 一個子類繼承自一個基類,而基類繼承自另一個基類
4. 分層繼承- 多個子類繼承自同一個基類
5. 混合繼承- 兩種或兩種以上繼承類型的組合
-
?
help()函數(shù)返回幫助文檔和參數(shù)說明? ? ?dir()函數(shù)返回對象中的所有成員
-
?
首先用split()函數(shù)以空格為間隔,分離出每一個單詞存到列表中,再用自帶的count()函數(shù)去統(tǒng)計詞頻,但這樣就不是考算法了,所以可以用第二種方法,每次讀一個單詞與后面的作比較,遇到一樣的計數(shù)就加一。然后用同樣的方式去算其他單詞的詞頻
?
(人生第一次求職面試,感覺太慌了,感覺一切都靠本能。其實(shí)第二種方法很笨,實(shí)際應(yīng)用中根本就不合實(shí)際,因?yàn)闀r間復(fù)雜度太高,工作中我肯定會用第一種,但第一種調(diào)用內(nèi)置函數(shù)看不到你的思路)
(當(dāng)我走出面試房間的時候,我就想到了第三種方法,時間復(fù)雜度O(n))
(使用哈希,以單詞作為鍵,每遇到這個單詞,以該單詞為鍵的值就加一,只需要遍歷一次,就能統(tǒng)計完所有的詞頻,感覺很遺憾)
-
在運(yùn)行時動態(tài)修改類和模塊
-
isinstance()函數(shù)用來判斷一個對象是否是一個已知類型,類似type()。【區(qū)別在于:type()不會認(rèn)為子類是父類類型,isinstance()會認(rèn)為是,考慮繼承關(guān)系】
-
(1)利用生成器(2)迭代器進(jìn)行迭代遍歷:for line in file
-
grep命令是一種強(qiáng)大的文本搜索工具,grep搜索內(nèi)容串可以是正則表達(dá)式,允許對文本文件進(jìn)行模式查找。如果找到匹配模式,grep打印包含模式的所有行。
find通常用來再特定的目錄下搜索符合條件的文件,也可以用來搜索特定用戶屬主的文件。
-
用try / except / else 語句來檢測try語句塊中的錯誤,從而讓except語句捕捉異常信息處理。
-
python中斷言用assert實(shí)現(xiàn),一般在表達(dá)式為True的情況下,程序才能通過。
-
AttributeError 對象沒有這個屬性
NotImplementedError 尚未實(shí)現(xiàn)的方法
StopIteration 迭代器沒有更多的值
TypeError 對類型無效的操作
IndentationError 縮進(jìn)錯誤
-
變量名_xxx被看作是“私有 的”,在模塊或類外不可以使用。“單下劃線開頭” 的成員變量叫做保護(hù)變量,意思是只有類對象和子類對象才能訪問到這些變量。
-
他倆都可以對列表元素進(jìn)行排序。不同在于,sort是在原位重新排列列表,而sorted()是產(chǎn)生一個新的列表。sort是應(yīng)用在list上的方法。sorted可以對所有可迭代的對象進(jìn)行排序操作。“雙下劃線開頭” 的是私有成員,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個數(shù)據(jù)。
-
負(fù)索引一般表示的是從后面取元素。
- read()會讀取整個文件,將讀取到底的文件內(nèi)容放到一個字符串變量,返回str類型。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?readline()讀取一行內(nèi)容,放到一個字符串變量,返回str類型。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?readlines() 讀取文件所有內(nèi)容,按行為單位放到一個列表中,返回list類型。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?xreadlines()返回一個生成器,來循環(huán)操作文件的每一行。
- random包中的shuffle()函數(shù)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
