最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

華為、阿里巴巴、字節(jié)跳動 100+ Python 面試問題總結(jié)

2023-07-19 19:33 作者:下班被游戲打-  | 我要投稿


Python 面試的進階問題

19. 在 Python 中如何管理內(nèi)存?

Python 中的內(nèi)存管理由 Python 內(nèi)存管理器處理。由管理器分配的內(nèi)存以專用于 Python 的私有堆空間的形式存在。所有 Python 對象都存儲在這個堆中,并且是私有的,程序員無法訪問它。


此外,Python有一個內(nèi)置的垃圾收集站來回收私有堆空間中未使用的內(nèi)存。

20. 什么是 Python 命名空間? 為什么使用它們?

Python 命名空間是一個抽象概念,它表示 Python 解釋器用來查找變量名稱(或標識符)的方式。Python 中的每個標識符都必須位于某個命名空間中。


Python 中有三種命名空間:


內(nèi)置命名空間(Built-in namespace):包含了 Python 的內(nèi)置函數(shù)和異常等。


全局命名空間(Global namespace):在程序的全局范圍定義的變量和函數(shù)等,存在于整個程序運行過程中。


局部命名空間(Local namespace):在函數(shù)或類的方法中定義的變量和參數(shù)等,只在函數(shù)或方法執(zhí)行期間存在。


使用命名空間可以避免變量名沖突,并且可以使代碼更易于理解和維護。例如,在一個函數(shù)中定義的變量不會與程序的其他部分發(fā)生沖突,因為它們位于局部命名空間中,只在函數(shù)執(zhí)行期間存在。


另外,Python 還提供了一些特殊的語法和關(guān)鍵字來修改命名空間,比如 global 和 nonlocal 關(guān)鍵字用于訪問全局命名空間和上一級的局部命名空間,import 語句可以將模塊中的命名空間合并到當前命名空間中。


總之,Python 命名空間是一種非常重要的概念,它幫助開發(fā)者避免變量名沖突,并使代碼更易于維護和理解。

21. Python 中的范圍解析是什么?

Python 中的范圍解析(Scope Resolution)是指解釋器如何確定在程序中使用的標識符所表示的變量或函數(shù)等的作用域(Scope)。


如上所述,在 Python 中,每個變量和函數(shù)都有一個作用域,它是該變量或函數(shù)可見的代碼區(qū)域。Python 的作用域為內(nèi)置作用域、全局作用域和局部作用域。


在 Python 中,解釋器會按照以下順序查找標識符的作用域:


首先,在當前作用域中查找標識符。


如果在當前作用域中沒有找到標識符,則在上一級作用域中查找,直到找到為止。


如果在任何作用域中都沒有找到標識符,則拋出 NameError 異常。


另外,如果要在函數(shù)中修改全局變量的值,需要使用 global 關(guān)鍵字來聲明這個變量是全局變量而不是局部變量。


考慮下面的代碼,對象 temp 已全局初始化為 10,然后在函數(shù)調(diào)用時初始化為 20。但是,函數(shù)調(diào)用不會全局更改 temp 的值。在這里,我們可以觀察到 Python 在全局變量和局部變量之間劃清了界限,將它們的命名空間視為單獨的身份。

可以使用函數(shù)內(nèi)的?global?關(guān)鍵字重寫此行為,如以下示例所示:

22. 什么是 Python 中的裝飾器?

在 Python 中,裝飾器(Decorator)是一種用于修改或擴展函數(shù)或類的行為的函數(shù)。裝飾器可以接受一個函數(shù)或類作為參數(shù),并返回一個新的經(jīng)過修改后的函數(shù)或類。


通常情況下,裝飾器會在不修改原始函數(shù)或類定義的情況下,為它們添加一些額外的功能或特性。例如,可以使用裝飾器來實現(xiàn)以下功能:


記錄函數(shù)調(diào)用次數(shù)或執(zhí)行時間等統(tǒng)計信息

檢查函數(shù)參數(shù)類型和返回值是否符合預(yù)期

緩存函數(shù)的結(jié)果以優(yōu)化性能

實現(xiàn)權(quán)限驗證或日志記錄等功能

以下是一個使用裝飾器實現(xiàn)權(quán)限驗證的示例代碼:

在這個示例中,我們定義了一個名為 login_required 的裝飾器函數(shù),它接受一個函數(shù)作為參數(shù),并返回一個新的函數(shù)來代替原始函數(shù)。新的函數(shù) wrapper 實現(xiàn)了登錄驗證邏輯,在調(diào)用原始函數(shù)之前先檢查了一個名為 logged_in 的關(guān)鍵字參數(shù)是否為 True。如果驗證通過,則調(diào)用原始函數(shù);否則,拋出一個異常。


在定義函數(shù) foo 時,我們使用了 @login_required 語法來將其傳遞給裝飾器函數(shù) login_required 進行修改。這樣,在調(diào)用函數(shù) foo 時,就會自動應(yīng)用登錄驗證邏輯,確保只有已登錄用戶才能執(zhí)行該函數(shù)。


