在Python程序员面试中被问的最多的10道题


Posted in Python onDecember 05, 2017

我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容:

Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了10个Python面试官经常问的问题,供大家参考学习。

类继承

有如下的一段代码:

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,但是用完了记得修改回来。

方法对象

问题:为了让下面这段代码运行,需要增加哪些代码?

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)

答案:为了能让对象实例能被直接调用,需要实现__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__方法,可以决定返回那个对象,也就是创建对象之前,这个可以用于设计模式的单例、工厂模式。__init__是创建对象是调用的。

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不是个全局变量,所以每个函数都得到了自己的num拷贝,如果你想修改num,则必须用global关键字声明。比如下面这样

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)

默认方法

如下的代码

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 都没有定义,添加代码,是没有定义的方法都调用mydefault函数,上面的代码应该输出

default
default
default

答案

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__只有当没有定义的方法调用时,才是调用他。当fn1方法传入参数时,我们可以给mydefault方法增加一个*args不定参数来兼容。

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 *导入模块时,如何保证只有mod1、mod3被导入了。

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

__all__ = ['mod1','mod3']

闭包
写一个函数,接收整数参数n,返回一个函数,函数的功能是把函数的参数和n相乘并把结果返回。

答案:

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越大,创建的str对象越多,内存消耗越大。

Python 相关文章推荐
Python脚本实现DNSPod DNS动态解析域名
Feb 14 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
python3抓取中文网页的方法
Jul 28 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
利用python实现周期财务统计可视化
Aug 25 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
python 算法题——快乐数的多种解法
May 27 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 Python
Python对列表去重的多种方法(四种方法)
Dec 05 #Python
详解Python在七牛云平台的应用(一)
Dec 05 #Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 #Python
python调用Delphi写的Dll代码示例
Dec 05 #Python
Python字典数据对象拆分的简单实现方法
Dec 05 #Python
python reduce 函数使用详解
Dec 05 #Python
有趣的python小程序分享
Dec 05 #Python
You might like
浅析PHP 按位与或 (^ 、&)
2013/06/21 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
使用python实现生成用户信息
2017/03/20 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
Python timeit模块的使用实践
2020/01/13 Python
python中tab键是什么意思
2020/06/18 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
婚礼证婚人证婚词
2014/01/08 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
新郎新娘致辞
2015/07/31 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python