10个Python面试常问的问题(小结)


Posted in Python onNovember 20, 2019

概述

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 中 Meta Classes详解
Feb 13 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
Python多进程写入同一文件的方法
Jan 14 Python
Python自定义一个异常类的方法
Jun 27 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
python与mysql数据库交互的实现
Jan 06 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
PyTorch的Debug指南
May 07 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 #Python
Python笔记之facade模式
Nov 20 #Python
将python安装信息加入注册表的示例
Nov 20 #Python
如何使用Python脚本实现文件拷贝
Nov 20 #Python
Python笔记之代理模式
Nov 20 #Python
Python Tkinter模块 GUI 可视化实例
Nov 20 #Python
Python笔记之观察者模式
Nov 20 #Python
You might like
php利用cookie实现自动登录的方法
2014/12/10 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
js实现打字小游戏
2019/12/17 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
一张图带我们入门Python基础教程
2017/02/05 Python
Python批量发送post请求的实现代码
2018/05/05 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
MySQL面试题目集锦
2016/04/14 面试题
门诊手术室工作制度
2014/01/30 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
总结表彰大会主持词
2014/03/26 职场文书
活动总结报告范文
2014/05/04 职场文书
优秀教师演讲稿
2014/05/06 职场文书
绘画专业自荐信
2014/07/04 职场文书
施工安全汇报材料
2014/08/17 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
公司合并协议书范本
2014/09/30 职场文书
网吧温馨提示
2015/07/17 职场文书
职工食堂管理制度
2015/08/06 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
JavaScript的Set数据结构详解
2022/02/18 Javascript