在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 SqlAlchemy
Feb 12 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
详解python while 函数及while和for的区别
Sep 07 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
python通过实例讲解反射机制
Oct 17 Python
Python re正则表达式元字符分组()用法分享
Feb 10 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
使用python求解二次规划的问题
Feb 29 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
Python数据结构dict常用操作代码实例
Mar 12 Python
python单例模式的应用场景实例讲解
Feb 24 Python
Python制作表白爱心合集
Jan 22 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
简单的cookie计数器实现源码
2013/06/07 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
详解JS预解析原理
2020/06/16 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python 禁止函数修改列表的实现方法
2017/08/03 Python
python去除字符串中的换行符
2017/10/11 Python
python批量爬取下载抖音视频
2019/06/17 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
Python 串口通信的实现
2020/09/29 Python
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
AJax面试题
2014/11/25 面试题
什么是Remote Module
2016/06/10 面试题
学期自我鉴定范文
2013/10/01 职场文书
美术师范毕业生自荐信
2013/11/16 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
预备党员综合考察材料
2014/05/31 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL
python 使用pandas读取csv文件的方法
2022/12/24 Python