日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

10道Python面试常见的问题

發布時間:2025/3/20 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10道Python面试常见的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.類繼承
有如下的一段代碼:

class A(object):def show(self):print 'base show'class B(A):def show(self):print 'derived show'obj = B() obj.show()

如何調用類A的show方法了。

方法如下:

obj.__class__ = A obj.show()

__class__方法指向了類對象,只用給他賦值類型A,然后調用方法show,但是用完了記得修改回來。

2.方法對象

問題:為了讓下面這段代碼運行,需要增加哪些代碼?

class A(object):def __init__(self,a,b):self.__a = aself.__b = bdef myprint(self):print 'a=', self.__a, 'b=', self.__ba1=A(10,20) a1.myprint()a1(80)

答案:為了能讓對象實例能被直接調用,需要實現__call__方法

class A(object):def __init__(self, a, b):self.__a = aself.__b = bdef myprint(self):print 'a=', self.__a, 'b=', self.__bdef __call__(self, num):print 'call:', num + self.__a

3.new和init

下面這段代碼輸入什么?

class B(object):def fn(self):print 'B fn'def __init__(self):print "B INIT"class A(object):def fn(self):print 'A fn'def __new__(cls,a):print "NEW", aif a>10:return super(A, cls).__new__(cls)return B()def __init__(self,a):print "INIT", aa1 = A(5) a1.fn() a2=A(20) a2.fn()

答案:

NEW 5 B INIT B fn NEW 20 INIT 20 A fn

使用__new__方法,可以決定返回那個對象,也就是創建對象之前,這個可以用于設計模式的單例、工廠模式。__init__是創建對象是調用的。

4.Python list和dict生成

下面這段代碼輸出什么?

ls = [1,2,3,4] list1 = [i for i in ls if i>2] print list1list2 = [i*2 for i in ls if i>2] print list2dic1 = {x: x**2 for x in (2, 4, 6)} print dic1dic2 = {x: 'item' + str(x**2) for x in (2, 4, 6)} print dic2set1 = {x for x in 'hello world' if x not in 'low level'} print set1

答案:

[3, 4] [6, 8] {2: 4, 4: 16, 6: 36} {2: 'item4', 4: 'item16', 6: 'item36'} set(['h', 'r', 'd'])

5.全局和局部變量

下面這段代碼輸出什么?

num = 9def f1():num = 20def f2():print numf2() f1() f2()

答案:

9 9

num不是個全局變量,所以每個函數都得到了自己的num拷貝,如果你想修改num,則必須用global關鍵字聲明。比如下面這樣

num = 9def f1():global numnum = 20def f2():print numf2() f1() f2()# prints: # 9 # 20

6.交換兩個變量的值

一行代碼交換兩個變量值

a=8 b=9

答案:

(a,b) = (b,a)

7.默認方法

如下的代碼

class A(object):def __init__(self,a,b):self.a1 = aself.b1 = bprint 'init'def mydefault(self):print 'default'a1 = A(10,20) a1.fn1() a1.fn2() a1.fn3()

方法 fn1/fn2/fn3 都沒有定義,添加代碼,是沒有定義的方法都調用mydefault函數,上面的代碼應該輸出

default default default

答案:

class A(object):def __init__(self,a,b):self.a1 = aself.b1 = bprint 'init'def mydefault(self):print 'default'def __getattr__(self,name):return self.mydefaulta1 = A(10,20) a1.fn1() a1.fn2() a1.fn3()

方法__getattr__只有當沒有定義的方法調用時,才是調用他。當fn1方法傳入參數時,我們可以給mydefault方法增加一個*args不定參數來兼容。

class A(object):def __init__(self,a,b):self.a1 = aself.b1 = bprint 'init'def mydefault(self,*args):print 'default:' + str(args[0])def __getattr__(self,name):print "other fn:",namereturn self.mydefaulta1 = A(10,20) a1.fn1(33) a1.fn2('hello') a1.fn3(10)

8.包管理

一個包里有三個模塊,mod1.py, mod2.py, mod3.py,但使用from demopack import *導入模塊時,如何保證只有mod1、mod3被導入了。

答案:增加__init__.py文件,并在文件中增加:

__all__ = ['mod1','mod3']

9.閉包

寫一個函數,接收整數參數n,返回一個函數,函數的功能是把函數的參數和n相乘并把結果返回。

答案:

def mulby(num):def gn(val):return num * valreturn gnzw = mulby(7) print(zw(9));

10.性能

解析下面的代碼慢在哪

def strtest1(num):str='first'for i in range(num):str+="X"return str

答案:python的str是個不可變對象,每次迭代,都會生成新的str對象來存儲新的字符串,num越大,創建的str對象越多,內存消耗越大。

總結

以上是生活随笔為你收集整理的10道Python面试常见的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。