91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python基礎常見問題總結(一)

發布時間:2020-06-29 05:16:33 來源:網絡 閱讀:1839 作者:MissLeejuan 欄目:編程語言

1.__ foo 、foo_ 和 __foo__ 三者之間的區別是什么?
__foo表示私有屬性、_foo表示受保護的屬性、__foo__表示Python自帶的屬性

2.請您簡述Python編譯的工作原理,PyCodeObject 和 PyFrameObject 對象的作用。
Python編譯的工作原理:Python語言寫的程序不需要編譯成二進制代碼,它可以直 接從源代碼運行程序。當我們運行Python文件程序的時候,?Python解釋器把源代碼轉換成中間形式:字節碼,然后再由Python虛 擬機來執行這些字節碼。
PyCodeObject對象:pyc 字節碼在Python虛擬機中對應的是PyCodeObject對象,虛擬機將字節封裝成一個PyCodeObject對象再一條條執行字節碼指令。
PyFrameObject對象:當發生函數調用時,創建新的幀,對應Python的實現就是PyFrameObject對象。

3.如何理解self、cls、和super?

self是實例方法定義中的第一個參數,代表該方法的實例對象
cls是類方法中的第一個參數,代表當前類
super是指在Python面向對象的繼承特征下中,若子類調用父類方法則需要super()實現。

4.如何區分@classmethod和@staticmethod?

@classmethod是類裝飾器,使用裝飾器方法定義類方法告知Python的解釋器該方法為類方法,裝飾器優化該方法的執行效率。
@staticmethod是靜態方法裝飾器,使用裝飾器方法定義靜態方法告知Python的解釋器該方法為靜態方法,裝飾器優化該方法的執行效率。

5.如何理解閉包Closure(作用)?其語法規范要求?(可編寫片段代碼實現閉包規范)
閉包:在一個外函數內定義了一個內函數 ,內函數運用了外函數的臨時變量,并且外函數的返回值是內函數的引用,這樣就形成了閉包

閉包函數實例:

outer為外函數、inner為內函數,a和b都是外函數的臨時變量
def outer(a):
    b=10
    def inner():
        print(a+b)
    return inner
if __name__=="__main__":
    demo=outer(5)
        #在這里我們調用外函數傳入參數5,此時外函數兩個臨時變量a=5,b=10并創建了內函數,然后把內函數的引用返回存給了demo,外函數結束時發現內函數將會用到自己的臨時變量,這兩個變量就不會釋放,會綁定給內函數。
    demo()

6.什么是迭代器Iterator ? 編寫片段代碼說明應用方式.

迭代器就是用于迭代操作(for循環)的對象,它像列表一樣,可以迭代獲取其中的每一個元素,任何實現了next()方法的對象都可以被稱為迭代器。
對于可迭代對象(序列、range函數返回值、zip函數返回值、enumerate函數返回值等等)調用iter()函數就會返回一個迭代器,對于迭代器用iter方法就會返回迭代器自身。

迭代器代碼實例說明:

it =iter([1,2,3,4,5])
while True:
    try:
        x=next(it)
    except StopIteration:
        break
#迭代器通過不斷調用next方法會依次前進到序列中的下一個元素,并將其返回最后到達一系列結果的末尾時,會引發StopIteration異常               

7.說明list、tuple和dictionary之間的異同點。

列表list支持的特性:索引、切片、連接、重復、成員操作符
元組tuple支持的特性:索引、切片、連接、重復、成員操作符
字典dictionary不支持這些特性
列表list屬于可變數據類型,是有序的、可迭代的(支持for循環遍歷)
元組tuple屬于不可變數據類型,是有序的、可迭代的(支持for循環遍歷)
字典dictionary屬于可變數據類型,是無序的、可迭代的(支持for循環遍歷)

8.如何理解生成器Generator? 在Python中有幾種實現方式(可編寫片段代碼說明)?

生成器本質上是一個高級迭代器,使得所需要返回的一系列元素所需的代碼更加簡單和高效。
生成器有兩種實現方式:
(1).生成器函數
生成器函數:常規函數定義中使用return返回結果,在生成器函數中使用yield關鍵字代替return,yield語句一次返回一個結果,在每個結果中間掛起函數的狀態,以便下一次從它離開的地方執行。

代碼說明:
def gensquares(Num):
    for i in range(Num):
        yield i**2
for item in gensquares(5):
     print(item)

(2).生成器表達式
生成器表達式:和列表生成式相似,不過將“[]”改為“()”,但是生成器返回按需產生結果的一個對象,而不是一次構建一個結果列表。

代碼說明:
squares=(i2 for i in range(2,5))
print(type(squares))
#使用next()方法每次返回一個結果
next(squares)

9.Python中的異常是什么?分為幾種?多except捕獲異常的規范要求都有哪些?

