Python 面試題(二)

2022-08-03 00:15:12 字數 3562 閱讀 6090

1、什麼是lambda函式?它有什麼好處?另外python在函式程式設計方面提供了些什麼函式和語法?

lambda是python中的匿名函式。它語法簡單,簡化**,不會產生命名衝突,汙染命名空間。python提供了map,reduce,filter等函式方法,提供了裝飾器,閉包等語法

2、詳細說說tuple、list、dict的用法,它們的特點;

tuple 元祖,固定長度不可變的順序容器,訪問效率高,是和儲存一些常量資料,可以作為字典的鍵使用

list 列表,是長度可變有序的資料儲存容器,。可以通過下標索引取到相應的資料

dict 字典,長度可變的hash字典容器。儲存的方式為鍵值對,可以通過相應的鍵獲取相應的值,key支援多種型別

3、說說python中裝飾器、迭代器的用法;描述下dict 的 items() 方法與 iteritems() 方法的不同;

裝飾器是指對函式執行過程,做一些擴充套件,甚至可以更改本身函式的執行

迭代器是指遵循迭代器協議的物件,這類物件在被for迴圈時,每次迭代生成下乙個項,不用一開始就生成整個列表

在python3中 不存在iteritems,items方法返回可迭代物件

在python2中 items()返回[(key,value)]的列表物件,iteritems()返回迭代器物件,iteritems()迴圈時不可以增刪dict的內容

4、講講對unicode, gbk, utf-8等的理解,python2.x是如何處理編碼問題?

unicode編碼:為了解決各個國家的語言的儲存,引進的unicode碼,包括ucs2,ucs4,utf-8,utf-7等

gbk:和unicode不一樣的編碼方式 ,常用的為 gbk-2312

utf-8: utf-8 使用 1-4 個位元組來儲存單個字元,應該是目前最流行的字符集。linux 預設字符集就是utf-8。既解決了大多數語言的編碼方式,又避免了簡單字元儲存對空間的浪費

python 2.x 需要在檔案上方宣告檔案的編碼方式# -*- coding: utf8 -*-,可以通過str.decode/str.encode處理字串的文字編碼

sys.setdefaultencoding('utf-8')來保證我們的編碼

5、python 是如何進行記憶體管理的?python 的程式會記憶體洩露嗎?說說有沒有什麼方面防止或檢測記憶體洩露?

python gc主要使用 引用計數 來跟蹤和**垃圾。在引用計數的基礎上,通過「標記-清除」解決容器物件可能產生的迴圈引用問題。通過分代

以空間換時間的方法提高垃圾**效率

1、引用計數: 每個物件中都有ob-refcnt來做引用計數。當乙個物件...,ob-refcnt就會增加,當引用的物件刪除,那麼ob-refcnt就會減少當ob-refcnt為零,就會釋放該物件的記憶體空間

2、標記清除: 解決迴圈引用的問題。先按需分配,等到沒有空閒記憶體的時候,從暫存器和程式棧上的引用出發,遍歷所有物件和引用把所有能訪問的打標記,最後將沒有標記的物件釋放掉

3、分代技術: 提高效率,提高垃圾**的效率,按照存活時間,分成不同的集合。將記憶體塊按照其存活時間劃分為不同的集合。每個集合就稱為乙個「代」,垃圾**的頻率隨代的存活時間增大而減小。。python預設定義分代物件集合,引用數越大,物件的存活時間越長

python也會記憶體洩露,python本身的垃圾**機制無法**重寫了__del__的迴圈引用的物件

程式設計師管理好每個python物件的引用,盡量在不需要使用物件的時候,斷開所有引用

盡量少通過迴圈引用組織資料,可以改用weakref做弱引用或者用id之類的控制代碼訪問物件

通過gc模組的介面可以檢查出每次垃圾**有哪些物件不能自動處理,再逐個逐個處理

6、關於 python 程式的執行效能方面,有什麼手段能提公升效能?

1、使用多程序,充分利用機器的多核效能

2、對於效能影響較大的部分**,可以使用c或c++編寫

3、對於io阻塞造成的效能影響,可以使用io多路復用來解決

4、盡量使用python的內建函式

5、盡量使用區域性變數

7、list 物件 alist [,,], 請按 alist 中元素的age 由大到小排序;

def sort_by_age(list1):

return sorted(alist,key=lambda x:x['age'],reverse=true)

8、兩個 list 物件 alist ['a','b','c','d','e','f'], blist ['x','y','z','d','e','f'],請用簡潔的方法合併這兩個 list,並且 list 裡面的元素不能重複;

alist = ['a','b','c','d','e','f']

blist = ['x','y','z','d','e','f']

def merge_list(*args):

s = set()

for i in args:

s = s.union(i)

return list(s)

9、打亂乙個排好序的 list 物件 alist;

import random

random.shuffle(alist)

10、簡單實現乙個stack

class stack:

def __init__(self):

self.items =

def __iter__(self):

return self.items.__iter__()

def pop(self):

return self.items.pop()

def top(self):

if len(self.items) > 0:

return self.items[len(self.items) - 1]

def push(self, item):

def empty(self):

self.items =

def size(self):

return len(self.items)

11、輸入某年某月某日,判斷這一天是這一年的第幾天?(可以用 python 標準庫)

import datetime

def dayofyear():

year = input("請輸入年份:")

month = input("請輸入月份:")

day = input("請輸入天:")

date1 = datetime.date(year=int(year),month=int(month),day=int(day))

date2 = datetime.date(year=int(year),month=1,day=1)

return (date1 -date2).days

12、將字串:"k:1|k1:2|k2:3|k3:4",處理成 python 字典:

str1 = "k:1|k1:2|k2:3|k3:4"

def str2dict(str1):

dict1 = {}

for iterms in str1.split('|'):

key,value = iterms.split(':')

dict1[key] = value

return dict1

python面試題 二

x for x in range 1,n 1 i i 3 for i in range 0,len n 3 術語叫貪婪匹配 和非貪婪匹配 例如 test test 答 單引號和雙引號是等效的,如果要換行,需要符號 三引號則可以直接換行,並且可以包含注釋 如果要表示let s go 這個字串 單引號 ...

python語法面試題 python面試題

1.去重,集合 集合的乙個重要特點是 自動去除重複的值 li 1,2,3,1,1,2,2,3,3 去除重複的元素 set set li 轉換為集合,因為集合會自動去重。print set li list set 將集合轉換為列表print li 2.生成器 規則 生成器函式,或者生成器表示式,在呼叫...

Python面試題大全(二)

原文 1.python中類方法 類例項方法 靜態方法有何區別?區別 使用示例 python 1 class a object 2def foo self,x 3 類例項方法 4print executing foo s,s self,x 56 classmethod 7def class foo c...