【今天有坑】如有更有的解答,欢迎一起交流进步。
开放性题目
- 简述解释型和编译型编程语言
1)解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。
2)用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,
3)部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
- 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的字节码。
- b、B、KB、MB、GB 的关系
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
- 机器码和字节码的区别
1)机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据
2)字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
- 列举布尔值为False的常见值
1、None;
2、False;
3、任何为0的数字类型,如:0,0.0,0j;
4、任何空序列,如:’’,(),[];
5、任何空字典,例如:{};
- pass的作用
1)pass是空语句,是为了保持程序结构的完整性。
2)pass 不做任何事情,一般用做占位语句。
- arg和**kwarg作用
1)定义函数时:
arg会把多出来的位置参数转化为tuple
kwarg会把关键字参数转化为dict
2)调用函数时:
*arg会把序列参数解包
kwarg会把dict转化为关键字参数形式
- lambda表达式格式以及应用场景
表达式格式:lambda arg1,arg2….argN:expression using args
一般是在def不能出现的地方,例如列表常量或者函数调用的参数中
- is和==的区别
is: 判断是否是同一个对象
==: 判断是否值相等
- 简述Python的深浅拷贝以及应用场景
1)浅拷贝:会新开辟一片空间存储,但只进行表层的复制,如果存在嵌套的话,当嵌套数据改变时,两边数据同时跟着发生变化,因为只是进行了地址引用.
2)深拷贝:也会开辟一片空间进行存储,但会进行彻底的递归复制,源数据的变化不会影响新复制的数据.
代码题
- 写出以下代码的输出结果
提示:考察列表与字典等可变类型数据的引用特性
v = dict.fromkeys([‘k1’,‘k2’],[])
v[‘k1’].append(666)
print(v) # {‘k1’: [666], ‘k2’: [666]}
v[‘k1’] = 777
print(v) # {‘k1’: [777, ‘k2’: [666]}
- 用一行代码实现数值交换
提示:组包拆包
a = 1
b = 2
# (a, b) = (b, a)
- 用一行代码实现输出九九乘法表
提示:循环与字符串拼接处理
print(‘\n’.join((‘\t’.join([“%d%d=%d” % (x, y, x y) for y in range(1, x + 1)]) for x in range(1, 10))))
- 写出以下代码的输出结果
提示:注意关键字参数的坑.在参数的默认值中检测到可变值作为列表或字典,默认参数值仅在函数定义时计算一次,这意味着修改参数的默认值将影响函数的所有后续调用
def Foo(a, b=[]):
b.append(a)
print(a, b)
Foo(6) # 6 [6]
Foo(6) # 6 [6, 6]
Foo(6) # 6 [6, 6, 6]
- 写出以下代码的输出结果
提示:有大坑
def num():
return [lambda y:x*y for x in range(6)]
print([m(3) for m in num()])
# [15, 15, 15, 15, 15, 15]