在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使用Flask框架同时上传多个文件的方法
Mar 21 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python中datetime模块参考手册
Jan 13 Python
Python 实现链表实例代码
Apr 07 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
使用Python对微信好友进行数据分析
Jun 27 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
python如何查看安装了的模块
Jun 23 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python如何删除列为空的行
2020/07/17 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
一份婚庆公司创业计划书
2014/01/11 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
出国签证在职证明
2014/09/20 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
实例详解Python的进程,线程和协程
2022/03/13 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js