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程序员开发中常犯的10个错误
Jul 07 Python
Python二分查找详解
Sep 13 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python基础知识_浅谈用户交互
May 31 Python
python实现发送邮件功能
Jul 22 Python
python3.x上post发送json数据
Mar 04 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
python return逻辑判断表达式实现解析
Dec 02 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
python常量折叠基础知识点讲解
Feb 28 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 中dirname(_file_)讲解
2007/03/18 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
javascript获取select值的方法完整实例
2019/06/20 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Python实现登录接口的示例代码
2017/07/21 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
网上签名寄语活动留言
2014/01/18 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
小学语文业务学习材料
2014/06/02 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
美容院管理规章制度
2015/08/05 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript