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 在字符串中加入变量的实例讲解
May 02 Python
Python实现端口检测的方法
Jul 24 Python
Python常见数字运算操作实例小结
Mar 22 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
使用python客户端访问impala的操作方式
Mar 28 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
python调用私有属性的方法总结
Jul 24 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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安全技术之 实现php基本安全
2010/09/04 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
php中动态调用函数的方法
2015/03/16 PHP
用javascript实现自定义标签
2007/05/08 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
js读取cookie方法总结
2014/10/31 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
使用python实现简单五子棋游戏
2019/06/18 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
pandas数据处理进阶详解
2019/10/11 Python
Django实现网页分页功能
2019/10/31 Python
Python中itertools的用法详解
2020/02/07 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
工程造价专业大学生自荐信
2013/10/01 职场文书
自荐信要包含哪些内容
2013/11/06 职场文书
年终总结会议主持词
2014/03/17 职场文书
社区志愿者活动总结
2014/06/26 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
企业法人代表证明书
2015/06/18 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
python 对图片进行简单的处理
2021/06/23 Python
Golang 遍历二叉树
2022/04/19 Golang
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang