源| segmentfault

文| xiaochao

概述

Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了10个Python面试官经常问的问题,供大家参考学习。

1、类继承

有如下的一段代码:

classA(object):def show(self):

print 'base show'

classB(A):def show(self):

print 'derived show'

obj = B()

obj.show()

如何调用类A的show方法了。

方法如下:

obj.__class__ = Aobj.show()

__class__方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了记得修改回来。

2、方法对象

问题:为了让下面这段代码运行,需要增加哪些代码?

classA(object):def __init__(self,a,b):

self.__a = a

self.__b = bdef myprint(self):

print 'a=', self.__a,'b=', self.__b

a1=A(10,20)

a1.myprint()

a1(80)

答案:为了能让对象实例能被直接调用,需要实现__call__方法

classA(object):def __init__(self, a, b):

self.__a = a

self.__b = bdef myprint(self):

print 'a=', self.__a,'b=', self.__bdef __call__(self, num):

print 'call:', num + self.__a

3、new和init

下面这段代码输出什么?

classB(object):def fn(self):

print 'B fn'

def __init__(self):

print "B INIT"

classA(object):def fn(self):

print 'A fn'

def __new__(cls,a):

print "NEW", aifa>10:returnsuper(A, cls).__new__(cls)returnB()def __init__(self,a):

print "INIT", a

a1 = A(5)

a1.fn()

a2=A(20)

a2.fn()

答案:

NEW5

B INIT

B fn

NEW20

INIT20

A fn

使用__new__方法,可以决定返回那个对象,也就是创建对象之前,这个可以用于设计模式的单例、工厂模式。__init__是创建对象是调用的。

4、Python list和dict生成

下面这段代码输出什么?

ls = [1,2,3,4]

list1 = [iforiinlsifi>2]

printlist1

list2 = [i*2 foriinlsifi>2]

printlist2

dic1 = {x: x**2 forxin(2,4,6)}

printdic1

dic2 = {x:'item'+ str(x**2)forxin(2,4,6)}

printdic2

set1 = {xforxin 'hello world' ifxnot in 'low level'}

printset1

答案:

[3,4]

[6,8]

{2:4,4:16,6:36}

{2:'item4',4:'item16',6:'item36'}

set(['h','r','d'])

5、全局和局部变量

下面这段代码输出什么?

num =9

def f1():

num =20

def f2():

printnum

f2()

f1()

f2()

答案:

9

9

num不是个全局变量,所以每个函数都得到了自己的num拷贝,如果你想修改num,则必须用global关键字声明。比如下面这样

num =9

def f1():

globalnum

num =20

def f2():

printnum

f2()

f1()

f2()

# prints:

#      9

#      20

6、交换两个变量的值

一行代码交换两个变量值

a=8

b=9

答案:

(a,b) = (b,a)

7、默认方法

如下的代码

classA(object):def __init__(self,a,b):

self.a1 = a

self.b1 = bprint 'init'

def mydefault(self):

print 'default'

a1 = A(10,20)

a1.fn1()

a1.fn2()

a1.fn3()

方法 fn1/fn2/fn3 都没有定义,添加代码,是没有定义的方法都调用mydefault函数,上面的代码应该输出

defaultdefaultdefault

答案:

classA(object):def __init__(self,a,b):

self.a1 = a

self.b1 = bprint 'init'

def mydefault(self):

print 'default'

def __getattr__(self,name):

returnself.mydefault

a1 = A(10,20)

a1.fn1()

a1.fn2()

a1.fn3()

方法__getattr__只有当没有定义的方法调用时,才是调用他。当fn1方法传入参数时,我们可以给mydefault方法增加一个*args不定参数来兼容。

classA(object):def __init__(self,a,b):

self.a1 = a

self.b1 = bprint 'init'

def mydefault(self,*args):

print 'default:'+ str(args[0])def __getattr__(self,name):

print "other fn:",namereturnself.mydefault

a1 = A(10,20)

a1.fn1(33)

a1.fn2('hello')

a1.fn3(10)

8、包管理

一个包里有三个模块,mod1.py, mod2.py, mod3.py,但使用from demopack import *导入模块时,如何保证只有mod1、mod3被导入了。

答案:增加__init__.py文件,并在文件中增加:

__all__ = ['mod1','mod3']

9、闭包

写一个函数,接收整数参数n,返回一个函数,函数的功能是把函数的参数和n相乘并把结果返回。

答案:

def mulby(num):

def gn(val):

returnnum * valreturngn

zw = mulby(7)

print(zw(9));

10、性能

解析下面的代码慢在哪

def strtest1(num):

str='first'

