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使用新浪微博api上传图片到微博示例
Jan 10 Python
Python文件的读写和异常代码示例
Oct 31 Python
python实现Decorator模式实例代码
Feb 09 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
django模板加载静态文件的方法步骤
Mar 01 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
python 实现aes256加密
Nov 27 Python
python非标准时间的转换
Jul 25 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实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
php中in_array函数用法分析
2014/11/15 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
js window.onload 加载多个函数的方法
2009/11/02 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
Python实现字典的key和values的交换
2015/08/04 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
python 实现倒排索引的方法
2018/12/25 Python
Python3中的bytes和str类型详解
2019/05/02 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
Python requests上传文件实现步骤
2020/09/15 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
应届毕业生应聘自荐信
2013/12/07 职场文书
公司保密承诺书
2014/03/27 职场文书
建筑安全标语
2014/06/07 职场文书
邀请书模板
2015/02/02 职场文书
营运督导岗位职责
2015/04/10 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
《小小的船》教学反思
2016/02/18 职场文书
MYSQL常用函数介绍
2022/05/05 MySQL