在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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python中运行并行任务技巧
Feb 26 Python
python实现从ftp服务器下载文件的方法
Apr 30 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
python tkinter图形界面代码统计工具
Sep 18 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
Python实现信息管理系统
Jun 05 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
新52大事件
2020/03/03 欧美动漫
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
php依赖注入知识点详解
2019/09/23 PHP
PHP实现文件上传与下载
2020/08/28 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
python文件和目录操作方法大全(含实例)
2014/03/12 Python
python学习开发mock接口
2019/04/28 Python
Python的Lambda函数用法详解
2019/09/03 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
盛大二次面试题
2016/11/18 面试题
模具专业推荐信
2013/10/30 职场文书
高二物理教学反思
2014/02/08 职场文书
学生请假条
2014/04/11 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
辞职信标准格式
2015/02/27 职场文书
2015年维修工作总结
2015/04/25 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript