python基礎須知

 

1.簡述解釋型編程語言和編譯型編程語言?
解釋型:
解釋型語言編寫的程序不須要編譯,在執行的時候,
專門有一個解釋器可以將VB語言翻譯成機器語言,每一個語句都是執行的時候才翻譯。
這樣解釋型語言每執行一次就要翻譯一次,效率比較低。python

編譯型:
編譯型語言寫的程序執行以前,須要一個專門的編譯過程,
經過編譯系統,把源高級程序編譯成爲機器語言文件,翻譯只作了一次,
運行時不須要翻譯,因此編譯型語言的程序執行效率高,但也不能一律而論正則表達式


2.Python解釋器種類以及特色?
Cpython、IPython、PyPy、Jython、IronPython


3.位和字節的關係?
bit:位,一個二進制數據0或1
byte:字節,存儲空間的基本計量單位
關係:1 byte = 8 bit算法


4.b、B、KB、MB、GB 的關係?
1GB=1024MB 1MB=1024KB 1KB=1024B編程


5.請至少列舉5個 PEP8 規範?
縮進。4個空格的縮進(編輯器均可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
每行最大長度79,換行可使用反斜槓,最好使用圓括號。換行點要在操做符的後邊敲回車。
逗號、冒號、分號前不要加空格。
函數命名使用所有小寫的方式,可使用下劃線
常量命名使用所有大寫的方式,可使用下劃線。


6.列舉python2和python3的區別
1.python2 range(1,5) 返回的是列表,python3 返回的是迭代器
2.python2 使用print 既能夠用小括號,也能夠空格
python3必須使用小括號
3.python2中使用ascii編碼,python3使用utf-8編碼
4.python2中若是顯示正常中文,引入coding聲明,python3不須要
5.python2中是raw_imput函數,python3中是input函數
6.python2中unicode表示字符串序列,str表示字節序列
python3中str表示字符串序列,byte表示字節序列 數組


7.xrange和range的區別?
range:根據start與stop指定的範圍以及step設定的步長,生成一個序列。
xrange:用法與range徹底相同,所不一樣的是生成的不是一個數組,而是一個生成器。

區別:要生成很大的數字序列的時候,用xrange會比range性能優不少,由於不須要一上來就開闢一塊很大的內存空間。 閉包


8.lambda匿名函數:
一般在須要一個函數,可是又不想費神去命名一個函數的場合下使用app


9.pass的做用
不會執行任何操做
保證格式完整
保證語義完整dom


10.*arg和**kwarg做用
*args和**kwargs主要用於函數定義。你能夠將不定數量的參數傳遞給一個函數。
*args:用來發送一個非鍵值對的可變數量的參數列表給一個函數
**kwargs:容許你將不定長度的鍵值對,做爲參數傳遞給一個函數


11.is和==的區別:
==:是python標準操做符中的比較操做符,用來比較判斷兩個對象的value(值)是否相等
is:比較判斷的是對象間的惟一身份標識,也就是id是否相同。


12.簡述Python的深淺拷貝
淺拷貝:拷貝了最外圍的對象自己,內部的元素都只是拷貝了一個引用而已。
深拷貝:外圍和內部元素都進行了拷貝對象自己,而不是引用。


13.Python垃圾回收機制?
python垃圾回收主要以引用計數爲主,標記-清除和分代清除爲輔的機制,
其中標記-清除和分代回收主要是爲了處理循環引用的難題。

1.引用計數算法
當有1個變量保存了對象的引用時,此對象的引用計數就會加1編程語言

當使用del刪除變量指向的對象時,若是對象的引用計數不爲1,
好比3,那麼此時只會讓這個引用計數減1,即變爲2,當再次調用del時,變爲1,
若是再調用1次del,此時會真的把對象進行刪除

2.標記-清楚機制
基本思路是先按需分配,等到沒有空閒內存的時候從寄存器和程序棧上的引用出發,
遍歷以對象爲節點、以引用爲邊構成的圖,把全部能夠訪問到的對象
打上標記,而後清掃一遍內存空間,把全部沒標記的對象釋放。 編輯器

3.分代技術

分代回收的總體思想是:將系統中的全部內存塊根據其存活時間劃分爲不一樣的集合,
每一個集合就成爲一個「代」,垃圾收集頻率隨着「代」的存活時間的增大
而減少,存活時間一般利用通過幾回垃圾回收來度量


14.Python的可變類型和不可變類型?
1.不可變類型(數字、字符串、元組、不可變集合)

不可變的分類中沒有哪一個對象類型支持原處修改,
儘管咱們老是能夠運行表達式來建立新的對象並將其結果分配給變量。
通常來講,不可變類型有某種完整性,保證這個對象不會被程序的其它部分改變。

2.可變類型(列表、字典、可變集合)

相反,可變的類型老是能夠經過操做原處修改,而不是建立新的對象。
儘管這樣的能夠複製,但原處修改支持直接修改。

15.求輸出結果
v = dict.fromkeys(['k1','k2'],[])
print(v) #{'k1': [], 'k2': []}
v['k1'].append(666)
print(v) #{'k1': [666], 'k2': [666]}
v['k1'] = 777
print(v) #{'k1': 777, 'k2': [666]}


16.列舉常見的內置函數?
input()
slice()
int()
open()
sum()
format()
compile()


17.一行代碼實現9*9乘法表

print("\n".join
      ("\t".join
       (
           ["%s*%s=%s" %(x,y,x*y) for y in range(1, x+1)]
        ) for x in range(1, 10)
       )
    )

 

18.列舉經常使用模塊都有哪些?
time
random
os
sys
re
logging
hashlib


19.re的match和search區別?
match()從開始位置匹配string
search()整個string查找匹配第一個。


20.正則表達式的貪婪和非貪婪匹配區別?
(.*)是貪婪匹配,會把知足正則的儘量多的日後匹配
(.*?)是非貪婪匹配,會把知足正則的儘量少匹配


21.如何實現[‘1’,’2’,’3’]變成[1,2,3]
a = ['1','2','3']
a_int = [int(i) for i in a]
print(a_int) #[1, 2, 3]


22.如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100] ?
a = [i ** 2for i in range(1,11)]
print(a)


23.談談對閉包的理解?
在一個外函數中定義了一個內函數,內函數裏運用了外函數的臨時變量,
而且外函數的返回值是內函數的引用。這樣就構成了一個閉包。

相關文章
相關標籤/搜索