在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基于右递归解决八皇后问题的方法
May 25 Python
简析Python的闭包和装饰器
Feb 26 Python
django中的setting最佳配置小结
Nov 21 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
Jul 03 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
Pytorch mask-rcnn 实现细节分享
Jun 24 Python
python随机打印成绩排名表
Jun 23 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
留言板翻页的实现详解
2006/10/09 PHP
PHP学习之PHP运算符
2006/10/09 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
php常用数组函数实例小结
2016/12/29 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
Javascript面向对象编程
2012/03/18 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
js实现双色球效果
2020/08/02 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python 有效的括号的实现代码示例
2019/11/11 Python
新手学python应该下哪个版本
2020/06/11 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
中科方德软件测试面试题
2016/04/21 面试题
统计系教授推荐信
2014/02/28 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
2016年教师节感言
2015/12/09 职场文书