文章 > 头条 > 附带答案的15道经典python基础面试题

附带答案的15道经典python基础面试题

头像

silencement

2019-07-15 14:11:224597浏览 · 0收藏 · 0评论

1、 闭包

定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个参数a, 内层函数依旧传入一个参数b, 内层函数使用a和b, 最后返回内层函数)

代码

def ExFunc(n):
	sum=n
def InsFunc():
	return sum+1
	return InsFunc

2、装饰器

def debug(func):
     def wrapper():
         print "[DEBUG]: enter {}()".format(func.name)
         return func()
     return wrapper
@debug
def say_hello():
print "hello!"

3、迭代器

1、可以直接作用于for循环的数据类型

第一类:集合数据类型,如list、tuple、dict、set、str等;

第二类:generator,包括集合定义generator和带yield的generator(也就是generator function)。

以上这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。

可以使用isinstance()判断一个对象是否是Iterable对象:

generator不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。那么定义来了,可以被next()调用并不断返回下一个值得对象称为迭代器(Iterator)

把list、dict、str等Iterable变成Iterator可以使用iter()函数

4、生成器

为什么使用生成式:

更容易使用,代码量较小内存使用更加高效

5、描述器

描述器的表现

用到三个魔术方法。get()   set()  delete()

方法签名如下:

object.get(self,instance,owner)

object.set(self,instance,value)

object.delete(self,instance)

Self指指代当前实例,调用者。

Instance是owner的实例。

Owner是属性所属的类。

典型的描述器:@Property

作用:访问类和实例的属性

6、内置模块

re(正则)、math(数学)、os(系统)、datetime、sys、json

sys:

sys.argv

功能:在外部向程序内部传递参数

sys.exit(n)

功能:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)

sys.path

功能:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

sys.modules

功能:sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。

7、列表的用法

函数用法:

cmp :比较两个列表的元素

len :列表元素个数

max :返回列表元素值

min :返回列表元素最小值

list :将元组转化为列表

方法:

List.append() 在列表末尾添加新对象
List.count() 统计某个元素在列表中出现的次数
List.extend() 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
List.index() 从列表中找出某个值第一个匹配项的索引位置
List.insert() 将对象插入列表
List.pop() 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
List.remove() 移除列表中某个值的第一个匹配项
List.reverse() 反向列表中元素
List.sort() 对原列表进行排序 reverse=False(默认升序)
join() 将列表转化为字符串

8、字符串用法

内建函数:

Capitalize() 字符串第一个大写
Center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
Count(str,beg=0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内str
出现的次数
decode(encoding=’utf-8’) 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 
errors 指 定 的 是 'ignore' 或 者'replace'
encode(encoding=’utf-8’) 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非errors 
指定的是'ignore'或者'replace'
endswith(obj,beg=0,end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,
如果是,返回 True,否则返回 False.
expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
Format() 格式化字符串
Index() 跟find()方法一样,只不过如果str不在 string中会报一个异常
Isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
Isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
Isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
Lstrip() 截掉 string 左边的空格
Replace(str1,str2,num=string.count(str1) 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次
Rstrip() 删除 string 字符串末尾的空格.
Split(str=’’,num=string.count(str)) 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串
Strip() 在 string 上执行 lstrip()和 rstrip()

9、HTTP/HTTPS协议

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

区别

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

10、高阶函数

Map()、filter()、zip()、reduce()、sorted()、lambda函数

11、深/浅拷贝

浅拷贝:拷贝表面层,更深的层次引用原来地址的

深拷贝:拷贝所有,内存中开辟新地址

12、面向对象编程(OOP)

类是描述具有相同属性和方法的对象的集合,Python中定义类使用class关键字,类的实例叫做对象,类中定义的函数叫做方法。

13、元类

所有类的父类,定义的新类可以看成元类的实例

14、正则

功能函数:

compile() 编译正则表达式模式,返回一个对象的模式
match() 只匹配字符串的开始,如果开始不匹配,函数返回None
search() 在整个字符串中寻找,找到返回,匹配不成功返回None
findall() 遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表
finditer() 搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭
代器返回
贪婪匹配和费贪婪匹配
前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
\d   数字:[0-9]
\D   非数字:[^\d]
\s   匹配任何空白字符:[<空格>\t\r\n\f\v]
\S   非空白字符:[^\s]
\w   匹配包括下划线在内的任何字字符:[A-Za-z0-9_]
\W   匹配非字母字符,即匹配特殊字符
\A   仅匹配字符串开头,同^
\Z   仅匹配字符串结尾,同$
\b   匹配\w和\W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中
的 'er',但不能匹配 "verb" 中的'er'。
\B   [^\b]
.    匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符
\    转义字符,使后一个字符改变原来的意思
l   匹配前一个字符0或多次
+   匹配前一个字符1次或次
?   匹配一个字符0次或1次

15、内存管理

1、 Python引入了一个机制:引用计数

2、 垃圾回收机制:当引用计数为0时,调用del方法

注意:

1、垃圾回收时,Python不能进行其它的任务,频繁的垃圾回收将大大降低Python的工作效率;

2、Python只会在特定条件下,自动启动垃圾回收(垃圾对象少就没必要回收)

3、当Python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动。

3、内存池机制

Python中有分为大内存和小内存:(256K为界限分大小内存)

1、大内存使用malloc进行分配

2、小内存使用内存池进行分配

3、Python的内存池(金字塔)

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!