一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

10個Python面試常問的問題

 長沙7喜 2018-01-02


概述

Python是個非常受歡迎的編程語言,隨著近些年機(jī)器學(xué)習(xí)、云計算等技術(shù)的發(fā)展,Python的職位需求越來越高。下面我收集了10個Python面試官經(jīng)常問的問題,供大家參考學(xué)習(xí)。

類繼承

有如下的一段代碼:

class A(object):
   def show(self):
       print 'base show'

class B(A):
   def show(self):
       print 'derived show'

obj = B()
obj.show()

如何調(diào)用類A的show方法了。
方法如下:

obj.__class__ = Aobj.show()

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

方法對象

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

class A(object):
   def __init__(self,a,b):
       self.__a = a
       self.__b = b
   def myprint(self):
       print 'a=', self.__a, 'b=', self.__b


a1=A(10,20)
a1.myprint()

a1(80)

答案:為了能讓對象實例能被直接調(diào)用,需要實現(xiàn)__call__方法

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

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', a
           if a>10:
               return super(A, cls).__new__(cls)
           return B()

   def __init__(self,a):
       print 'INIT', a

a1 = A(5)
a1.fn()
a2=A(20)
a2.fn()

答案:

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

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

Python list和dict生成

下面這段代碼輸出什么?

ls = [1,2,3,4]
list1 = [i for i in ls if i>2]
print list1

list2 = [i*2 for i in ls if i>2]
print list2

dic1 = {x: x**2 for x in (2, 4, 6)}
print dic1

dic2 = {x: 'item' + str(x**2) for x in (2, 4, 6)}
print dic2

set1 = {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'])

全局和局部變量

下面這段代碼輸出什么?

num = 9

def f1():
   num = 20

def f2():
   print num


f2()
f1()
f2()

答案:

9
9

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

num = 9

def f1():
   global num
   num = 20

def f2():
  print num

f2()
f1()
f2()

# prints:
#      9
#      20

交換兩個變量的值

一行代碼交換兩個變量值

a=8
b=9

答案:

(a,b) = (b,a)

默認(rèn)方法

如下的代碼

class A(object):
   def __init__(self,a,b):
       self.a1 = a
       self.b1 = b
       print 'init'
   def mydefault(self):
       print 'default'

a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()

方法 fn1/fn2/fn3 都沒有定義,添加代碼,是沒有定義的方法都調(diào)用mydefault函數(shù),上面的代碼應(yīng)該輸出


defaultdefaultdefault

答案:

class A(object):
   def __init__(self,a,b):
       self.a1 = a
       self.b1 = b
       print 'init'
   def mydefault(self):
       print 'default'
   def __getattr__(self,name):
       return self.mydefault

a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()

方法__getattr__只有當(dāng)沒有定義的方法調(diào)用時,才是調(diào)用他。當(dāng)fn1方法傳入?yún)?shù)時,我們可以給mydefault方法增加一個*args不定參數(shù)來兼容。

class A(object):
   def __init__(self,a,b):
       self.a1 = a
       self.b1 = b
       print 'init'
   def mydefault(self,*args):
       print 'default:' + str(args[0])
   def __getattr__(self,name):
       print 'other fn:',name
       return self.mydefault

a1 = A(10,20)
a1.fn1(33)
a1.fn2('hello')
a1.fn3(10)

包管理

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


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

__all__ = ['mod1','mod3']

閉包

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

答案:

def mulby(num):
   def gn(val):
       return num * val

   return gn


zw = mulby(7)
print(zw(9));

性能

解析下面的代碼慢在哪


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

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


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本加勒比不卡二三四区| 久久福利视频视频一区二区| 69久久精品亚洲一区二区| 最近日韩在线免费黄片| 亚洲国产精品一区二区毛片| 好吊妞视频只有这里有精品| 日韩精品免费一区二区三区| 精品国产亚洲av成人一区| 久久精品国产99精品亚洲| 亚洲精品福利视频在线观看| 91在线播放在线播放观看| 日韩三级黄色大片免费观看| 一区二区日韩欧美精品| 国产欧美日韩精品一区二区| 亚洲一区二区精品免费| 91人妻人人澡人人人人精品| 人妻久久这里只有精品| 九九热精品视频免费观看| 欧美一区日韩一区日韩一区| 国产精品激情对白一区二区| 欧美人禽色视频免费看| 97精品人妻一区二区三区麻豆| 日韩在线免费看中文字幕| 黄片免费播放一区二区| 日韩人妻精品免费一区二区三区| 国产盗摄精品一区二区视频| 三级高清有码在线观看| 最近中文字幕高清中文字幕无| 亚洲国产欧美久久精品| 欧美成人免费夜夜黄啪啪| 久热在线视频这里只有精品| 日韩1区二区三区麻豆| 高清不卡一卡二卡区在线| 日韩和欧美的一区二区三区| 少妇激情在线免费观看| 久久99午夜福利视频| 有坂深雪中文字幕亚洲中文 | 老熟女露脸一二三四区| 中文字幕不卡欧美在线| 日韩精品免费一区二区三区| 永久福利盒子日韩日韩|