1 简述解释型和编译型编程语言?python
解释型语言编写的程序不须要编译,在执行的时候,专门有一个解释器可以将VB语言翻译成机器语言,每一个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。程序员
用编译型语言写的程序执行以前,须要一个专门的编译过程,经过编译系统,把源高级程序编译成为机器语言文件,翻译只作了一次,运行时不须要翻译,因此编译型语言的程序执行效率高,但也不能一律而论,编程
部分解释型语言的解释器经过在运行时动态优化代码,甚至可以使解释型语言的性能超过编译型语言。浏览器
2 Python解释器种类以及特色?bash
CPython编程语言
当 从Python官方网站下载并安装好Python2.7后,就直接得到了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,因此叫 CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器。函数
IPython性能
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所加强,可是执行Python代码的功能和CPython是彻底同样的,比如不少国产浏览器虽然外观不一样,但内核实际上是调用了IE。学习
PyPy优化
PyPy是另外一个Python解释器,它的目标是执行速度,PyPy采用JIT技术,对Python代码进行动态编译,因此能够显著提升Python代码的执行速度。
Jython
Jython是运行在Java平台上的Python解释器,能够直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython相似,只不过IronPython是运行在微软.Net平台上的Python解释器,能够直接把Python代码编译成.Net的字节码。
在Python的解释器中,使用普遍的是CPython,对于Python的编译,除了能够采用以上解释器进行编译外,技术高超的开发者还能够按照本身的需求自行编写Python解释器来执行Python代码,十分的方便!
3 位和字节的关系?
bit就是位,也叫比特位,是计算机表示数据最小的单位
byte就是字节
1byte=8bit
1byte就是1B
一个字符=2字节
1KB=1024B
字节就是Byte,也是B
位就是bit也是b
转换关系以下:1)1KB=1024B
1B= 8b
4 请至少列举5个 PEP8 规范(越多越好)。
PEP8 编码规范 a.不要在行尾加分号, 也不要用分号将两条命令放在同一行。
b.每行不超过80个字符(长的导入模块语句和注释里的URL除外)
c.不要使用反斜杠链接行。Python会将圆括号, 中括号和花括号中的行隐式的链接起来
d.宁缺毋滥的使用括号,除非是用于实现行链接, 不然不要在返回语句或条件语句中使用括号. 不过在元组两边使用括号是能够的.
e.用4个空格来缩进代码,不要用tab, 也不要tab和空格混用. 对于行链接的状况, 你应该要么垂直对齐换行的元素,或者使用4空格的悬挂式缩进
f.顶级定义之间空2行, 方法定义之间空1行,顶级定义之间空两行, 好比函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你以为合适, 就空一行.
5 经过代码实现以下转换:
二进制转换成十进制:v = “0b1111011”
#先将其转换为字符串,再使用int函数,指定进制转换为十进制。
print(int("0b1111011",2))
值为123
复制代码
十进制转换成二进制:v = 18
print("转换为二进制为:", bin(18))
#转换为二进制为: 0b10010
复制代码
八进制转换成十进制:v = “011”
print(int("011",8))
#9
复制代码
十进制转换成八进制:v = 30
print("转换为八进制为:", oct(30))
#转换为八进制为: 0o36
复制代码
十六进制转换成十进制:v = “0x12”
print(int("0x12",16))
#18
复制代码
十进制转换成十六进制:v = 87
print("转换为十六进制为:", hex(87))
转换为十六进制为: 0x57
复制代码
6 python递归的最大层数?
def fab(n):
if n == 1:
return 1
else:
return fab(n-1)+ n
print (fab(998))
#获得的最大数为998,之后就是报错了,998这个数值莫名想起广告词····
复制代码
import sys
sys.setrecursionlimit(100000)
def foo(n):
print(n)
n += 1
foo(n)
if __name__ == '__main__':
foo(1)
#获得的最大数字在3922-3929之间浮动,这个是和计算机有关系的,将数字调到足够大了,已经大于系统堆栈,python已经没法支撑到太大的递归崩了。
复制代码
7 ascii、unicode、utf-八、gbk 区别?
最先只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,好比大写字母A的编码是65,小写字母z的编码是122。
可是要处理中文显然一个字节是不够的,至少须要两个字节,并且还不能和ASCII编码冲突,因此,中国制定了GB2312编码,用来把中文编进去。
你能够想获得的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
所以,Unicode应运而生。Unicode把全部语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode标准也在不断发展,但最经常使用的是用两个字节表示一个字符(若是要用到很是偏僻的字符,就须要4个字节)。现代操做系统和大多数编程语言都直接支持Unicode。
新的问题又出现了:若是统一成Unicode编码,乱码问题今后消失了。可是,若是你写的文本基本上所有是英文的话,用Unicode编码比ASCII编码须要多一倍的存储空间,在存储和传输上就十分不划算。
因此,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不一样的数字大小编码成1-6个字节,经常使用的英文字母被编码成1个字节,汉字一般是3个字节,只有很生僻的字符才会被编码成4-6个字节。若是你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。
UTF-8编码有一个额外的好处,就是ASCII编码实际上能够被当作是UTF-8编码的一部分,因此,大量只支持ASCII编码的历史遗留软件能够在UTF-8编码下继续工做。
8 字节码和机器码的区别?
机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据。
一般意义上来理解的话,机器码就是计算机能够直接执行,而且执行速度最快的代码。
用机器语言编写程序,编程人员要首先熟记所用计算机的所有指令代码和代码的涵义。手编程序时,程序员得本身处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程当中每步所使用的工做单元处在何种状态。这是一件十分繁琐的工做,编写程序花费的时间每每是实际运行时间的几十倍或几百倍。并且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。如今,除了计算机生产厂家的专业人员外,绝大多数的程序员已经再也不去学习机器语言了。
机器语言是微处理器理解和使用的,用于控制它的操做二进制代码。
8086到Pentium的机器语言指令长度能够从1字节到13字节。
尽管机器语言好像是很复杂的,然而它是有规律的。
存在着多至100000种机器语言的指令。这意味着不能把这些种类所有列出来。
总结:机器码是电脑CPU直接读取运行的机器指令,运行速度最快,可是很是晦涩难懂,也比较难编写,通常从业人员接触不到。
字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。字节码是一种中间码,它比机器码更抽象,须要直译器转译后才能成为机器码的中间代码。
一般状况下它是已经通过编译,但与特定机器码无关。字节码一般不像源码同样可让人阅读,而是编码后的数值常量、引用、指令等构成的序列。
字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。字节码的实现方式是经过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为能够直接执行的指令。字节码的典型应用为Java bytecode。
字节码在运行时经过JVM(JAVA虚拟机)作一次转换生成机器指令,所以可以更好的跨平台运行。
总结:字节码是一种中间状态(中间码)的二进制代码(文件)。须要直译器转译后才能成为机器码。
9 三元运算规则以及应用场景?
表达式格式
为真时的结果 if 断定条件 else 为假时的结果
事例
1 if 3>2 else 0
复制代码
10 用一行代码实现数值交换:
a =1
b =2
a,b=b,a
print(a,b)
复制代码