1.__ foo 、foo_ 和 __foo__ 三者之間的區(qū)別是什么?
__foo表示私有屬性、_foo表示受保護的屬性、__foo__表示Python自帶的屬性
皋蘭網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
2.請您簡述Python編譯的工作原理,PyCodeObject 和 PyFrameObject 對象的作用。
Python編譯的工作原理:Python語言寫的程序不需要編譯成二進制代碼,它可以直 接從源代碼運行程序。當我們運行Python文件程序的時候,?Python解釋器把源代碼轉(zhuǎn)換成中間形式:字節(jié)碼,然后再由Python虛 擬機來執(zhí)行這些字節(jié)碼。
PyCodeObject對象:pyc 字節(jié)碼在Python虛擬機中對應(yīng)的是PyCodeObject對象,虛擬機將字節(jié)封裝成一個PyCodeObject對象再一條條執(zhí)行字節(jié)碼指令。
PyFrameObject對象:當發(fā)生函數(shù)調(diào)用時,創(chuàng)建新的幀,對應(yīng)Python的實現(xiàn)就是PyFrameObject對象。
3.如何理解self、cls、和super?
self是實例方法定義中的第一個參數(shù),代表該方法的實例對象
cls是類方法中的第一個參數(shù),代表當前類
super是指在Python面向?qū)ο蟮睦^承特征下中,若子類調(diào)用父類方法則需要super()實現(xiàn)。
4.如何區(qū)分@classmethod和@staticmethod?
@classmethod是類裝飾器,使用裝飾器方法定義類方法告知Python的解釋器該方法為類方法,裝飾器優(yōu)化該方法的執(zhí)行效率。
@staticmethod是靜態(tài)方法裝飾器,使用裝飾器方法定義靜態(tài)方法告知Python的解釋器該方法為靜態(tài)方法,裝飾器優(yōu)化該方法的執(zhí)行效率。
5.如何理解閉包Closure(作用)?其語法規(guī)范要求?(可編寫片段代碼實現(xiàn)閉包規(guī)范)
閉包:在一個外函數(shù)內(nèi)定義了一個內(nèi)函數(shù) ,內(nèi)函數(shù)運用了外函數(shù)的臨時變量,并且外函數(shù)的返回值是內(nèi)函數(shù)的引用,這樣就形成了閉包
閉包函數(shù)實例:
outer為外函數(shù)、inner為內(nèi)函數(shù),a和b都是外函數(shù)的臨時變量
def outer(a):
b=10
def inner():
print(a+b)
return inner
if __name__=="__main__":
demo=outer(5)
#在這里我們調(diào)用外函數(shù)傳入?yún)?shù)5,此時外函數(shù)兩個臨時變量a=5,b=10并創(chuàng)建了內(nèi)函數(shù),然后把內(nèi)函數(shù)的引用返回存給了demo,外函數(shù)結(jié)束時發(fā)現(xiàn)內(nèi)函數(shù)將會用到自己的臨時變量,這兩個變量就不會釋放,會綁定給內(nèi)函數(shù)。
demo()
6.什么是迭代器Iterator ? 編寫片段代碼說明應(yīng)用方式.
迭代器就是用于迭代操作(for循環(huán))的對象,它像列表一樣,可以迭代獲取其中的每一個元素,任何實現(xiàn)了next()方法的對象都可以被稱為迭代器。
對于可迭代對象(序列、range函數(shù)返回值、zip函數(shù)返回值、enumerate函數(shù)返回值等等)調(diào)用iter()函數(shù)就會返回一個迭代器,對于迭代器用iter方法就會返回迭代器自身。
迭代器代碼實例說明:
it =iter([1,2,3,4,5])
while True:
try:
x=next(it)
except StopIteration:
break
#迭代器通過不斷調(diào)用next方法會依次前進到序列中的下一個元素,并將其返回最后到達一系列結(jié)果的末尾時,會引發(fā)StopIteration異常
7.說明list、tuple和dictionary之間的異同點。
列表list支持的特性:索引、切片、連接、重復、成員操作符
元組tuple支持的特性:索引、切片、連接、重復、成員操作符
字典dictionary不支持這些特性
列表list屬于可變數(shù)據(jù)類型,是有序的、可迭代的(支持for循環(huán)遍歷)
元組tuple屬于不可變數(shù)據(jù)類型,是有序的、可迭代的(支持for循環(huán)遍歷)
字典dictionary屬于可變數(shù)據(jù)類型,是無序的、可迭代的(支持for循環(huán)遍歷)
8.如何理解生成器Generator? 在Python中有幾種實現(xiàn)方式(可編寫片段代碼說明)?
生成器本質(zhì)上是一個高級迭代器,使得所需要返回的一系列元素所需的代碼更加簡單和高效。
生成器有兩種實現(xiàn)方式:
(1).生成器函數(shù)
生成器函數(shù):常規(guī)函數(shù)定義中使用return返回結(jié)果,在生成器函數(shù)中使用yield關(guān)鍵字代替return,yield語句一次返回一個結(jié)果,在每個結(jié)果中間掛起函數(shù)的狀態(tài),以便下一次從它離開的地方執(zhí)行。
代碼說明:
def gensquares(Num):
for i in range(Num):
yield i**2
for item in gensquares(5):
print(item)
(2).生成器表達式
生成器表達式:和列表生成式相似,不過將“[]”改為“()”,但是生成器返回按需產(chǎn)生結(jié)果的一個對象,而不是一次構(gòu)建一個結(jié)果列表。
代碼說明:
squares=(i2 for i in range(2,5))
print(type(squares))
#使用next()方法每次返回一個結(jié)果
next(squares)
9.Python中的異常是什么?分為幾種?多except捕獲異常的規(guī)范要求都有哪些?
異常是一個事件,該事件會在程序執(zhí)行過程中發(fā)生,影響程序正常執(zhí)行,在Python中程序無法正常處理時,就會拋出異常。在Python中常見的異常處理為單異常和多異常處理,在Python3中長使用try ... except ... finally處理,常見的有try ... except ...、try ... except ... except ... except ...(多except捕獲)、try ... except ... else/finally.對于try ... except ... else/finally來說,else中的語句是當try語句塊出現(xiàn)異常時不執(zhí)行,當try語句塊無異常時執(zhí)行,如果替換為finally則是不論try語句塊是否出現(xiàn)異常finally都會執(zhí)行。
多except捕獲異常:一個try語句塊可能包含多個except字句,分別用來處理不同的特定的異常,在多異常捕獲時,我們常將小異常放在前面,大異常在后面,用于避免程序在處理時,異常不能分別處理,從而將所有異常歸為一個異常進行處理。
10.如何理解“鴨子模型”,其主要作用是什么?
Python不支持多態(tài),并且也用不到多態(tài),多態(tài)是應(yīng)用于Java和c#這一類強類型語言中,而Python推崇“鴨子類型”。
“鴨子類型”是動態(tài)類型的一種風格,在這種風格中,一個對象有效的語義不是由繼承自特定的類或?qū)崿F(xiàn)特定的接口,而是由當前方法和屬性的集合決定。
11.裝飾器decorator的作用,編寫片段代碼說明。
裝飾器就是用來裝飾函數(shù)的,想要增強原有函數(shù)的功能,但不希望改變現(xiàn)函數(shù)的定義,是一種在代碼運行期間動態(tài)增加功能的方式。定義的裝飾器實際上是返回函數(shù)的高階函數(shù)。
代碼說明:
#裝飾器(無參數(shù))
import time
def Timelt(ProMain):
def program_times():
startTime = time.time()
ProMain()
endTime = time.time()
msecsTime = (endTime - startTime) * 1000
print("程序%s運行時間:%s 毫秒" % (main.__name__,msecsTime))
return program_times
@Timelt #python提供的語法糖,@deco 和 main = deco(main) 是完全等價的,本質(zhì)是一樣的
def main():
print("程序運行開始...")
time.sleep(0.5)
print("程序運行結(jié)束...")
if __name__=="__main__": #腳本程序入口
main()
補充:語法糖(Syntactic sugar),也譯為糖衣語法,是由英國計算機科學家彼得·約翰·蘭達(Peter J. Landin)發(fā)明的一個術(shù)語,指計算機語言中添加的某種語法,這種語法對語言的功能并沒有影響,但是更方便程序員使用。通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯的機會。
12.*args和**kwargs的異同點
這兩個參數(shù)為函數(shù)定義中參數(shù)列表中排名最后的參數(shù)
*args代表該參數(shù)位置可以任意個參數(shù),最后都會轉(zhuǎn)為元組數(shù)據(jù)類型在函數(shù)體內(nèi)處理**kwargs
代表該參數(shù)位置可以放key-value格式的數(shù)據(jù),最終都會轉(zhuǎn)化為字段形式數(shù)據(jù)在函數(shù)體內(nèi)處理。
13.@property裝飾器的作用,請舉例說明。
@property裝飾器將方法定義為屬性,后續(xù)可以使用對象.屬性名的方式輸出
舉例說明:
class person():
def __init__(self,name):
self.__name=name
pass
@property #使用@property將私有實例變量變?yōu)橐粋€屬性,從而可以使用對象.屬性的名稱的方式進行輸出。
def name(self):
return self.__name
if __name__=="__main__":
obj=person("Lee")
print('name屬性:{0}'.format(obj.name))
14.請您簡述Python如何理解對象序列化和反序列化操作?
所謂序列化是將編程語言中的各種對象轉(zhuǎn)化為字節(jié)流的過程,同時也可以逆向操作將字節(jié)流還原成一個對象,這個過程稱為發(fā)序列化。
15.Python連接數(shù)據(jù)庫實現(xiàn)讀寫操作的標準流程描述。
#導入模塊
import pyMySQL
db=pymysql.connect("localhost","root","root","mysql")
#創(chuàng)建游標對象
cursor=db.cursor()
#使用execute()方法執(zhí)行SQL語句
cursor.execute("select * from mysql")
#使用fechone()方法獲取單條數(shù)據(jù)
data=cursor.fetchone()
#關(guān)閉數(shù)據(jù)庫
db.close()
16.python異常的關(guān)鍵字有哪些?每個代碼塊執(zhí)行的規(guī)則是什么?
python異常的關(guān)鍵字有:try,except,else,finally
try語塊執(zhí)行方式:
(1)首先執(zhí)行try字句.
(2)如果沒有異常發(fā)生,忽略except子句,try子句執(zhí)行后結(jié)束
(3)如果執(zhí)行try子句過程中發(fā)生異常,那么try子句余下的部分將被忽略,如果異常與except關(guān)鍵字后的名稱相同,那么對應(yīng)的except子句被執(zhí)行,最后執(zhí)行try語句之后的代碼
(4)如果一個異常沒有與任何except匹配,那么這個異常會傳遞給上層的try中,對于可選子句else子句,如果使用這個子句,那么必須放在所有的except子句后,這個子句在try子句沒有發(fā)生任何異常的時候執(zhí)行,對于finally來說,不管前面子句是否執(zhí)行,finally中的語句都會執(zhí)行。
17.pickle模塊中的dumps()/loads()和dump()/load()的區(qū)別。
pickle模塊支持講一個Python對象轉(zhuǎn)化為字節(jié)流,同時還能對相應(yīng)的字節(jié)流逆操作得到原來的對象
pickle模塊的常用函數(shù):
pickle.dump(obj.file [,protocol])對象序列化操作函數(shù)
pickle.load(file)將file中的對象序列化讀取
pickle.dumps(obj,[,protocol]) 將對象轉(zhuǎn)化為string字符串類型
pickle.loads(string)從string中讀取并反序列化還原之前的obj對象。
文章名稱:Python基礎(chǔ)常見問題總結(jié)(一)
本文路徑:http://m.newbst.com/article24/jdghje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷、云服務(wù)器、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)