知行编程网知行编程网  2022-10-25 09:30 知行编程网 隐藏边栏  9 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于附带答案的15道经典python基础面试题的相关知识,希望可以帮到处于编程学习途中的小伙伴

15道经典python基础面试题及答案


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对象:

生成器不仅可以作用于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

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

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:是 Internet 上使用最广泛的网络协议。它是一种客户端和服务器端请求和响应标准 (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运行时,会记录对象分配和对象释放的次数。当两者之间的差异超过某个阈值时,垃圾收集开始。

3、内存池机制

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

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

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

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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享