python面试题(22-33)
22、字符串、列表、元组、字典每个常用的5个方法?
-
字符串、列表、元组、字典每个常用的5个方法?
-
字符串:
-
1,find通过元素找索引,可切片,找不到返回-1
-
2,index,找不到报错。
-
*3,split 由字符串分割成列表,默认按空格。
-
4,captalize 首字母大写,其他字母小写。
-
,upper 全大写。
-
,lower 全小写。
-
title,每个单词的首字母大写。
-
startswith 判断以什么为开头,可以切片,整体概念。
-
endswith 判断以什么为结尾,可以切片,整体概念。
-
format格式化输出
-
-
字典:
-
key: 输出所有的键 clear:清空 dic:删除的键如果没有则报错 pop:键值对删,有返回,没有原来的键会报错(自行设置返回键就不会报错) popitem:随机删键值对 del:删除的键如果没有则报错 改 update
-
-
列表:
-
append:在后面添加。 Insert按照索引添加, expend:迭代着添加。 list.extend(seq) - 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) pop 删除 (pop 有返回值) remove 可以按照元素去删 clear 清空列表
-
-
元组
-
1、cmp(tuple1, tuple2):比较两个元组元素。 2、len(tuple):计算元组元素个数。 3、max(tuple):返回元组中元素最大值。 4、min(tuple):返回元组中元素最小值。 5、tuple(seq):将列表转换为元组。
-
-
23,如何使用python删除一个文件?
import os
path='' #文件路径
if os.path.exists(path):
os.remove(path) #两种删除方法
#os.unlink(path)
else:
print('no such files') #返回文件不存在
24,列举常用模块
os(路径), re , math, json, random , time, request, pymysql
25、args和*kwarg作用?
-
都是传入可变参数
-
不确定要往函数中传入多少个参数用 *args,他会把可变参数打包成元组
-
不知道要往函数中传入多少个关键词参数用 **kwargs他会把可变参数打包成字典
26、is和==的区别?
-
is:判断内存地址是否相等
-
==:判断数值是否相等
27、简述Python的深浅拷贝以及应用场景?
copy():浅copy,浅拷贝指仅仅拷贝数据集合的第一层数据
deepcopy(): 深copy,深拷贝指拷贝数据集合的所有层
应用场景:不想单独新建模版来一个一个参数,又不想修改默认模版而影响其他机器阈值,深拷贝来完成
28,谈谈你对面向对象的理解?
我的理解是,万物皆对象,然后三大特征是,继承,封装,多态,
继承就是将一个东西共有的属性抽象成父类,每一个子类都可以继承父类的属性。
封装就是减少大量的重复代码,将复杂重复的功能封装起来,使用的时候直接调用,方便使用,提高复用性。
多态就是一种事物有多种形态(动物类)依赖于继承。
29,面向对象中的继承有什么优点?
减少多余代码,让类与类之间产生关系,为多态打基础
30,python实例方法,类方法,静态方法的区别和作用?
@classmethod 修饰的方法为类方法;
采用 @staticmethod 修饰的方法为静态方法;
不用任何修改的方法为实例方法。
31,logging模块的作用以及应用场景
logging是python一个标准库模板,由标准库模块提供日志记录API 的关键好处是 所有python模块都可以使用这个日志记录功能。
32,简述生成器,迭代器,可迭代对象以及应用场景
-
迭代器,内部实现next方法,帮助我们向后一个一个取值
-
生成器,一个函数内部存在于yield关键字,v= 函数()。
应用场景:-range/xrange
--python2 range(1000000000),立即创建;xrange(10000000)生成器
--python3: range(10000000000)生成器,没有xrange
---redis获取值:
-
可迭代对象:一个类 内部实现iter方法 且返回一个 迭代器。 [能循环就是可迭代对象]
class Foo(object):
def __iter__(self):
return iter([11,22,44])
obj = Foo()
应用场景:wtforms 中对form 对象进行循环时候,显示 form 中包含所有字段
-列表,对象,元组。如果想要一个对象被for 循环,那么就需要在当前类中定义 __iter__
-
装饰器: 在不改变原函数代码的基础上,在执行前后进行定制操作。
应用场景:
-- flask 路由系统
-- csrf
-- flask before_request
-- django内置认证
-- django缓存
33,如何判断是函数还是方法:
class Foo():
def aa(self):
print('aa')
Foo.aa() #函数
ob = Foo()
ob.aa() #实例化后调用是方法
#对于一个类里面同样的东西到底是函数还是方法,取决谁去调用。
类本生调用是函数
实例化对象调用是方法