深入解答关于Python的11道基本面试题


Posted in Python onApril 01, 2017

前言

本文给大家深入的解答了关于Python的11道基本面试题,通过这些面试题大家能对python进一步的了解和学习,下面话不多说,来看看详细的介绍吧。

一、单引号,双引号,三引号的区别

分别阐述3种引号用的场景和区别

1),单引号和双引号主要用来表示字符串

比如:

  • 单引号:'python'
  • 双引号:"python"

2).三引号

  • 三单引号:'''python ''',也可以表示字符串一般用来输入多行文本,或者用于大段的注释
  • 三双引号:"""python""",一般用在类里面,用来注释类,这样省的写文档,直接用类的对象__doc__访问获得文档

区别:

若你的字符串里面本身包含单引号,必须用双引号

比如: "can't find the log\n"

二、Python的参数传递是值传递还是引用传递

举例说明Python函数参数传递的几种形式,并说明函数传参是值传递还是引用传递

1).Python的参数传递有:

位置参数

默认参数,

可变参数,

关键字参数

2).函数的传值到底是值传递还是引用传递,要分情况

a.不可变参数用值传递:

像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象

b.可变参数是用引用传递的

比如像列表,字典这样的对象是通过引用传递,和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变.

三、什么是lambda函数?它有什么好处?

举例说明lambda的用法,并说明用lambda的优点

1).lambda的用法:

lambda是匿名函数,用法如下:lambda arg1,arg2..argN:expression using args

2).优点

lambda能和def做同样种类的工作,特别是对于那些逻辑简单的函数,直接用lambda会更简洁,而且省去取函数名的麻烦(给函数取名是个技术活)

四、字符串格式化:%和.format的区别

字符串的format函数非常灵活,很强大,可以接受的参数不限个数,并且位置可以不按顺序,而且有较为强大的格式限定符(比如:填充,对齐,精度等)

五、Python是如何进行内存管理的

1).对象的引用计数机制

Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况:

  • 一个对象分配一个新名称
  • 将其放入一个容器中(如列表、元组或字典)

引用计数减少的情况:

  • 使用del语句对对象别名显示的销毁
  • 引用超出作用域或被重新赋值

2).垃圾回收

当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

3).内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统:

  • Pymalloc机制:为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
  • 对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

六、写一个函数, 输入一个字符串, 返回倒序排列的结果

输入: string_reverse(‘abcdef') , 返回: ‘fedcba',写出你能想到的多种方法

1).利用字符串本身的翻转

def string_reverse1(text='abcdef'):

return text[::-1]

2).把字符串变成列表,用列表的reverse函数

深入解答关于Python的11道基本面试题

3).新建一个列表,从后往前取

深入解答关于Python的11道基本面试题

4).利用双向列表deque中的extendleft函数

深入解答关于Python的11道基本面试题

5).递归

深入解答关于Python的11道基本面试题

七、按升序合并如下两个list, 并去除重复的元素

list1 = [2, 3, 8, 4, 9, 5, 6]

list2 = [5, 6, 10, 17, 11, 2]

1).最简单的方法用set

list3=list1+list2

print set(list3)

2).递归

先选一个中间数,然后一边是小的数字,一边是大的数字,然后再循环递归,排完序(是不是想起了c里面的冒泡)

深入解答关于Python的11道基本面试题

八、以下的代码的输出将是什么? 说出你的答案并解释

class Parent(object):
 x = 1
class Child1(Parent):
 pass
class Child2(Parent):
 pass
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x
>>
1 1 1
1 2 1
3 2 3

解答:

使你困惑或是惊奇的是关于最后一行的输出是 3 2 3 而不是 3 2 1。为什么改变了 Parent.x 的值还会改变 Child2.x 的值,但是同时 Child1.x 值却没有改变?

这个答案的关键是,在 Python中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到.

  • 首先,在父类中设置 x = 1 会使得类变量 x 在引用该类和其任何子类中的值为 1。这就是因为第一个 print 语句的输出是 1 1 1
  • 然后,如果任何它的子类重写了该值(例如,我们执行语句 Child1.x = 2)该值仅仅在子类中被改变。这就是为什么第二个 print 语句的输出是 1 2 1
  • 最后,如果该值在父类中被改变(例如,我们执行语句 Parent.x = 3),这个改变会影响到任何未重写该值的子类当中的值(在这个示例中被影响的子类是 Child2)。这就是为什么第三个 print 输出是 3 2 3

九、下面的代码会不会报错

list = ['a', 'b', 'c', 'd', 'e']
print list[10:]

不会报错,而且会输出一个 [],并且不会导致一个 IndexError

解答:

当试图访问一个超过列表索引值的成员将导致 IndexError(比如访问以上列表的 list[10])。尽管如此,试图访问一个列表的以超出列表长度数作为开始索引的切片将不会导致 IndexError,并且将仅仅返回一个空列表

一个讨厌的小问题是它会导致出现 bug ,并且这个问题是难以追踪的,因为它在运行时不会引发错误,吐血啊~~

十、说出下面list1,list2,list3的输出值

def extendList(val, list=[]):
 list.append(val)
 return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3
>>
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

许多人会错误的认为 list1 应该等于 [10] 以及 list3 应该等于 ['a']。认为 list 的参数会在 extendList 每次被调用的时候会被设置成它的默认值 []。

尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList 没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。

因此,list1 和 list3 是操作的相同的列表。而list2是操作的它创建的独立的列表(通过传递它自己的空列表作为list参数的值)

所以这一点一定要切记切记.下面我们把list置为None就可以避免一些麻烦了

深入解答关于Python的11道基本面试题

十一、写出你认为最Pythonic的代码

Pythonic编程风格是Python的一种追求的风格,精髓就是追求直观,简洁而容易读.

下面是一些比较好的例子

1).交互变量

非Pythonic

temp = a
a = b
b = temp
pythonic:
a,b=b,a

2).判断其值真假

name = 'Tim'
langs = ['AS3', 'Lua', 'C']
info = {'name': 'Tim', 'sex': 'Male', 'age':23 } 
非Pythonic
if name != '' and len(langs) > 0 and info != {}:
  print('All True!') 
pythonic:
if name and langs and info:
  print('All True!')

3).列表推导式

[x for x in range(1,100) if x%2==0]

4).zip创建键值对

keys = ['Name', 'Sex', 'Age']
values = ['Jack', 'Male', 23]
dict(zip(keys,values))

pythonic的代码很多,这里举几个典型的例子

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python使用xmlrpc实例讲解
Dec 17 Python
机器学习python实战之决策树
Nov 01 Python
python Pygame的具体使用讲解
Nov 03 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
python3.4爬虫demo
Jan 22 Python
Python定义函数功能与用法实例详解
Apr 08 Python
Python实现打印实心和空心菱形
Nov 23 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
python实现3D地图可视化
Mar 25 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
Feb 20 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 #Python
Python中你应该知道的一些内置函数
Mar 31 #Python
python 性能优化方法小结
Mar 31 #Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 #Python
pygame加载中文名mp3文件出现error
Mar 31 #Python
Python自动发邮件脚本
Mar 31 #Python
Python中查看文件名和文件路径
Mar 31 #Python
You might like
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP之数组学习
2011/05/29 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
php自定义分页类完整实例
2015/12/25 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
简单实现python爬虫功能
2015/12/31 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
python怎么删除缓存文件
2020/07/19 Python
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
会计专业毕业自荐书范文
2014/02/08 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
企业理念标语
2014/06/09 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书