在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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
python解析xml文件实例分享
Dec 04 Python
Python写的Socks5协议代理服务器
Aug 06 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
Python自动重试HTTP连接装饰器
Apr 28 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
如何使用Python进行PDF图片识别OCR
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
第五节 克隆 [5]
2006/10/09 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
js实现简单点赞操作
2020/03/17 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python解析xml中dom元素的方法
2015/03/12 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
python3中sys.argv的实例用法
2020/04/24 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
大学专科生推荐信范文
2013/11/23 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
歌唱比赛主持词
2014/03/18 职场文书
小学生暑假家长评语
2014/04/17 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
汉字听写大会观后感
2015/06/12 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
总经理致辞
2015/07/29 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers