在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执行时间的计算方法小结
Mar 17 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
postman传递当前时间戳实例详解
Sep 14 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
使用TensorBoard进行超参数优化的实现
Jul 06 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 Python
python实现局部图像放大
Nov 17 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 has encountered an Access Violation
2007/01/15 PHP
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
php实现的ping端口函数实例
2014/11/12 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
python多线程操作实例
2014/11/21 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python实现队列的方法
2015/05/26 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
中医专业应届生求职信
2013/11/17 职场文书
学校花圃的标语
2014/06/18 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
实习协议书
2015/01/27 职场文书
关于教师节的广播稿
2015/08/19 职场文书
go开发alertmanger实现钉钉报警
2021/07/16 Golang
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis