python面试题整理(二)

前一篇博文博主总结了10道python面试题,戳这里可以回看,本文继续整理python面试题,希望能帮到大家^_^。

面试题

11.迭代器和生成器的区别

1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIteration异常

2)生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)

区别:生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常

12.装饰器的作用和功能:

引入日志、函数执行时间统计、执行函数前预备处理、执行函数后的清理功能、权限校验等场景、缓存

13.find和grep的区别

grep命令是一种强大的文本搜索工具,grep搜索内容串可以是正则表达式,允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。

find通常用来再特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。

14.概括一下Python中的yield用法和作用

(1)保存当前运行状态(断点),然后暂停执行,即将函数挂起

(2)将yeild关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用,当使用next()、send()函数让函数从断点处继续执行,即唤醒函数。

15.python中is和==的区别

(1)Python中对象包含的三个基本要素,分别是:id(身份标识) 、type(数据类型)和value(值)。

(2)‘==’比较的是value值

(3)‘is’比较的是id

16.简述read、readline、readlines的区别

(1)read读取整个文件

(2)readline读取下一行数据

(3)readlines读取整个文件到一个迭代器以供我们遍历(读取 到一个list中,以供使用,比较方便)

17.*args,**kwargs的作用是什么?如何使用?                                            

 *args和**kwargs通常使用在函数定义里,*args允许函数传入不定量个数的非关键字参数,**kwargs允许函数传入不定量个数的关键字参数

18.python中如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}

深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}

19.分别说说cmp,map,filter的作用?

# cmp:compare比较
cmp(a,b) # ab 返回1 a=b返回0

# map:映射
map(function, iterable) # 将function作用于iterable,每个元素,将对应输出结果保存为一个list
# 例:
def plus_one(x):
return x+1
map(plus_one,[1,2,3,4]) ===>[2,3,4,5]

# filter:过滤器
filter(function, iterable) # 将 function依次作用于iterable的每个元素,如果返回值为true, 保留元素,否则从iterable里面删除
# 例:
def bigger_than_three(x):
return (x>3)
filter(bigger_than_three,[1,2,3,4,5]) ===>[4,5]

20.请阐述__new__和__init__的区别?

__new__:创建对象时调用,会返回当前对象的一个实例

__init__:创建完对象后调用,对当前对象的一些实例初始化,无返回值

调用顺序:先调用__new__生成一个实例再调用__init__方法对实例进行初始化,比如添加属性。

你可能感兴趣的:(python)