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 上下文管理器使用方法小结
Oct 10 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
Python 使用with上下文实现计时功能
Mar 09 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
Python正则表达式学习小例子
Mar 03 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
matplotlib对象拾取事件处理的实现
Jan 14 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
咖啡语言
2021/03/03 咖啡文化
分享一下贝贝成长进度的php代码
2012/09/14 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
JavaScript的目的分析
2007/01/05 Javascript
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
python groupby 函数 as_index详解
2019/12/16 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
宣传普通话标语
2014/06/27 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
软件测试专业推荐信
2014/09/18 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python