python 面經


面試題匯總

【刷題】面筋分類匯總-測開向

Python面試題之Python面試題匯總

Python 經典面試題匯總之基礎篇

Python 經典面試題匯總之網絡篇

Python 經典面試題匯總之數據庫篇

Python 經典面試題匯總之框架篇

 

 

知識點匯總

##1、Python棧區內存和堆區內存

​內存中的堆棧和數據結構堆棧不是一個概念,可以說內存中的堆棧是真實存在的物理區,數據結構中的堆棧是抽象的數據存儲結構。

內存空間在邏輯上分為三部分:代碼區、靜態數據區和動態數據區,動態數據區又分為棧區和堆區。

代碼區:存儲方法體的二進制代碼。高級調度(作業調度)、中級調度(內存調度)、低級調度(進程調度)控制代碼區執行代碼的切換。

靜態數據區:存儲全局變量、靜態變量、常量,常量包括final修飾的常量和String常量。系統自動分配和回收。

棧區:存儲運行方法的形參、局部變量、返回值。由系統自動分配和回收。

堆區:new一個對象的引用或地址存儲在棧區,指向該對象存儲在堆區中的真實數據。

簡而言之一句話:棧放變量,堆放對象(真實數據)

Python變量與基本數據類型

 

##2、八大數據類型及其使用方法

基本數據類型與操作方法

 

##3、python垃圾回收

1 引用計數

2 標記-清除機制

3 分代技術

詳解Python垃圾回收機制

 

 

##4、賦值、深拷貝與淺拷貝

賦值:棧區內存的變量指向堆區內存的對象

淺拷貝:list自帶的方法: l2 = l1.copy(), 拷貝靜態對象和動態對象的地址。

深拷貝:需要導入copy庫,靜態對象和動態對象都新建一份(不管幾層)。

 

底層剖析Python深淺拷貝

 

 

##5、文件操作與with上下文管理器

 

ContextManager 上下文管理器中有 __enter__ 和 __exit__ 兩個方法,

以with為例子,__enter__ 方法會在執行 with 后面的語句時執行,一般用來處理操作前的內容。比如一些創建對象,初始化等;

__exit__ 方法會在 with 內的代碼執行完畢后執行,一般用來處理一些善后收尾工作,比如文件的關閉,數據庫的關閉等。

 

Python文件操作

 

##6、Python函數的參數

參數定義的順序必須是:必選參數、默認參數(name = xxx)、可變參數(*args)、命名關鍵字參數( ... *, name, city)  和關鍵字參數(**kwargs)

 

 

Python函數參數詳解

 

 

##7、命名空間與作用域

內置命名空間(print,type等自帶的)、全局命名空間(整個文件生效),局部命名空間(函數內部生效)

全局作用域(包含內置命名空間與全局命名空間),局域作用域(只包含局部命名空間中的名字)

幾個方法: global(), nonlocal():上層局部命名空間中的變量值(不可變類型)

 

命名空間與作用域

 

 

##8、閉包函數& 高階應用

 

  閉包函數 = 命名空間與作用域 + 函數嵌套 + 函數對象 結合體   核心點:名字的查找順序以定義階段為標准。當前命名空間沒找到名字時往定義自己的命名空間查找名字。   “閉”函數指的是該函數定義在另一個函數體中   “包”函數指的是該內嵌函數包含對外層函數作用域名字的引用(不是對全局作用域,而是對定義內嵌函數名字的那一層函數局部命名空間中名字的引用)

 

閉包函數的作用:

1)在某些情況下我們需要使用閉包函數為內部函數進行參數的傳遞。 2)在不修改原本上線的功能函數內部代碼以及不修改其調用方式前提下為其增添新的功能(裝飾器的基礎)   Ps:在閉包函數中,外層的封裝函數命名空間中所有的變量都不會被銷毀。

函數高階應用與閉包

 

# 二、高階特性

##1、單例模式

 5種方法:模塊引入,裝飾器,重寫__new__,

Python中的單例模式的幾種實現方式的及優化

##2、裝飾器

 開放封閉原則,補充函數的功能。

模板:無參裝飾器 + 有參裝飾器

from functools import wraps
def outer(func): # 裝飾器名字應該取好,func代表被裝飾函數。
  @wraps(func) # 這里主要完全將warpper的所有文檔信息等等都與func保持一致。下面會講
  def warpper(*args,**kwargs): # warpper函數對應func,也就是被執行的函數。這里做對接
    # 功能擴展區,函數運行前
    res = func(*args,**kwargs) # 接收func的return值
    # 功能擴展區,函數運行后
    return res # 將func的返回值返回出去
  return warpper

 

from functools import wraps
def outer(x):
    def inner(func): # 裝飾器名字應該取好,func代表被裝飾函數。
        @wraps(func) # 這里主要完全將warpper的所有文檔信息等等都與func保持一致。下面會講
        def warpper(*args,**kwargs): # warpper函數對應func,也就是被執行的函數。這里做對接
            # 功能擴展區,函數運行前
            res = func(*args,**kwargs) # 接收func的return值
            # 功能擴展區,函數運行后
            return res # 將func的返回值返回出去
        return warpper
    return inner

 

Python三大器之裝飾器

 

 3、迭代器

   1.迭代器(Iterator):必須有__next__方法才能被叫做迭代器。迭代器無法重復使用    2.可迭代對象(Iterable):必須有__iter__方法才能被叫做可迭代對象

五大基本容器數據類型(listtupledictsetstr)等都是屬於可迭代對象。本身並不屬於迭代器。文件句柄對象本身是屬於迭代器。

for 循環就是為 Iterable 生成一個 Iterator。

 

 

Python三大器之迭代器

4、生成器

生成器是迭代器的一種,有着惰性求值、占用內存小的優勢。 

缺點:跟迭代器一樣,只能使用一次。

生成器底層原理:函數狀態被掛起;底層基於C語言,函數在棧幀上運行,棧幀分配在堆內存上,故棧幀可以獨立於調用者存在。

生成器的棧幀對象比一般函數多一層封裝,記錄了上下文和運行的行數。

python中函數和生成器的運行原理

 

4、描述器

 

Python描述器詳解

5、消費者模式

 

6、with上下文管理器原理與用法:

with后面的對象需要有__enter__()和 __exit__()方法,可以進行初始化和結果打掃。

 

 

8、python並發

Python並發編程理論篇

 

三、Python面向對象編程

Python面向對象編程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM