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的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
python daemon守护进程实现
Aug 27 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python装饰器基础概念与用法详解
Dec 22 Python
python 定时器,轮询定时器的实例
Feb 20 Python
python实现简单加密解密机制
Mar 19 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
python中pivot()函数基础知识点
Jan 03 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
React中常见的动画实现的几种方式
2018/01/10 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
python中mechanize库的简单使用示例
2014/01/10 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
pandas 选择某几列的方法
2018/07/03 Python
利用Python如何生成便签图片详解
2018/07/09 Python
浅析python继承与多重继承
2018/09/13 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
基于python实现复制文件并重命名
2020/09/16 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
单位提档介绍信
2014/01/17 职场文书
农业生产宣传标语
2014/10/08 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
入团介绍人意见范文
2015/06/04 职场文书