1.简述解释型编程语言和编译型编程语言?
解释型:
解释型语言编写的程序不须要编译,在执行的时候,
专门有一个解释器可以将VB语言翻译成机器语言,每一个语句都是执行的时候才翻译。
这样解释型语言每执行一次就要翻译一次,效率比较低。python
编译型:
编译型语言写的程序执行以前,须要一个专门的编译过程,
经过编译系统,把源高级程序编译成为机器语言文件,翻译只作了一次,
运行时不须要翻译,因此编译型语言的程序执行效率高,但也不能一律而论正则表达式
2.Python解释器种类以及特色?
Cpython、IPython、PyPy、Jython、IronPython
3.位和字节的关系?
bit:位,一个二进制数据0或1
byte:字节,存储空间的基本计量单位
关系:1 byte = 8 bit算法
4.b、B、KB、MB、GB 的关系?
1GB=1024MB 1MB=1024KB 1KB=1024B编程
5.请至少列举5个 PEP8 规范?
缩进。4个空格的缩进(编辑器均可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
每行最大长度79,换行可使用反斜杠,最好使用圆括号。换行点要在操做符的后边敲回车。
逗号、冒号、分号前不要加空格。
函数命名使用所有小写的方式,可使用下划线
常量命名使用所有大写的方式,可使用下划线。
6.列举python2和python3的区别
1.python2 range(1,5) 返回的是列表,python3 返回的是迭代器
2.python2 使用print 既能够用小括号,也能够空格
python3必须使用小括号
3.python2中使用ascii编码,python3使用utf-8编码
4.python2中若是显示正常中文,引入coding声明,python3不须要
5.python2中是raw_imput函数,python3中是input函数
6.python2中unicode表示字符串序列,str表示字节序列
python3中str表示字符串序列,byte表示字节序列 数组
7.xrange和range的区别?
range:根据start与stop指定的范围以及step设定的步长,生成一个序列。
xrange:用法与range彻底相同,所不一样的是生成的不是一个数组,而是一个生成器。
区别:要生成很大的数字序列的时候,用xrange会比range性能优不少,由于不须要一上来就开辟一块很大的内存空间。 闭包
8.lambda匿名函数:
一般在须要一个函数,可是又不想费神去命名一个函数的场合下使用app
9.pass的做用
不会执行任何操做
保证格式完整
保证语义完整dom
10.*arg和**kwarg做用
*args和**kwargs主要用于函数定义。你能够将不定数量的参数传递给一个函数。
*args:用来发送一个非键值对的可变数量的参数列表给一个函数
**kwargs:容许你将不定长度的键值对,做为参数传递给一个函数
11.is和==的区别:
==:是python标准操做符中的比较操做符,用来比较判断两个对象的value(值)是否相等
is:比较判断的是对象间的惟一身份标识,也就是id是否相同。
12.简述Python的深浅拷贝
浅拷贝:拷贝了最外围的对象自己,内部的元素都只是拷贝了一个引用而已。
深拷贝:外围和内部元素都进行了拷贝对象自己,而不是引用。
13.Python垃圾回收机制?
python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,
其中标记-清除和分代回收主要是为了处理循环引用的难题。
1.引用计数算法
当有1个变量保存了对象的引用时,此对象的引用计数就会加1编程语言
当使用del删除变量指向的对象时,若是对象的引用计数不为1,
好比3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,
若是再调用1次del,此时会真的把对象进行删除
2.标记-清楚机制
基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,
遍历以对象为节点、以引用为边构成的图,把全部能够访问到的对象
打上标记,而后清扫一遍内存空间,把全部没标记的对象释放。 编辑器
3.分代技术
分代回收的总体思想是:将系统中的全部内存块根据其存活时间划分为不一样的集合,
每一个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大
而减少,存活时间一般利用通过几回垃圾回收来度量
14.Python的可变类型和不可变类型?
1.不可变类型(数字、字符串、元组、不可变集合)
不可变的分类中没有哪一个对象类型支持原处修改,
尽管咱们老是能够运行表达式来建立新的对象并将其结果分配给变量。
通常来讲,不可变类型有某种完整性,保证这个对象不会被程序的其它部分改变。
2.可变类型(列表、字典、可变集合)
相反,可变的类型老是能够经过操做原处修改,而不是建立新的对象。
尽管这样的能够复制,但原处修改支持直接修改。
15.求输出结果
v = dict.fromkeys(['k1','k2'],[])
print(v) #{'k1': [], 'k2': []}
v['k1'].append(666)
print(v) #{'k1': [666], 'k2': [666]}
v['k1'] = 777
print(v) #{'k1': 777, 'k2': [666]}
16.列举常见的内置函数?
input()
slice()
int()
open()
sum()
format()
compile()
17.一行代码实现9*9乘法表
print("\n".join
("\t".join
(
["%s*%s=%s" %(x,y,x*y) for y in range(1, x+1)]
) for x in range(1, 10)
)
)
18.列举经常使用模块都有哪些?
time
random
os
sys
re
logging
hashlib
19.re的match和search区别?
match()从开始位置匹配string
search()整个string查找匹配第一个。
20.正则表达式的贪婪和非贪婪匹配区别?
(.*)是贪婪匹配,会把知足正则的尽量多的日后匹配
(.*?)是非贪婪匹配,会把知足正则的尽量少匹配
21.如何实现[‘1’,’2’,’3’]变成[1,2,3]
a = ['1','2','3']
a_int = [int(i) for i in a]
print(a_int) #[1, 2, 3]
22.如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
a = [i ** 2for i in range(1,11)]
print(a)
23.谈谈对闭包的理解?
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,
而且外函数的返回值是内函数的引用。这样就构成了一个闭包。