深入解答关于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使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python模块导入的方法
Oct 24 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Python自动化操作实现图例绘制
Jul 09 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
利用Python函数实现一个万历表完整示例
Jan 23 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 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实现补齐关闭的HTML标签
2016/03/22 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
vue 扩展现有组件的操作
2020/08/14 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
python批量同步web服务器代码核心程序
2014/09/01 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
python 性能提升的几种方法
2016/07/15 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
详解python的argpare和click模块小结
2019/03/31 Python
python模拟斗地主发牌
2020/04/22 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
软件测试常见笔试题
2012/02/04 面试题
求职简历自荐信
2013/10/20 职场文书
往来会计岗位职责
2013/12/19 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
鼓舞士气的口号
2014/06/16 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
领导欢迎词致辞
2015/01/23 职场文书
考研经验交流会策划书
2015/11/02 职场文书