foriinrange(num):

str+="X"

returnstr

答案:python的str是个不可变对象,每次迭代,都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。

需要获取免费学习资料及马哥教育全部公开课视频录播、资料、文档的同学,请添加QQ:595589172,添加后即可免费获取~祝同学们学习有成!

来源:segmentfault

*声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

python面试常问题解答_10个Python面试常问的问题相关推荐

  1. python潜力开源项目_10大Python开源项目推荐(Github平均star2135)

    翻译 | suisui 来源 | 人工智能头条(AI_Thinker) 继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2135,希望 ...

  2. python开源项目新手_10大Python开源项目推荐(Github平均star2135)

    翻译 | suisui 出品 | AI科技大本营(公众号ID:rgznai100) 继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2 ...

  3. python 任务计划程序_10.Selenium+Python+任务计划程序实现定时发送邮件

    一.python具体代码实现 # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.header ...

  4. python爬虫实例手机_10个python爬虫入门实例

    昨天带伙伴萌学习python爬虫,准备了几个简单的入门实例 涉及主要知识点: web是如何交互的 requests库的get.post函数的应用 response对象的相关函数,属性 python文件 ...

  5. python开源软件排行榜_10大Python开源项目推荐(Github平均star2135)

    翻译 | suisui 出品 | AI科技大本营(公众号ID:rgznai100) 继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2 ...

  6. python优雅代码大全_10个Python技巧帮你写出更优雅的代码

    阅读本文需要 2 分钟,公众号 somenzz ,欢迎学习 Python 的朋友订阅. 现在写代码的门槛非常低了,少儿都开始编程了,但从代码的风格一眼看出编码水平.是的,写代码是容易的,写出易读的代码 ...

  7. python手机代码编辑器_10 个 Python IDE 和代码编辑器

    2020 版10 个最佳 Python IDE 和代码编辑器 简单的语法和更快的执行速度使Python成为程序员中的首选语言. 它广泛用于创建网站,主要用于大数据操作. 为了简化运行Python程序的 ...

  8. python入门爬虫案例_10个python爬虫入门实例(小结)

    昨天带伙伴萌学习python爬虫,准备了几个简单的入门实例 涉及主要知识点: web是如何交互的 requests库的get.post函数的应用 response对象的相关函数,属性 python文件 ...

  9. python制作课程表提醒_10行Python代码制作群聊提醒小助手,再也不怕漏掉消息了...

    前言 大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会吐槽你的微信头像不好,要你换一个头像. 最近 pk哥 又被母后大人吐槽了,原因是亲戚微信群里某个亲戚生 ...

最新文章

  1. 创建UITextField对象
  2. Makefile_04:Makefile变量初了解
  3. linux内核微妙时,Linux内核模块时间同步函数汇总
  4. VS2008显示代码行号
  5. Codeforces 986B. Petr and Permutations(没想到这道2250分的题这么简单,早知道就先做了)
  6. html是以一种通用的方法来,c++ 有一种通用的方法来使函数模板适应为多态函数对象吗?...
  7. 使用Spring AOP和番石榴速率限制器的节气门方法
  8. java学习(2):学生管理系统2
  9. 堆排序不稳定的例子_【译】Python中的堆排序
  10. 依赖注入的三种方式_Java核心知识 Spring原理十 Spring 依赖注入四种方式
  11. 面试官系统精讲Java源码及大厂真题 - 34 只求问倒:连环相扣系列锁面试题
  12. MySQL数据库之MyISAM与InnoDB的区别
  13. C++---布隆过滤器
  14. 用终端命令(Git)合并到Master分支等操作
  15. python内置方法总结
  16. 高并发的常见策略--大型web项目
  17. emc re 整改 超标_资深EMC工程师总结:EMC整改流程及常见问题
  18. python访问陌生人qq空间_用Python登录好友QQ空间点赞的示例代码
  19. 简单的flask入门,自己来写网页
  20. TSC Deluxe 300 pro 打印机驱动

热门文章

  1. PHP学习笔记02:自然数列求和
  2. 无心剑英译朱自清《匆匆》
  3. 向量的大小和方向,零向量的方向_3
  4. 自走棋电脑版_手游版《自走棋》上线试玩
  5. bzoj3551 [ONTAK2010]Peaks加强版 kruskal重构树
  6. 2017.4.22 进制转换 思考记录
  7. linux内核开启overlay,Linux-overlay启动挂载为只读或写文件异常
  8. [C++] GCC multilib
  9. 【Python】Python3.7.3 - Collections (Arrays) - List数据类型
  10. android获取程序名称,Android获取应用程序名称(ApplicationName)示例