python测开面试题_python十道经典面试题,测试你的python功底!
來源:python學習專欄
第一題,對象的類屬性指向類對象class A():
def show(self):
print( A_show )
class B():
def show(self):
print( B_show )
obj =B()
obj.show()
#這樣我們能夠正常調用
#那么我們能不能
#obj.show()
#我們想調用A中的show
我們看一下obj.__class__ =A
obj.show()
這樣就可以直接調用了
第二題、方法對象__call__class People():
def __init__(self,length):
self.__length = length
def hand(self):
print( 手有 {} 米 .format(self.__length))
a=People(1)
a.hand() #這樣我們是能夠完美運行的
那么我們不小心 a(10) 這樣了,我希望他能夠正常運行
這里我們需要用到一個對象方法__call__class People():
def __init__(self,length):
self.__length = length
def hand(self):
print( 手有 {} 米 .format(self.__length))
def __call__(self, *args):
return self.hand()
a=People(1)
a() #這時a() 會找到__call__ 然后運行返回的函數
第三題,__new__ 和 __init__
1.init 通常用于初始化一個新實例,控制這個初始化的過程,比如添加一些屬性, 做一些額外的操作,發生在類實例被創建完以后。它是實例級別的方法。
2 ,new 通常用于控制生成一個新實例的過程。它是類級別的方法。
__new__ 在__init__ 之前運行
3 new至少要有一個參數cls,代表要實例化的類,此參數在實例化時由Python解釋器自動提供
4 new必須要有返回值,返回實例化出來的實例,這點在自己實現new時要特別注意,可以return父類new出來的實例,或者直接是object的new出來的實例
class A():
def func(self):
print( A_func )
def __init__(self):
print( A_init )
class B():
def func(self):
print( B_func )
def __new__(cls, a):
print( new ,a)
if a>10:
return super(B,cls).__new__(cls)
return A()
def __init__(self,a):
print( B_init )
#想想輸出結果
a = A()
b = B(5)
b.func()
b = B(11)
b.func()
第四題 ,列表解析式
生成列表list1 = [1,2,3,4]
#取出list1中大于二的值
list2 =[i for i in list1 if i>2]
print(list2)
生成字典dict1 = {i: i*2 for i in list1 if i*2 >4 }
print(dict1)dict2 = {i: items +str(i*2) for i in list1 if i*2 >4 }
print(dict2)
第五題,變量域num = 666
def f1():
num = 888
print(num)
def f2():
print(num)
print(num)
f1()
print(num)
f2()
# 666
#888
#666
#666
需要在函數中改變變量
我們需要使用global
這只是局部變量和全局變量的變量域
我們繼續看一下函數嵌套的變量域def fun():
num = 0
def fun1():
num = 1
def fun2():
print(num)
fun2()
fun1()
fun()
#1
在函數嵌套中變量會逐級網上找變量
這樣不會存在找不到變量的問題
在fun2()找不到會到fun1()中找
第六題,默認方法,python反射機制,getattrclass A:
def __init__(self,a,b):
self.a = a
self.b = b
def func(self):
print( a+b={} .format(self.a+self.b))
a1 = A(1,2)
a1.func()
#al.fun() 這樣呢,就該報錯了
好吧,我不想讓它報錯class A:
def __init__(self,a,b):
self.a = a
self.b = b
def func(self):
print( a+b={} .format(self.a+self.b))
def __getattr__(self,args):
return self.func #切記這里不能加() 因為 func()()是不能執行的
a1 = A(1,2)
a1.fun()
#3
__getattr__,hasattr
這是python的反射機制,getattr會接收參數,
然后執行,對應的還有hasattr,大家可以自己深究
第七題,包管理
當 一個包pack里有三個模塊,model, model2, model3,
采用from pack import *
怎樣只導入 model model2
添加 __init__.py文件,在文件中加入__all__ = [ model , model2 ]
就能實現了
第八題, 函數閉包
#要求,寫一個函數,接受一個整數參數N,返回一個函數,函數功能是把,函數的參數和N相乘的結果返回def f1(N):
def f2(val):
return N*val
return f2
這題解釋量比較大,大家可以到我的另外一篇文章學習
點擊鏈接就可以跳轉
第十題,裝飾器
裝飾器本質就是函數 功能是為其它的函數添加功能
原則是
1,不改變修飾函數的源代碼
2, 不修改修飾函數的調用方式
裝飾器=高階函數+函數嵌套+閉包
我想在不改變一個函數源碼狀態下,測試運行時間import time
def timer(func):
def wapper(a,*args, **kwargs):
if a ==1:
start = time.time()
res = func(*args, **kwargs)
end = time.time()
print( 函數運行時間 ,end-start)
return res
else:
return 1
return wapper
#我們測試下面這個函數的時間
#只需要把上面的函數加一個@寫在函數上
#就可以實現了
a=1
@timer
def cal(a,l):
res = 0
for i in l:
time.sleep(0.01)
res+=i
return res
res = cal(range(20))
print(res)
運行一下,你就知道裝飾器的強大之處了
知道這些面試題,并不代表你面試就能夠順利通過
我們還是需要在平時多記錄知識
祝大家早日找到適合自己的工作
今天的十道題就到這里了
總結
以上是生活随笔為你收集整理的python测开面试题_python十道经典面试题,测试你的python功底!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php入门和常用类的使用,php入门教程
- 下一篇: Java环境的正确配置你会了吗?