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

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