題目和答案來源于互聯(lián)網(wǎng)
1.python的特點和優(yōu)點是什么达址?
python是一種變成的入門語言蔑祟,具備一下優(yōu)點:
解釋性、動態(tài)特性沉唠、面向?qū)ο蠼椤⒄Z法簡潔、開源满葛、豐富的社區(qū)資源
延伸問題:
解釋性如何理解:解釋器不產(chǎn)生目標(biāo)機器代碼径簿,而是產(chǎn)生中間代碼,硬件看不懂中間代碼嘀韧。解釋型代碼是將源代碼逐一解釋成可執(zhí)行的機器指令篇亭,因為效率低下;
Python 是怎么實現(xiàn)動態(tài)類型的呢锄贷?
????答案就藏在具體存儲的對象上译蒂。變量 a 僅僅只是一個符號(實際上是一個字符串對象),類型信息是存儲在對象上的肃叶。在 Python 中蹂随,對象機制的核心是類型信息和引用計數(shù)(引用計數(shù)屬于垃圾回收的部分)
2.pyc的作用?
????一個 pyc 文件包含了三部分信息:Python 的 magic number因惭、pyc 文件創(chuàng)建的時間信息岳锁,以及 PyCodeObject 對象。
magic number 是 Python 定義的一個整數(shù)值蹦魔。一般來說激率,不同版本的 Python 實現(xiàn)都會定義不同的 magic number,這個值是用來保證 Python 兼容性的勿决。比如要限制由低版本編譯的 pyc 文件不能讓高版本的 Python 程序來執(zhí)行乒躺,只需要檢查 magic number 不同就可以了。由于不同版本的 Python 定義的字節(jié)碼指令可能會不同低缩,如果不做檢查嘉冒,執(zhí)行的時候就可能出錯
3.深拷貝和淺拷貝對的區(qū)別是什么曹货?
深拷貝是將對象本身復(fù)制給另外一個對象。這就意味這如果對對象的副本進(jìn)行更改是不會影響愿對象讳推,在Python中顶籽。我們使用deepcopy()函數(shù)進(jìn)行神拷貝。
淺拷貝是將對象引用復(fù)制給另外一個對象银觅,因此礼饱,如果我們在副本中進(jìn)行修改,則會影響原對象究驴。使用copy函數(shù)進(jìn)行淺拷貝镊绪。
4.列表和元祖有什么不同?
區(qū)別:列表是可變的洒忧,元祖是不可變的
5.解釋python中的三元表達(dá)式
[on true] if [expression]else [on false]
如果 [expression] 為真, 則 [on true] 部分被執(zhí)行蝴韭。如果表示為假則 [on false] 部分被執(zhí)行
6.python中如何實現(xiàn)多線程?
線程某種意義上來說是輕量級的進(jìn)程熙侍,多線程允許一次只想多個進(jìn)程万皿,python是一個多線程語言。
GIL(全局解釋器鎖)確保一次執(zhí)行單個線程核行,一個線程保存GIL并在將其傳遞給下一個線程之前執(zhí)行一些操作,這就產(chǎn)生了并行執(zhí)行的錯覺蹬耘,但實際上芝雪,只是線程輪流在cpu上執(zhí)行,當(dāng)然综苔,所有傳遞都會增加執(zhí)行的開銷惩系。
7.解釋繼承
一個類繼承自另一個類,也可以說是一個子類/派生類如筛,繼承自父類/基類/超類堡牡。同時獲取所有的類成員、屬性和方法杨刨。
繼承使我們可以重用代碼晤柄,并且還可以更方便的創(chuàng)建和維護(hù)代碼,python支持以下類型的繼承:
1.單繼承-一個子類繼承自單個基類
2.多重繼承-一個子類繼承自多個基類
3.多級繼承:一個子類繼承自一個基類妖胀,而基類繼承自另一個基類
4.分層繼承:多個子類繼承自同一個基類
5.混合繼承-兩種或兩種以上繼承類型的組合
8.什么使Flask
falsk是一種使用python編寫的輕量級web應(yīng)用框架芥颈,使用bsd授權(quán),其wsgi工具箱采用Werkzeug赚抡,模版引擎則使用jinja2爬坑,除了Werkzeug和jinja2以外幾乎不依賴任何外部庫。因此Flask被稱為輕量級框架涂臣。
Flask的會話使用簽名cookie來允許用戶查看和修改會話內(nèi)容盾计,他會記錄從一個請求到另一個請求的信息。但如果要修改會話的話。則必須有密鑰Flask.secret_key署辉。
9.如何在python中管理內(nèi)存
python用一個私有堆內(nèi)存空間來放置所有對象和數(shù)據(jù)結(jié)構(gòu)族铆,我們無法訪問它,由解釋器來管理她涨薪。不過使用一些核心api骑素,我們可以訪問一些python內(nèi)存管理工具來控制內(nèi)存分配。
10.解釋python中的help()函數(shù)和dir()函數(shù)
help()函數(shù)返回幫助文檔和參數(shù)說明
dir()函數(shù)返回對象中的所有成員(任何類型)
11.當(dāng)退出python時是否釋放所有的內(nèi)存分配刚夺?
答案時否定的献丑,那些具有對象循環(huán)引用或者全局命名空間引用的變量,在python退出時往往不會被釋放侠姑,另外也不會釋放C庫保留的那部分內(nèi)容
12.什么事python字典
擁有鍵值對创橄,并且鍵是唯一的,字典是可變的莽红。
13.解釋?*args 和 **kwargs?
如果我們不知道將多少個參數(shù)傳遞給函數(shù)妥畏,比如當(dāng)我們想傳遞一個列表或一個元組值時,就可以使用*args安吁。
當(dāng)我們不知道將會傳入多少關(guān)鍵字參數(shù)時醉蚁,使用**kwargs 會收集關(guān)鍵字參數(shù)。
14.什么是負(fù)索引鬼店?
與正索引不同网棍,負(fù)索引是從右邊開始檢索的,同樣也可以用于列表的切片妇智。
15如何隨機打亂列表中的元素滥玷,要求不引用額外的內(nèi)存空間?
使用random包中的shuffler()函數(shù)來實現(xiàn)巍棱。
16.解釋python中的join()和split()函數(shù)
join()函數(shù)可以將指定的字符添加到字符串中惑畴。
split()函數(shù)可以使用指定的字符分割字符串
17.python是否區(qū)分大小寫?
區(qū)分
18.python中標(biāo)識符的命名規(guī)則航徙?
Python 中的標(biāo)識符可以是任意長度如贷,但必須遵循以下命名規(guī)則:
1. 只能以下劃線或者 A-Z/a-z 中的字母開頭。
2. 其余部分只能使用 A-Z/a-z/0-9到踏。
3. Python 標(biāo)識符區(qū)分大小寫倒得。
4. 關(guān)鍵字不能作為標(biāo)識符。
19.如何刪除字符串中的前置空格
lstrip()
20.字符串大小寫轉(zhuǎn)換
lower()函數(shù):轉(zhuǎn)換成小寫
upper()函數(shù):轉(zhuǎn)換成大寫
要檢查字符串是否為全大寫或全小寫夭禽,使用 isupper() 和 islower() 函數(shù)
istitle() 可以檢查字符串是否是標(biāo)題格式霞掺。
21.python中的pass語句有什么作用?
空余句
22.python中的閉包
如果在一個內(nèi)部函數(shù)里讹躯。對在外部作用域(但不是在全局作用域)的變量進(jìn)行引用菩彬,那么內(nèi)部函數(shù)就是一個閉包缠劝。
23.解釋 Python 中的//,%和**運算符
//運算符執(zhí)行地板除法骗灶,返回結(jié)果的整數(shù)部分 (向下取整)惨恭。
24.如何獲取字典中的所有鍵?
使用 keys() 來獲取字典中的所有鍵
25.問什么標(biāo)識符不建議使用下劃線開頭耙旦?
因為在 Python 中以下劃線開頭的變量為私有變量脱羡,如果你不想讓變量私有,就不要使用下劃線開頭免都。