1.为什么学习Python?
2.通过什么途径学习的Python?
3.Python和Java、PHP、C、C#、C++等其他语言的对比?
是一种面向对象、直译式计算机程序设计语言,Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。
4.简述解释型和编译型编程语言?
概念:
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!区别:
编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。
解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.
通俗的讲,编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。
5.Python解释器种类以及特点?
CPython
由C语言开发的 使用最广的解释器,在命名行下运行python,就是启动CPython解释器.
IPython
基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样
PyPy
目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率
JPython
运行在Java上的解释器 直接把python代码编译成Java字节码执行
IronPython
在微软 .NET 平台上的解释器,把python编译成. NET 的字节码
6.位和字节的关系?
位:我们常说的bit,位就是传说中提到的计算机中的最小数据单位:说白了就是0或者1;计算机内存中的存储都是01这两个东西。
字节:英文单词:(byte),byte是存储空间的基本计量单位。1byte
存1个英文字母,2个byte存一个汉字。规定上是1个字节等于8个比特(1Byte = 8bit)。
7.b、B、KB、MB、GB 的关系?
b 比特bit / 位
B——字节
KB——千比特
MB——兆比特
GB——吉比特
1 B = 8b (8个bit/ 位) 一个字节(byte)等于8位(bit)
1 kB = 1024 B (kB - kilobajt)
1 MB = 1024 kB (MB - megabajt)
1 GB = 1024 MB (GB - gigabajt)
bit就是位,也是b,也叫比特位,是计算机表示数据最小的单位
byte就是字节,1byte就是1B,一个字符=2字节
8.请至少列举5个 PEP8 规范(越多越好)。
1.变量命名规则:
不能与关键字重名,必须以数字字母下划线组成,且不能以数字开头
2.导包规则:
# 推荐这样写
import random
import sys
# 不推荐这样写
import random, sys
# 一行多个包可以这样写。
from random import random, randint
3.缩进
每一级使用四个空格缩进,要么都是用空格,要么都是用tab键,不要空格和tab键混用
4.每行最大字符限时为79个,除了长导包语句,和url地址
5.多个变量,之间使用逗号分隔,逗号与前变量相邻,与后变量之间空一格。
9.通过代码实现如下转换:
int(v,2)
bin(v)
int(v,8)
oct(v)
int(v,16)
hex(v)
10.请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
def ipfunc(ip):
a = ip.split('.')
s = ''
l = []
for i in a:
#v = “0b1111011” 将十进制转换为二进制、去掉前面默认的0b,
i = bin(int(i))[2:]
#自动补8位,没有的用0代替
i = i.rjust(8, '0')
#加入新的列表中
l.append(i)
#最后拼接到一个新的字符串
s = s.join(l)
print(s)
#00001010000000110000100100001100
print(int(s,2))
#167971084,二进制转十进制
ipfunc("10.3.9.12")
11.python递归的最大层数?
import sys
def test():
#获取python递归的最大层数
s=sys.getrecursionlimit()
#输出结果1000
print(s)
#设置python递归的最大层数
sys.setrecursionlimit(800)
s2 = sys.getrecursionlimit()
# 输出结果是800
print(s2)
test()
12.求计算结果?
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 3 and 2
v4 = 0 and 3 or 2
v5 = 0 and 3 or 2 or 4
v6 = 0 or False and 1
print(v1) #结果:1
print(v2) #结果:3
print(v3) #结果:0
print(v4) #结果:2
print(v5) #结果:2
print(v6) #结果:False
13.ascii、unicode、utf-8、gdk的区别?
- ASCII码使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。
- Unicode能够表示全世界所有的字节
- GBK是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。
- UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC
3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
14.字节码和机器码的区别?
- 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据。
通常意义上来理解的话,机器码就是计算机可以直接执行,并且执行速度最快的代码。- 字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。
通常情况下它是已经经过编译,但与特定机器码无关。字节码通常不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列。总结:字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
15.三元运算规则及运用场景?
三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值格式
a = 6 if True else 5
#结果:6
print(a)
16.列举pyhton2和python3的区别?
print
py2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印
py3:print函数,函数就以为这必须要加上括号才能调用,如果接元组对象,可以接收多个位置参数,并可以打印
如果希望在 Python2 中 把 print 当函数使用,那么可以导入 future 模块 中的 print_function
py2:input_raw()
py3:input()
在使用super()的不同
py2:必须显示的在参数中写上基类
py:直接无参数调用即可
1/2的结果
py2:返回0
py3:返回0.5,没有了int和long的区别
编码
py2:默认编码ascii
py3:默认编码utf-8
而且为了在py2中使用中文,在头部引入coding声明,不推荐使用
字符串
py2:unicode类型表示字符串序列,str类型表示字节序列
py3::str类型表示字符串序列,byte类型表示字节序列
True和False
py2:True 和 False 在 Python2 中是两个全局变量,可以为其赋值或者进行别的操作,初始数值分别为1和0,虽然修改是违背了python设计的原则,但是确实可以更改
py3:修正了这个变量,让True或False不可变
迭代器
py2:当中许多返回列表的方法,如range,字典对象的 dict.keys()、dict.values() 方法, map、filter、zip;并且迭代器必须实现next方法
py3:将返回列表的方法改为了返回迭代器对象,内置了__next__,不用特意去实现next
nonlocal
py2:没有办法在嵌套函数中将变量声明为一个非局部变量,只能在函数中声明全局变量
py3:nonlocal方法实现了,示例如下:
def func():
c = 1
def foo():
c = 12
foo()
print(c)
func() #1
def func():
c = 1
def foo():
nonlocal c
c = 12
foo()
print(c)
func() # 12
17.用一行代码实现数值交换?
a=1
b=2
a = 1
b = 2
#字符串也是可以的
a,b = b,a
print(a)
print(b)
18.python3和python2中int 和long的区别?
19.xrange和range的区别?
两种用法介绍如下:
1.range([start], stop[, step]) 返回等差数列。构建等差数列,起点是start,终点是stop,但不包含stop,公差是step。
start和step是可选项,没给出start时,从0开始;没给出step时,默认公差为1。 例如:
复制代码
>>> range(10) #起点是0,终点是10,但是不包括10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10) #起点是1,终点是10,但是不包括10
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10,2) #起点是1,终点是10,步长为2
[1, 3, 5, 7, 9]
>>> range(0,-10,-1) #起点是1,终点是10,步长为-1
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0,-10,1) #起点是0,终点是-10,终点为负数时,步长只能为负数,否则返回空
[]
>>> range(0) #起点是0,返回空列表
[]
>>> range(1,0) #起点大于终点,返回空列表
[]
复制代码
2.xrange([start], stop[, step]) xrange与range类似,只是返回的是一个"xrange object"对象,而非数组list。
要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
例如:
复制代码
>>> lst = xrange(1,10)
>>> lst
xrange(1, 10)
>>> type(lst)
<type 'xrange'>
>>> list(lst)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码
区别如下:
1.range和xrange都是在循环中使用,输出结果一样。
2.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。
补充点:
复制代码
#以下三种形式的range,输出结果相同。
>>> lst = range(10)
>>> lst2 = list(range(10))
>>> lst3 = [x for x in range(10)]
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst3
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst == lst2 and lst2 == lst3
True
复制代码
注意:Python 3.x已经去掉xrange,全部用range代替。
20.文件操作时,xreadlines和readlines的区别?