異常是一個事件,該事件會在程序執行過程中發生,影響程序正常執行,在Python中程序無法正常處理時,就會拋出異常。在Python中常見的異常處理為單異常和多異常處理,在Python3中長使用try ... except ... finally處理,常見的有try ... except ...、try ... except ... except ... except ...(多except捕獲)、try ... except ... else/finally.對于try ... except ... else/finally來說,else中的語句是當try語句塊出現異常時不執行,當try語句塊無異常時執行,如果替換為finally則是不論try語句塊是否出現異常finally都會執行。
多except捕獲異常:一個try語句塊可能包含多個except字句,分別用來處理不同的特定的異常,在多異常捕獲時,我們常將小異常放在前面,大異常在后面,用于避免程序在處理時,異常不能分別處理,從而將所有異常歸為一個異常進行處理。

10.如何理解“鴨子模型”,其主要作用是什么?

Python不支持多態,并且也用不到多態,多態是應用于Java和c#這一類強類型語言中,而Python推崇“鴨子類型”。
“鴨子類型”是動態類型的一種風格,在這種風格中,一個對象有效的語義不是由繼承自特定的類或實現特定的接口,而是由當前方法和屬性的集合決定。

11.裝飾器decorator的作用,編寫片段代碼說明。

裝飾器就是用來裝飾函數的,想要增強原有函數的功能,但不希望改變現函數的定義,是一種在代碼運行期間動態增加功能的方式。定義的裝飾器實際上是返回函數的高階函數。

代碼說明:
#裝飾器(無參數)
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) 是完全等價的,本質是一樣的
def main():
    print("程序運行開始...")
    time.sleep(0.5)
    print("程序運行結束...")
if __name__=="__main__": #腳本程序入口
    main()
補充:語法糖(Syntactic sugar),也譯為糖衣語法,是由英國計算機科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指計算機語言中添加的某種語法,這種語法對語言的功能并沒有影響,但是更方便程序員使用。通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯的機會。

12.*args和**kwargs的異同點

這兩個參數為函數定義中參數列表中排名最后的參數
*args代表該參數位置可以任意個參數,最后都會轉為元組數據類型在函數體內處理
**kwargs代表該參數位置可以放key-value格式的數據,最終都會轉化為字段形式數據在函數體內處理。

13.@property裝飾器的作用,請舉例說明。

@property裝飾器將方法定義為屬性,后續可以使用對象.屬性名的方式輸出

舉例說明:
class person():
    def __init__(self,name):
        self.__name=name
        pass
    @property #使用@property將私有實例變量變為一個屬性,從而可以使用對象.屬性的名稱的方式進行輸出。
    def name(self):
        return self.__name
if __name__=="__main__":
    obj=person("Lee")
    print('name屬性:{0}'.format(obj.name))

14.請您簡述Python如何理解對象序列化和反序列化操作?

所謂序列化是將編程語言中的各種對象轉化為字節流的過程,同時也可以逆向操作將字節流還原成一個對象,這個過程稱為發序列化。

15.Python連接數據庫實現讀寫操作的標準流程描述。

#導入模塊
import pymysql
db=pymysql.connect("localhost","root","root","mysql")
#創建游標對象
cursor=db.cursor()
#使用execute()方法執行SQL語句
cursor.execute("select * from mysql")
#使用fechone()方法獲取單條數據
data=cursor.fetchone()
#關閉數據庫
db.close()

16.python異常的關鍵字有哪些?每個代碼塊執行的規則是什么?

python異常的關鍵字有:try,except,else,finally
try語塊執行方式:
(1)首先執行try字句.
(2)如果沒有異常發生,忽略except子句,try子句執行后結束
(3)如果執行try子句過程中發生異常,那么try子句余下的部分將被忽略,如果異常與except關鍵字后的名稱相同,那么對應的except子句被執行,最后執行try語句之后的代碼
(4)如果一個異常沒有與任何except匹配,那么這個異常會傳遞給上層的try中,對于可選子句else子句,如果使用這個子句,那么必須放在所有的except子句后,這個子句在try子句沒有發生任何異常的時候執行,對于finally來說,不管前面子句是否執行,finally中的語句都會執行。

17.pickle模塊中的dumps()/loads()和dump()/load()的區別。

pickle模塊支持講一個Python對象轉化為字節流,同時還能對相應的字節流逆操作得到原來的對象
pickle模塊的常用函數:
pickle.dump(obj.file [,protocol])對象序列化操作函數
pickle.load(file)將file中的對象序列化讀取
pickle.dumps(obj,[,protocol]) 將對象轉化為string字符串類型
pickle.loads(string)從string中讀取并反序列化還原之前的obj對象。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东辽县| 石屏县| 新邵县| 肥乡县| 精河县| 信宜市| 轮台县| 郎溪县| 乐业县| 扎赉特旗| 元氏县| 成武县| 巍山| 象山县| 岳西县| 长宁县| 高碑店市| 青田县| 永兴县| 武胜县| 茶陵县| 枝江市| 济南市| 喀喇沁旗| 镇沅| 荆门市| 灵丘县| 佛冈县| 将乐县| 宁河县| 新郑市| 涿州市| 虞城县| 牟定县| 涟水县| 山丹县| 桐城市| 南阳市| 湖南省| 北碚区| 泸水县|