在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 相关文章推荐
在java中如何定义一个抽象属性示例详解
Aug 18 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
python实现超简单的视频对象提取功能
Jun 04 Python
使用Python 统计高频字数的方法
Jan 31 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
Django REST framwork的权限验证实例
Apr 02 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 Python
python lambda 表达式形式分析
Apr 03 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
Views rows style模板重写代码
2011/05/16 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
微信小程序工具函数封装
2019/10/28 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
Python中pygame安装方法图文详解
2015/11/11 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python绘制多个子图的实例
2019/07/07 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
Python标准库itertools的使用方法
2020/01/17 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
台湾三立电视电商平台:电电购
2019/09/09 全球购物
行政总经理岗位职责
2013/12/05 职场文书
大学生冰淇淋店商业计划书
2014/01/14 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
中式婚礼主持词
2014/03/13 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android