總之,裝飾器是 Python 中非常強大的工具,它可以讓開發(fā)者在不修改原始函數(shù)或類定義的情況下,輕松地擴展和修改它們的行為。


23. 什么是字典和列表推導(dǎo)式?

字典和列表推導(dǎo)式是 Python 中用于快速生成新列表或字典的語法。


列表推導(dǎo)式(List Comprehension)的基本語法為:


1 [expression for item in iterable if condition]


其中,expression 是一個表達式,表示在循環(huán)中對每個元素執(zhí)行的操作;item 是可迭代對象中的每個元素;iterable 是一個可迭代對象,例如列表、元組或集合等;condition 是一個可選的條件,表示僅當滿足條件時才將 expression 的結(jié)果添加到列表中。


以下是一個使用列表推導(dǎo)式生成 1 到 10 的平方數(shù)的示例代碼:


1 squares = [x ** 2 for x in range(1, 11)]

2 print(squares) # output => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


字典推導(dǎo)式(Dictionary Comprehension)它生成的是一個新的字典。它的基本語法為:


1 {key_expression: value_expression for expression in iterable if condition}


其中,key_expression 和 value_expression 分別表示字典中的鍵和值,expression 和 iterable 的含義與列表推導(dǎo)式相同,condition 表示僅當滿足條件時才將結(jié)果添加到字典中。


以下是一個使用字典推導(dǎo)式生成一個由數(shù)字和它們的平方組成的字典的示例代碼:


1 squares_dict = {x: x ** 2 for x in range(1, 11)}

2 print(squares_dict) # output => {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}


24. 什么是 Python 中的 lambda?為什么使用它?

在 Python 中,Lambda 表達式(也稱為匿名函數(shù))是一種靈活和簡潔的函數(shù)定義方式,它可以用于創(chuàng)建一個小型的、一次性的函數(shù),而不必創(chuàng)建一個完整的函數(shù)定義。Lambda 表達式可以接受任意多個參數(shù),但只能返回一個表達式的值。Lambda 表達式通常用于傳遞給那些需要函數(shù)作為參數(shù)的函數(shù),例如 sorted、map 和 filter 等函數(shù)。


可以通過以下兩種方式之一使用 Lambda 函數(shù):

25. 如何在 Python 中復(fù)制對象?

在 Python 中,復(fù)制(或克隆)對象可以使用多種方式,具體取決于你想復(fù)制的對象類型和目的。


以下是一些常見的對象復(fù)制方式:


淺拷貝(Shallow Copy)

淺拷貝是指創(chuàng)建一個新的對象并將原始對象中的所有元素逐個復(fù)制到新對象中。對于可變對象,例如列表和字典,新對象只是原始對象的一個副本,但其中的子對象仍然是引用相同的內(nèi)存地址。淺拷貝可以通過切片、copy.copy() 函數(shù)或 dict.copy() 方法來實現(xiàn)。


深拷貝(Deep Copy)

深拷貝是指創(chuàng)建一個全新的、獨立的對象,并將原始對象中的所有元素遞歸地復(fù)制到新對象中。這意味著每個子對象都有自己的內(nèi)存地址,而不是共享原始對象的地址。深拷貝可以通過 copy.deepcopy() 函數(shù)來實現(xiàn)。


下面是一些示例代碼:

26. 在 Python 中,xrange 和 range 有什么區(qū)別?

在 Python 中,range 和 xrange 是用于生成整數(shù)序列的兩個內(nèi)置函數(shù)。


主要區(qū)別如下:


返回類型:range 返回一個列表對象,而 xrange 返回一個可迭代的 xrange 對象。這意味著 range 在調(diào)用時會一次性生成并返回整個列表,而 xrange 則是按需生成每個元素。


內(nèi)存占用:由于 range 返回整個列表,所以它會占用更多的內(nèi)存空間。相比之下,xrange 只在需要時生成單個元素,因此在處理大型數(shù)據(jù)集時,xrange 可以減少內(nèi)存使用量。


迭代速度:由于 xrange 每次只生成一個元素,所以在迭代時比 range 更高效。對于循環(huán)中需要迭代大量整數(shù)的情況,xrange 通常比 range 更快。



華為、阿里巴巴、字節(jié)跳動 100+ Python 面試問題總結(jié)的評論 (共 條)

分享到微博請遵守國家法律
隆昌县| 建昌县| 乐东| 谢通门县| 颍上县| 舒兰市| 万宁市| 孟州市| 景谷| 长汀县| 五家渠市| 太湖县| 密山市| 辛集市| 达日县| 博野县| 揭阳市| 定州市| 天祝| 新宾| 米脂县| 青田县| 旌德县| 阳东县| 邛崃市| 巴彦县| 余庆县| 荥经县| 堆龙德庆县| 赤城县| 招远市| 高邑县| 龙南县| 乡城县| 东丰县| 黔西| 郑州市| 柳江县| 昌邑市| 南部县| 大厂|