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中for循环的使用
Apr 14 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
python算法与数据结构之单链表的实现代码
Jun 27 Python
django如何自己创建一个中间件
Jul 24 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
pandas统计重复值次数的方法实现
Feb 20 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递归调用的小技巧讲解
2013/02/19 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
Array对象方法参考
2006/10/03 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
银行自荐信范文
2013/10/07 职场文书
银行柜员应聘推荐信范文
2013/11/24 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
小学科学教学反思
2014/01/26 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
作风大整顿心得体会
2014/09/10 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python
分享7个 Python 实战项目练习
2022/03/03 Python