在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中title()方法的使用简介
May 20 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
深入浅析python 中的匿名函数
May 21 Python
Python加载带有注释的Json文件实例
May 23 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
Python基于opencv实现的简单画板功能示例
Mar 04 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
Python中无限循环需要什么条件
May 27 Python
详解Pycharm安装及Django安装配置指南
Sep 15 Python
python基础之类属性和实例属性
Oct 24 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 mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
JavaScript中的事件处理
2008/01/16 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
python实现的防DDoS脚本
2011/02/08 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
python和ruby,我选谁?
2017/09/13 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
python实现代码统计器
2019/09/19 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
python实现图像全景拼接
2020/03/27 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
食品行业求职人的自我评价
2014/01/19 职场文书
平安校园建设方案
2014/05/02 职场文书
债务纠纷委托书
2014/08/30 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
工作失职自我检讨书
2015/05/05 职场文书
干部培训工作总结2015
2015/05/25 职场文书
植树节新闻稿
2015/07/17 职场文书
劳动模范获奖感言
2015/07/31 职场文书
教师节祝酒词
2015/08/11 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android