深入解答关于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中单、双下划线的区别总结
Dec 01 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
在macOS上搭建python环境的实现方法
Aug 13 Python
PHP统计代码行数的小代码
Sep 19 Python
Python中的延迟绑定原理详解
Oct 11 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
Python使用sqlite3模块内置数据库
May 07 Python
python 使用tkinter+you-get实现视频下载器
Nov 17 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
numpy数据类型dtype转换实现
Apr 24 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操作数组的一些函数整理介绍
2011/07/17 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python实时监控logstash日志代码
2020/04/27 Python
pandas按条件筛选数据的实现
2021/02/20 Python
html5 viewport使用方法示例详解
2013/12/02 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
公司员工的自我评价范例
2013/11/01 职场文书
选秀节目策划方案
2014/06/06 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
预备党员自我评价范文
2015/03/04 职场文书
Python爬取某拍短视频
2021/06/11 Python