在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 sys.argv用法实例
May 28 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
python实现redis三种cas事务操作
Dec 19 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
Django中ORM外键和表的关系详解
May 20 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
基于python纯函数实现井字棋游戏
May 27 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
关于Python使用turtle库画任意图的问题
Apr 01 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调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
python机器学习库常用汇总
2017/11/15 Python
浅谈Python NLP入门教程
2017/12/25 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
python绘制玫瑰的实现代码
2020/03/02 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
双十佳事迹材料
2014/01/29 职场文书
保险公司早会主持词
2014/03/22 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
农业生产宣传标语
2014/10/08 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
vue实现Toast组件轻提示
2022/04/10 Vue.js