在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中实现两个字典(dict)合并的方法
Sep 23 Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
Python pickle模块用法实例分析
May 27 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
Python3如何解决字符编码问题详解
Apr 23 Python
python实现批量修改文件名代码
Sep 10 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
django序列化serializers过程解析
Dec 14 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入门速成教程
2007/03/19 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
让焦点自动跳转
2006/07/01 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
js获取select标签选中值的两种方式
2014/01/09 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
简单易懂的python环境安装教程
2017/07/13 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
python通过zabbix api获取主机
2018/09/17 Python
Python属性和内建属性实例解析
2020/01/14 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
Sql面试题
2013/03/20 面试题
仓库规划计划书
2014/04/28 职场文书
怀念母亲教学反思
2014/04/28 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
检察院起诉意见书
2015/05/20 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers