深入解答关于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 时间操作例子和时间格式化参数小结
Apr 24 Python
全面理解Python中self的用法
Jun 04 Python
Python 描述符(Descriptor)入门
Nov 20 Python
python实现发送邮件功能
Jul 22 Python
利用python将json数据转换为csv格式的方法
Mar 22 Python
python TKinter获取文本框内容的方法
Oct 11 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
基于python生成器封装的协程类
Mar 20 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
python中selenium库的基本使用详解
Jul 31 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 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整数取余返回负数的相关解决方法
2014/05/15 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
JS前端加密算法示例
2016/12/22 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
Python中用max()方法求最大值的介绍
2015/05/15 Python
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
中职生自我鉴定范文
2013/10/03 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
综合实践活动方案
2014/02/14 职场文书
活动宣传策划方案
2014/05/23 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
高中开学感言
2015/08/01 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android