Python面試重點(基礎篇)java
第一部分 必答題(每題2分)python
簡述列舉了解的編程語言及語言間的區別?
python 解釋型 相對於簡單易學
java 混合型 學習成本高,java作web
c 編譯型 底層語言
c++ 編譯型 c的基礎上加了面向對象
go 編譯型 高併發,區塊鏈c++
語言特色: 靈活簡潔,語言優美 可讀性強, 語言類型: 解釋型:逐行轉化,運行效率低,性能差,開發效率高。兼容性好,跨平臺 編譯型 :一次性編譯成二進制文件,執行效率高,兼容性差, 動態語言:不用聲明變量的數據類型(腳本類語言) 靜態語言:須要聲明變量的數據類型 第三方庫:python定位是任其發展,開源庫不少,應用領域廣
列舉Python2和Python3的區別?
Python 2只支持到2020年
print函數 Python2不加括號 Python3加括號 從語句變爲函數
input函數 Python2用戶輸入解析爲int類型,raw_input爲字符串類型 Python3爲字符串類型
整除/ 2 根據除數小數點位獲得結果,整形 3是真除
默認編碼 2是ascll碼 3 utf-8
不等!= <> python3取消了<>
int類型 2有long類型 3只有int
range 2 是列表 xrange 可迭代對象 3是可迭代對象
2新式類,經典類 3 新式類程序員
看代碼寫結果web
v1 = 1 or 2 #v1 = 1 v2 = 3 and 7 or 9 and 0 #v2 = 7 or 0 #v2 = 7 在沒有()的狀況下not 優先級高於 and,and優先級高於or x or y , x爲真,值就是x,x爲假,值是y; x and y, x爲真,值是y,x爲假,值是x。 兩邊都不是0的狀況下 and 直接取後面的值 or 直接取前面的值 若是存在0的狀況 and 直接取0 or 直接取非0 false是 0 。。
用一行代碼實現數值交換。
a = 1
b = 2面試
#a,b = b,a
is和==的區別?
對象的基本三要素:type(數據類型) id(身份標識) 和 value(值)
==比較兩個對象的值是否相等
is判斷id值是否相同django
python裏如何實現tuple和list的轉化?
tuple(list) #能夠用循環添加
list(tuple) #tuple不可變,不能循環添加編程
如何實現字符串 name='老男孩'的反轉?
1.切片
name = name[::-1]
2.列表的reverse方法
name = list(name)
name.reverse()
name = ''.join(name)
#name = ''.join(name[::-1])
3.for 循環
#各類切片insert均可以
4.reduce函數
new_name = reduce(lambda x,y:y+x,name)
print(new_name)
5.遞歸
def func(s):
if len(s) < 1:
return s
return func(s[1:]) +s[0]
6.使用棧
s = "hello"
l = list(s)
result = ""
while(len(l)>0):
result += l.pop()
print(result)flask
兩個set如何獲取交集、並集、差集?
交集 list(set(a).intersection(set(b)))
&
並集 list(set(a).union(set(b)))
|
差集 list(set(b).difference(set(a)))
-多線程
Python中如何拷貝一個對象?
爲了在修改數據時不改變原數據所產生了拷貝
copy模塊 copy.copy() copy.deepcopy()
[:]
可變對象:所謂可變是指可變對象的值可變,身份(id)是不變的。如:列表、字典、集合
不可變對象:就是對象的身份和值都不可變。如:數字(數字也是不可變,切記)、字符串、元組
簡述 賦值、淺拷貝、深拷貝的區別?
原則上是分離數據,修改數據互不影響
賦值:讓多個變量同時指向一個對象的內存地址。不可變對象在賦值時會開闢新空間。可變對象在賦值時,修改一個的值,另外一個也會發生改變。 淺拷貝:(copy模塊的copy.copy()函數) 拷貝父對象,不會拷貝對象的內部的子對象。不可變對象和賦值沒區別。可變對象,淺拷貝在拷貝時,只拷貝第一層中的引用,若是元素是可變對象,而且被修改,那麼拷貝的對象也會發生變化。####拷貝第一層元素內存地址 深拷貝:徹底拷貝了父對象及其子對象。深拷貝就是將頂級對象以及子對象的值同時複製給新對象,此時修改任何一個都不會影響另外一個。{copy模塊的 copy.deepcopy()函數}####無論多少層,不可變共有,可變開闢新空間 但因爲小數據池的概念,python中 -5~~256 20字符串 bool徹底共享內存地址
閱讀代碼寫結果。
import copy
a = [1,2,4,5,['b','c']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5) a[4].append('d') print(b) print(c) print(a)
用Python實現9 * 9 乘法表。
用Python顯示一個斐波那契數列。
lst = [1,1]
for i in range(10):
lst.append()
如何刪除列表中重複的值?
list(set(list))
一個大小爲100G的文件etl_log.txt, 要讀取文件中的內容, 寫出具體過程代碼?
for i in 文件句柄
a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 請問a是什麼?
字典的建立方式
lambda關鍵字的做用?
定義一個匿名函數
*arg和kwarg做用?
* arg 接受多餘位置參數
kwarg 接受多餘關鍵字參數
如何在函數中設置一個全局變量 ?
global name
filter、map、reduce的做用?
filter 過濾
map 映射
reduce 累計算
什麼是匿名函數?匿名函數有什麼做用?
lambda 函數就是匿名函數,一句話函數
配合高階函數進行使用
高階函數:能寫方法的
Python遞歸的最大層數?
官方1000 實際994-998
import sys
sys.setrecursionlimit(10000)修改遞歸最大深度
什麼是迭代器?什麼是可迭代對象?
具備__iter__()和__next__()方法的就是迭代器
具備__iter__()方法的就是可迭代對象
.dir()查看某個對象的全部屬性和方法
什麼是生成器? 什麼是裝飾器及應用場景?
生成器的本質就是迭代器,具備yield關鍵字就是生成器
裝飾器本質閉包,不修改源代碼及調用方式下,額外增長功能
登錄驗證
類
flask
django
什麼是反射及應用場景?
經過字符串操做對象的方法和屬性
應用場景:
用戶輸入,判斷選擇,cbv
寫一個普通的裝飾器。
寫一個帶參數的裝飾器。
求結果
def num():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
[6,6,6,6]
def(a, b=[])這種寫法有什麼陷阱?
默認參數是可變數據類型 閉包
看代碼寫結果
def func(a,b=[]):
b.append(a)
return b
v1 = func(1) v2 = func(2,[10,20]) v3 = func(3) print(v1,v2,v3)
看代碼寫結果
def func(a,b=[]):
b.append(a)
return b
v1 = func(1) print(v1) 1 v2 = func(2,[10,20]) print(v2) 10 20 2 v3 = func(3) print(v3) 1 3
請編寫一個函數實現--換成一個整數。
如 10.3.9.12 轉換規則爲:
10 00001010
3 00000011
9 00001001
12 00001100
再將以上二進制拼接起來計算十進制結果:00001010 00000011 00001001 00001100 = ?
請查找一個目錄下的全部文件(可能存在文件嵌套)。
os.walk() 本質遞歸
求結果
import math
print (math.floor(5.5))
地板除 5
是否使用過functools中的函數?其做用是什麼?
reduce wraps
re的match和search區別?
match 從開頭進行匹配,匹配一個就中止
search 從任意位置進行匹配 匹配一個就中止
用Python匹配HTML tag的時候,<.>和<.?>有什麼區別?
. 貪婪匹配 匹配多個任意字符
.*? 非貪婪 只匹配一次
如何生成一個隨機數?
random
random.random()
super的做用?
按照mro的順序進行繼承
雙下劃線和單下劃線的區別?
__a = 10 強制私有
_b = 15 程序員約定俗成這是一個私有方法
@staticmethod和@classmethod的區別?
一個是靜態方法 普通函數
一個是類方法
實現一個單例模式(加鎖)。
多線程再也不是單例了,爲了保證因此加鎖
棧和隊列的區別?
棧 先進後出
隊列 先進先出
如下代碼輸出是什麼? 請給出答案並解釋。
class Parent(object):
x = 1
class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x
參考下面代碼片斷
class Context:
pass
with Content() as ctx: ctx.do_something() 請在Context類下添加代碼完成該類的實現
第二部分 可選題