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 合并文件的具体实例
Aug 08 Python
python中cPickle用法例子分享
Jan 03 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
django解决订单并发问题【推荐】
Jul 31 Python
Django中的AutoField字段使用
May 18 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 Python
python使用pymysql模块操作MySQL
Jun 16 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 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中Date获取时间不正确怎么办
2008/06/05 PHP
php 保留小数点
2009/04/21 PHP
如何用php获取文件名后缀
2013/06/09 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
Python socket编程实例详解
2015/05/27 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
Python科学计算之Pandas详解
2017/01/15 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
python版本五子棋的实现代码
2018/12/11 Python
python实现爬山算法的思路详解
2019/04/09 Python
python实现桌面气泡提示功能
2019/07/29 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
资深财务管理人员自我评价
2013/09/22 职场文书
美工的岗位职责
2013/11/14 职场文书
企业节能减排实施方案
2014/03/19 职场文书
老师对学生的评语
2014/04/18 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers