1. 什麼是python?使用python有什麼好處? python是一種編程語言,它有對象、模塊、線程、異常處理和自動內存管理。它簡潔,簡單、方便、容易擴展、有許多自帶的數據結果,並且它開源 2. python是如何被解釋的? Python是一種解釋性語言,它的源代碼能夠直接運行,Python解釋器會將源代碼轉換成中間語言,以後再翻譯成機器碼再執行 3. PEP8規範,規範的好處是什麼? 1.縮進:4個空實現縮進,儘可能不使用Tab 2.行:沒行最大長度不超過79,換行可使用反斜槓 3.命名規範: 4.註釋規範: 4. 單引號,雙引號,三引號的區別 答:單引號和雙引號是等效的,若是要換行,須要符號(\),三引號則能夠直接換行,而且能夠包含註釋 5. 數組和元祖之間的區別是什麼? 數組和元祖之間的區別:數組內容能夠被修改,而元祖內容是隻讀的,不可被修改的,另外元祖能夠被哈希,好比做爲字典的key 6. Python裏面如何實現tuple和list的轉換? 答:直接使用tuple和list函數就好了,type()能夠判斷對象的類型 7.請寫出一段Python代碼實現刪除一個list裏面的重複元素 答:1,使用set函數,list(set(list)) 8.編程用sort進行排序 答: 1.同理sort(set(list)) 9. Python都有哪些自帶的數據結構? Python自帶的數據結構分爲可變和不可變的:可變的有:數組、集合、字典,不可變的是:字符串、元祖、整數 10. 深淺拷貝 淺拷貝只是增長了一個指針指向一個存在的地址,而深拷貝是增長一個指針而且開闢了新的內存,這個增長的指針指向這個新的內存, 採用淺拷貝的狀況,釋放內存,會釋放同一內存,深拷貝就不會出現釋放同一內存的錯誤 11. 閉包 1.必須有一個內嵌函數 2.內嵌函數必須引用外部函數的變量(該函數包含對外做用域而不是全局做用域名字的引用) 3.外部函數的返回值必須是內嵌函數 12. 什麼是lambda函數?它有什麼好處? 答:lambda 表達式,一般是在須要一個函數,可是又不想費神去命名一個函數的場合下使用,也就是指匿名函數 lambda函數:首要用途是指點短小的回調函數 a=lambdax,y:x+y 13. *args與**kwargs *args表明位置參數,它會接收任意多個參數並把這些參數做爲元祖傳遞給函數。**kwargs表明的關鍵字參數,返回的是字典,位置參數必定要放在關鍵字前面 14. 裝飾器 調用裝飾器實際上是一個閉包函數,爲其餘函數添加附加功能,不修改被修改的源代碼和不修改被修飾的方式,裝飾器的返回值也是一個函數對象。 好比:插入日誌、性能測試、事物處理、緩存、權限驗證等,有了裝飾器,就能夠抽離出大量與函數功能自己無關的雷同代碼並繼續重用。 15. 迭代器與生成器 迭代可迭代對象對應_iter_(方法)和迭代器對應_next_(方法)的一個過程 生成器:包括含有yield這個關鍵字,生成器也是迭代器,調動next把函數變成迭代器。 16. 參數按值傳遞和引用傳遞是怎麼實現的? python中的一切都是類,全部的變量都是一個對象的引用。引用的值是由函數肯定的,所以沒法被改變,可是若是一個對象是能夠被修改的,你能夠改動對象 17. 什麼是python的命名空間? 在python中,全部的名字都存在於一個空間中,它們在改空間中存在和被操做——這就是命名空間,它就好像一個盒子, 在每一個變量名字都對應裝着一個對象,當查詢變量的時候,會從該盒子裏面尋找相應的對象 18. range-and-xrange 都在循環時使用,xrange內存性能更好,xrange用法與range徹底相同,range一個生成list對象,xrange是生成器 19. with上下文機制原理 _enter_和_exit_,上下文管理協議,即with語句,爲了讓一個對象兼容with語句,必須在這個對象類中聲明_enter_和_exit_方法, 使用with語句的目的就是把代碼塊放入with中執行,with結束後,自動完成清理工做,無須收到干預 20. Python裏面如何拷貝一個對象?(賦值,淺拷貝,深拷貝的區別) 答:賦值(=),就是建立了對象的一個新的引用,修改其中任意一個變量都會影響到另外一個。 淺拷貝:建立一個新的對象,但它包含的是對原始對象中包含項的引用(若是用引用的方式修改其中一個對象,另一個也會修改改變){1,徹底切片方法;2,工廠函數,如list();3,copy模塊的copy()函數} 深拷貝:建立一個新的對象,而且遞歸的複製它所包含的對象(修改其中一個,另一個不會改變){copy模塊的deep.deepcopy()函數} 21. Python中pass語句的做用是什麼? 答:pass語句不會執行任何操做,通常做爲佔位符或者建立佔位程序,while False:pass 22. 介紹一下Python下range()函數的用法? 答:列出一組數據,常常用在for i in range()循環中 23. 如何用Python來進行查詢和替換一個文本字符串? 字符串的replace(old, new) 答:可使用re模塊中的sub()函數或者subn()函數來進行查詢和替換, 格式:sub(replacement, string[,count=0])(replacement是被替換成的文本,string是須要被替換的文本,count是一個可選參數,指最大被替換的數量) subn()方法執行的效果跟sub()同樣,不過它會返回一個二維數組,包括替換後的新的字符串和總共替換的數量 24. Python裏面match()和search()的區別? 答:re模塊中match(pattern,string[,flags]),檢查string的開頭是否與pattern匹配。 re模塊中research(pattern,string[,flags]),在string搜索pattern的第一個匹配值。 25. 用Python匹配HTML tag的時候,<.*>和<.*?>有什麼區別? 答:術語叫貪婪匹配( <.*> )和非貪婪匹配(<.*?> ) 26. 介紹一下except的用法和做用? 答:try…except…except…[else…][finally…] 執行try下的語句,若是引起異常,則執行過程會跳到except語句。對每一個except分支順序嘗試執行,若是引起的異常與except中的異常組匹配, 執行相應的語句。若是全部的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。 try下的語句正常執行,則執行else塊代碼。若是發生異常,就不會執行 若是存在finally語句,最後老是會執行。 27. 如何在一個function裏面設置一個全局的變量? 答:解決方法是在function的開始插入一個global聲明: def f() global x 28. 在Python中什麼是slicing? slicing是一種在有序的對象類型中(數組、元祖、字符串)節選某一段的語法 28. Python是如何進行內存管理的? 答:從三個方面來講,一對象的引用計數機制,二垃圾回收機制,三內存池機制 29. Python中的docstring是什麼? Python中文檔字符串被稱爲docstring,它在Python中的做用是爲函數、模塊和類註釋生成文檔 1、對象的引用計數機制 Python內部使用引用計數,來保持追蹤內存中的對象,全部對象都有引用計數。 a. 引用計數增長的狀況: 1,一個對象分配一個新名稱 2,將其放入一個容器中(如列表、元組或字典) b. 引用計數減小的狀況: 1,使用del語句對對象別名顯示的銷燬 2, 引用超出做用域或被從新賦值 sys.getrefcount( )函數能夠得到對象的當前引用計數 多數狀況下,引用計數比你猜想得要大得多。對於不可變數據(如數字和字符串),解釋器會在程序的不一樣部分共享內存,以便節約內存。 2、垃圾回收 1,當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。 2,當兩個對象a和b相互引用時,del語句能夠減小a和b的引用計數,並銷燬用於引用底層對象的名稱。 然而因爲每一個對象都包含一個對其餘對象的應用,所以引用計數不會歸零,對象也不會銷燬。 (從而致使內存泄露)。爲解決這一問題,解釋器會按期執行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。 3、內存池機制 Python提供了對內存的垃圾收集機制,可是它將不用的內存放到內存池而不是返回給操做系統。 1,Pymalloc機制。爲了加速Python的執行效率,Python引入了一個內存池機制,用於管理對小塊內存的申請和釋放。 2,Python中全部小於256個字節的對象都使用pymalloc實現的分配器,而大的對象則使用系統的malloc。 3,對於Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說若是你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。