在痴海的公众号看到了170道爬虫相关的题目,也参考了一些大佬的答案(主要是葫芦娃的爷爷,https://blog.csdn.net/qq_20728575/article/details/91385378),整理如下~
语言特性
1.Python与其他语言的区别
简洁,优雅,省略了各种大括号和分号;
解释型语言,运行是一行一行的解释,并运行,所以代码的调试很方便,开发效率高
作为开源的语言,具有数量众多的优秀的第三方库
缺点:执行速度不够快,但是可以嵌入c\c++c代码;
GIL,使用multiprocessing替代thread,增加线程的优先级,对并行计算性能较高的程序可以考虑把核心部分写成C模块
相比Java,Python是函数为一等公民的弱类型语言,Java是类为一等公民的强类型语言。
相比C,Python的类库齐全并且使用简洁,很少代码实现的功能用C可能要很复杂
运行速度慢。
2.解释型和编译型语言
解释型:边解释边执行
编译型:编译后再执行
3.Python的解释器种类以及相关特点
cpython:c语言开发,使用最广的解释器
ipython:基于cpython之上的一个交互式计时器,交互方式增强功能和cpython一样
pypy:目标是执行效率,采用jit技术,对Python代码进行动态编译,提高执行效率
jpython:运行在Java上的解释器,直接把Python代码编译成Java字节码执行
ironPython:运行在微软.net平台上的解释器,把Python编译成.net的字节码
4.Python3与Python2的区别
Python3里面的print为一个函数,必须用括号括起来;Python2里面的print是class
Python3里面的input的得到的是str;Python2的input得到的是int,raw_input得到的为str;
Python3里面/表示整除,%表示取余,//表示取整;Python2里面带上小数点/表示整除,%表示取余,//表示结果取整。
5.Python3和Python2中int和long区别
Python2有long类型,Python3只有int类型
6.xrange和range的区别
range([start,]stop[,step]),根据start与stop指定的范围以及step设定的步长,生成一个序列
xrange语法相同,但是生成一个生成器,即它的数据生成一个取出一个
总的来说,xrange比range性能优化很多,因为所需内存空间不大
两者基本都是使用在循环的时候,当需要输出一个列表的时候必须使用range
编码规范
7.了解dosctring?
就是函数方法的内置解释,函数.__doc__就能看到注释内容
8.类型注解?
Python是动态语言,变量随时可以被赋值,且能赋值为不同的类型
变量类型在运行时才决定
9.python命名规范?
普通变量,一般为小写,用_连接;
类名用驼峰命名法,首字母大写;
实例变量比普通变量多了开头;
专有变量,以__开头,以__结尾;
专有变量一般为Python内置变量
函数,驼峰命名法
常量与普通变量的区别在于字母全大写
11.Python的注释种类
‘# 、三对单引号、三对双引号’
12.Python代码缩进中是否支持tab和空格混用?
不支持
13.可以在一个import语句中导入多个库,逗号分隔即可
14.py文件命名的时候注意点
不要跟第三方库重名,也不要跟已有文件重名,避开保留字
15.规范Python代码风格的工具
pycharm、yapf、pylama
数据类型
16.基本数据类型
数字类型:整数、浮点数、复数
二进制,以0b或0B开头
八进制,以0o或0O开头
十六进制,以0x或0X开头
序列类型:字符串、列表类型、元组类型
集合、字典
17.区分可变数据类型与不可变数据类型
可变数据类型:列表list和字典dict;
不可变数据类型:整型int、浮点型float、字符串型string和元组tuple
18.将’hello world’的每个单词的首字母大写
‘hello world’.title()>>>‘Hello World’
只将第一个字母大写:a.capitalize()>>>‘Hello world’
19.检测字符串中只含有数字
b.isnumeric()>>>仅针对unicode的字符串进行判断
20.将’i love china’进行反转
str[::-1]
21.Python中字符串格式化的方式
使用%;使用{}
22.将字符串前后的空格去掉:str.strip()
23.获取字符串的后两位:str[-2:]
24.将GBK编码的字符串转换为UTF-8编码的字符串:
在python2中,需要进行decode(‘GBK’).encode(‘utf-8’)
Python 3 所有的 strings 均是 unicode 类型
25.s=‘info:xiaozhang 33 shandong’,用正则切分字符串输出 [‘info’,‘xiaozhang’,‘33’,‘shandong’]:
import re>>>res = re.split(r’? ',s)
26.将字符串转换为小写/大写
s.lower()/upper()
27.a=‘你好 中国 ‘,去除多余空格只留一个空格
re.sub(’ +’,’ ',a)#第一个表示选择多个空格,第二个表示单个空格,操作对象是a
28.在类中,self只能在方法中使用表示该方法的实例属性,也就是每个实例可以设置不同的值而不会相互影响;在方法下不使用self表示是该方法的局部变量,只能在该方法内使用。
self.xxx是全局的,xxx是局部的对于该方法有效
列表
29.对列表元素去重:a=set(a)
30.将字符串’1,2,3’,转为[‘1’,‘2’,‘3’]:a.split(’,’)#转换成列表的话,逐个append
31.对于两个list,找出相同的元素和不同的元素
print(set(A)&set(B))
print(set(A)^set(B))
32.将多维列表降维:b=str(list)>>>b=b.replace(’[’,’’)>>>b=b.replace(’]’,’’)
a=list(eval(b))
33.合并列表:a+b
34.打乱一个列表的元素:
random.shuffle(list1)
35.对象:客观的事物;类:代码中客观事物的抽象;实例:具体到我们能使用
对象抽象得到类,类再实例化,调用得到实例
36.列表推导式
i for i in range(3)>>>0,1,2
‘a’ for i in range(3)>>>‘a’,‘a’,‘a’
return self.url_temp.format(i*50) for i in range(1000)
循环里面还可以加条件判断,但是不能加else
37.列表操作中del、remove、pop有什么区别
remove是删除首个符合条件的元素,不存在则返回错误,存在则删除;
del是根据指定范围(包括索引,切片索引,整个列表)来删除元素;
pop是返回你弹出的那个值,如果没有值,则报empty错误;
如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。
38.按照字典内某个元素进行排序:
sorted(dict.keys(),reverse=True/False)
sorted(dict.values(),reverse=True/False)
39.合并字典
字典是Python语言中唯一的映射类型,映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系,通常被认为是可变的哈希表。
a.update(b)—dict(a,**b)—dict(a.items()+b.items())
40.如何把元组(‘a’,‘b’)和元组(1,2),变成字典{‘a’:1,‘b’:2}
dict(zip(a,b))
41.按照字典的内的年龄排序
d1 = [
{‘name’:‘alice’, ‘age’:38},
{‘name’:‘bob’, ‘age’:18},
{‘name’:‘Carl’, ‘age’:28},
]
答:d1.sort(key=lambda x: x[‘age’])
42.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
答:使用自带的itertools库进行实现,具体实现方式 itertools.islice(生成器对象,起始位置,结束位置),即可实现切片功能。
43.请将[i for i in range(3)]改成生成器
答: iter(range(3))