面试

1、简述编译型语言与解释型语言

 

 

2、python解释器的种类以及特点

#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代码,十分的方便!
View Code

 

 

3、位和字节的关系

#其中8 bit 就称为一个字节(Byte)

二进制数系统中,位简记为b,也称为比特,每个二进制数字0或1就是一个位(bit)。位是数据存储的最小单位,其中8 bit 就称为一个字节(Byte)。计算机中的CPU位数指的是CPU一次能处理的最大位数。例如32位计算机的CPU一个机器周期内可以处理32位二进制数据的计算。
View Code

 

 

4、列举PEP8规范

#1.代码排版            
a.保持每行缩进使用4个空格            注释:不能混用tab和空格,默认会全部转换为空格            
b.一行的最大长度为79个字符,(文档字符串或注释不超过72个字符)            注释:窗口显示限制,默认换行会打断代码结构            
c.换行首选括号,再是反斜杠。换行点在操作符后敲回车            
d.顶层函数与类之间空两行,类方法之间空一行,函数内部不同逻辑段之间空一行     


#2.文档排版            
a.Py2中默认编码ASCII或Latin-1,Py3中默认为UTF-8            
b.import导入时单独分开导入,from xx import xx,xx 可以多个导入            
c.导入位于文件的顶部:在模块注释和文档字符后,全局变量和常量前            
d.导入顺序:标准库 、 相关第三方库 、 本地库/自定义库,之间空一行,并配置相关的__all__说明书            
e.包导入时:尽量使用绝对路径,移植性和阅读性更高     



#3.避免多余空格            
a.各种括号前不加空格            
b.逗号、分号或冒号前不加空格            
c.函数调用的参数列表的圆括号的开括号前,text(1)            
d.索引或切片的方括号的开括号前,list[1]           
e.在复制或其他语句的运算符周围,不要为了对齐使用多个空格            
f.算数运算符前后加空格:1 * 3             
g.不在一个关键字参数或一个缺省参数值的 = 前后加一个空格:def text(real, imag=0)            
h.通常不推荐使用复合语句(一行多语句)            
i.if/for/while 块中,执行语句必须另起一行    



#4.注释            
不好理解的注释,不如没有注释。            
如果是一个短语或句子,首字母大写(除标识符),以句号结尾,并且有两个空格            
使用英语注释,因为不同编码或其他等原因,中文容易出现乱码            

a.块注释:在一段代码前增加,以 # 开头跟一个空格。段落以# 的单行分隔                
b.行内注释:与语句间隔两个空格,起始于 #和一个空格
c.文档字符串:对于模块,函数,类和方法进行注释说明,位于def 行之后                
d.版本注记:有Subversion、CVS、RCS等,在块注释后,其他代码之前,前后一个空行  


5.命名风格            
a.大小写字母和下划线组成            
b.首字母大写缩进:所有字符用大写,HTTPServerError            
c.单下划线开始:表示内部使用的方法,不建议修改            
d.单下划线结束:用于避免与Python关键字或方法冲突            
e.双下划线开始:定义类中的属性,不能直接通过类名进行调取,而是类方法获取,或者是类名._类名__属性名进行获取,(一般不推荐使用)            
f.双下划线开始结束:永远不要自定义该类型的方法,用于内部的魔法方法     


6.命名规范            
a.特别注意"l"(小写l)、"I"(大写i)、"1"(数字1)、"0"(数字0),"O"(大写o),不作为单个变量名            
b.模块名:全小写并简短,可以使用下滑线            
c.包名:全小写并简短,不建议下滑线            
d.类名:首字母大写。内部类加上前导下划线            
e.异常名:沿用类名规则并以"Error"为前缀            
f.全局变量名:尽量只在模块内有效。实现为__all__或者是前缀一个下划线            
g.函数名:小写,可用下划线分隔            
h.方法名和实例变量:下划线分隔的小写字母,私有方法和实例变量前用单下划线            i.常量:在模块级别定义,全大写和下划线分隔            
j.类的属性有三种作用域public、non-public与subclass API,类似Java中的public、private、protected。non-public属性前,前缀单下划线            
k.公有属性和保留字冲突时,在属性后加一个下划线,比缩写和拼写好            
l.如果属性不希望被子类继承时,用双下滑先开头,可以进行避免。但需要注意调取时的命名内容,类名._类名__属性名可以调用,或者是子类出现相同的类名和属性名,会有冲突   m.类的实例方法第一参数为self,类方法第一参数为cls    
7.编码建议            
a.编码中考虑其他Python实现效率等问题,比如运算符'+'进行字符串拼接时,在CPython效率高,在Jython中非常低,所以使用.join()的方式            
b.在于None比较时,使用is优于'==',因为在Python中None是固定内存id,所以直接通过is判断效率更高            
c.使用复杂比较实现排序时,应用__eq__,__ne__,.....等效率更高,并且可以通过function.total_ordering()提供生成缺少的比较操作方法            
d.使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception          e.抛出异常使用raise,并且捕获异常时不要单独只有except会捕获SystemExit和KeyboardInterrupt异常,使得难以中断并隐藏其他问题,其后续跟具体的异常类型,以及处理方式
View Code

 

转载于:https://www.cnblogs.com/pdun/p/11097504.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值