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使用multiprocessing创建进程的方法
Jun 04 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
python如何在循环引用中管理内存
Mar 20 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
Python对接支付宝支付自实现功能
Oct 10 Python
python定时任务 sched模块用法实例
Nov 04 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
python简单的三元一次方程求解实例
Apr 02 Python
Python 改变数组类型为uint8的实现
Apr 09 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 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/12/30 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
javascript常见用法总结
2014/05/22 Javascript
JSON取值前判断
2014/12/23 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
python实现连接mongodb的方法
2015/05/08 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
python取余运算符知识点详解
2019/06/27 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
社保委托书怎么写
2014/08/02 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
初中班主任教育随笔
2015/08/15 职场文书
寒假生活随笔
2015/08/15 职场文书
2019求职信:应届生求职信范文
2019/04/24 职场文书
python 使用pandas读取csv文件的方法
2022/12/24 Python