第一部分 Python基础篇(80题)
1、为什么学习Python?
python入门简单。
Python编写代码的速度非常的快,而且非常注重代码的可读性,非常适合多人参与的项目。
Python支持多平台开发,用它编写的代码可以不经过任何转换就能在Linux与Windows系统任何移植,在苹果OS系统也没有任何兼容性的问题。
2、通过什么途径学习的Python?
自己看书,网上查资料。查看网上的授课视频
3、Python和Java、PHP、C、C#、C++等其他语言的对比?
python是一种解释型语言,python是完全面向对象的语言,完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。胶水语言
4、简述解释型和编译型编程语言?
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!
编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。
5、Python解释器种类以及特点?
CPython 使用最广的Python解释器。
IPython 是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强
PyPy 显著提高Python代码的执行速度。
Jython 是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython 是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
6、位和字节的关系?
1byte=8bit
最小的存储单位称为位(bit
7、b、B、KB、MB、GB 的关系?
1TB=1024GB,
1GB=1024MB;
1MB=1024KB;
1KB=1024B;
1B=8bit
8、请至少列举5个 PEP8 规范(越多越好)。
缩进 每级缩进用4个空格
最大行宽 限制所有行的最大行宽为79字符。
空行 两行空行分割顶层函数和类的定义
导入 导入在单独行
表达式和语句的空格 , 括号里边避免空格 逗号,冒号,分号之前避免空格
``````
9、通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
>>> v='0b1111011'
>>> print(int(v,2))
123
十进制转换成二进制:v = 18
>>> v=18
>>> print(bin(v))
0b10010
八进制转换成十进制:v = “011”
>>> v = "011"
>>> print(int(v,8))
9
十进制转换成八进制:v = 30
>>> v=30
>>> print(oct(v))
0o36
十六进制转换成十进制:v = “0x12”
>>> v = "0x12"
>>> print(int(v,16))
18
十进制转换成十六进制:v = 87
>>> v=87
>>> print(hex(v))
0x57
10、请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
11、python递归的最大层数?
理论上是1000左右
12、求结果:
v1 =1or3
v2 =1and3
v3 =0and2and1
v4 =0and2or1
v5 =0and2or1or4
v6 =0orFlaseand1
13、ascii、unicode、utf-8、gbk 区别?
ASCII码 使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。
Unicode 能够表示全世界所有的字节
GBK 是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。
UTF-8 是一种针对Unicode的可变长度字符编码,又称万国码
14、字节码和机器码的区别?
机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。
字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
15、三元运算规则以及应用场景?
三元操作符是if-else的简化写法
16、列举 Python2和Python3的区别?
简单的说,2是旧3是新,3是2的升级版,3完全高于2,2是时代的眼泪3是现在和未来,2逐渐被淘汰3用的人越来越多
输入函数
py2:input_raw()
py3:input()
1/2的结果
py2:返回0
py3:返回0.5,没有了int和long的区别
编码
py2:默认编码ascii
py3:默认编码utf-8
。。。。。。。。
17、用一行代码实现数值交换:
a = 1
b = 2
a,b=b,a
18、Python3和Python2中 int 和 long的区别?
python2有非浮点数准备的int和long类型。int类型最大值不能超过sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。在python3里,只有一种整数类型int,大多数情况下,和python2中的长整型类似。
19、xrange和range的区别?
xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。
20、文件操作时:xreadlines和readlines的区别?
readlines() 读取文件所有内容,按行为单位放到一个列表中,返回list类型。
xreadlines()返回一个生成器,来循环操作文件的每一行。循环使用时和readlines基本一样,但是直接打印就不同
21、列举布尔值为False的常见值?
值为0的数
空列表
空字符串
空元组
空字典
22、字符串、列表、元组、字典每个常用的5个方法?
字符串:find 查找是否存在;count 统计;split 切片;upper 小写转大写;lower 大写转小写
列表:len 长度 ;append 新增;remove 删除;sort 排序;in 判断
元组:元组与列表类似,不同之处在于元组的元素不能 修改。 元组使用小括号,列表使用方括号。元组的功能 = 列表不 修改的功能
字典:字典.pop(键) 根据键,删除指定的值,并将此值返回;字典.clear() 清空字典里的键值对; 键 in 字典 如果键在字典中存在,返回True否则,返回 False; 字典.get(键,[默认值]) 通过dict提供的get方法,如果key不存在,可 以返回None,或者自己指定的值; len(字典) 计算字典元素个数,即键的总数
23、lambda表达式格式以及应用场景?
代替一些简单的函数,使得代码看上去更简洁并且可读性高
f = lambda x:pow(x,2)
f(2)
24、pass的作用?
1,空语句 do nothing
2,保证格式完整
3,保证语义完整
25、*arg和**kwarg作用
允许我们在调用函数的时候传入多个实参
26、is和==的区别
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
27、简述Python的深浅拷贝以及应用场景?
导入模块:import copy
浅拷贝:copy.copy
深拷贝:copy.deepcopy
字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。
28、Python垃圾回收机制?
引用计数:当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。
标记-清除:1. 寻找跟对象(root object)的集合作为垃圾检测动作的起点,跟对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的;2. 从root object集合出发,沿着root object集合中的每一个引用,如果能够到达某个对象,则说明这个对象是可达的,那么就不会被删除,这个过程就是垃圾检测阶段;3. 当检测阶段结束以后,所有的对象就分成可达和不可达两部分,所有的可达对象都进行保留,其它的不可达对象所占用的内存将会被回收,这就是垃圾回收阶段。(底层采用的是链表将这些集合的对象连接在一起)
分代回收:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,Python默认定义了三代对象集合,垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。
29、Python的可变类型和不可变类型?
Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。
30、求结果:
v = dict.fromkeys(['k1','k2'],[])
v[‘k1’].append(666)
print(v)
{'k2': [666], 'k1': [666]}
v[‘k1’] =777
print(v)
{'k2': [666], 'k1': 777}
31、求结果:
32、列举常见的内置函数?
abs() 函数返回数字的绝对值。
bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。
dict() 函数用于创建一个字典。
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
33、filter、map、reduce的作用?
filter,迭代器,把符合要求的值列出来
map,把对参数的操作就过列出来
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
34、一行代码实现9*9乘法表
print('\n'.join([''.join(['%s*%s=%-2s'% (y,x,x*y)foryinrange(1,x+1)])forxinrange(1,10)]))
35、如何安装第三方模块?以及用过哪些第三方模块?
pip install 模块名 pymysql unidecode,ascii和Unicode文本转换函数。
36、至少列举8个常用模块都有那些?
time; datetime; random; os; pickle; sys; hashlib; re
37、re的match和search区别?
match()函数只检测RE是不是在string的开始位置匹配,
search()会扫描整个string查找匹配;
38、什么是正则的贪婪匹配?
正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配
39、求结果:
a. [ i % 2 for i in range(10) ] ======》[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
b. ( i % 2 for i in range(10) ) ====== 》 一个迭代器对象
40、求结果:
a. 1 or 2 ===========》1
b. 1 and 2 =============》 2
c. 1 < (2==2) ========》 False
d. 1 < 2 == 2 =========》True
41、def func(a,b=[]) 这种写法有什么坑?
函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储
42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?
43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
a=['1','2','3']
[ int(i) for i in a]
44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
a = [1,2,3]就是一个普通列表
b = [(1),(2),(3) ]
b = [(1,),(2,),(3,) ] 包含一个个元组的列表
45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
[ i*i for i in range(1,11)]
46、一行代码实现删除列表中重复的值 ?
list(set([列表]))
47、如何在函数中设置一个全局变量 ?
在一个函数中用global声明一个变量
48、logging模块的作用?以及应用场景?
记录程序运行情况的日志功能.
用户登录
49、请用代码简答实现stack 。
class Stack(object):
def__init__(self):
self.stack = []
defpush(self, value):# 进栈 self.stack.append(value)
defpop(self):#出栈if self.stack:
self.stack.pop()
else:
raiseLookupError(‘stack is empty!‘)
defis_empty(self):# 如果栈为空return bool(self.stack)
def top(self):
#取出目前stack中最新的元素returnself.stack[-1]
50、常用字符串格式化哪几种?
print('hello %s and %s'%(df,another df))
print('hello {} and {}'.format{df,another df})
51、简述 生成器、迭代器、可迭代对象 以及应用场景?
生成器:一边循环一边计算的机制。应用场景:不想同一时间将所有计算出来的大量结果集分配到内存当中
迭代器:可以被 next() 函数调用并不断返回下一个值的对象
可迭代对象:能作用于 for 循环的都是 可迭代对象
52、用Python实现一个二分查找的函数。
53、谈谈你对闭包的理解?
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
54、os和sys模块的作用?
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
55、如何生成一个随机数?
import random
random.randint(1,99)
56、如何使用python删除一个文件?
import os
os.remove(path)
57、谈谈你对面向对象的理解?
具有三大特性:封装,继承和多态。
将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性
58、Python面向对象中的继承有什么特点?
子类继承父类,提高代码的重用性
59、面向对象深度优先和广度优先是什么?
60、面向对象中super的作用?
是用来解决多重继承问题
61、是否使用过functools中的函数?其作用是什么?
62、列举面向对象中带爽下划线的特殊方法,如:__new__、__init__
__str__(self方法):str方法中含有什么,则return什么东西,print(对象)就返回什么东西
__dic__ :获取对象中封装的所有字段,用__dic__可以取到,并存放在字段中
__add__(self, other):对象相加直接执行
63、如何判断是函数还是方法?
函数是封装了一些独立的功能,可以直接调用
方法和函数类似,同样封装了独立的功能,但是方法是需要通过对象来调用的,表示针对这个对象要做的操作,使用时采用点方法
64、静态方法和类方法区别?
静态方法就是一个普通的方法,与类和对象无关
类方法就是JAVA里面的类方法,属于类,被各个对象共享
65、列举面向对象中的特殊成员以及应用场景
__doc__ 描述类的信息
__call__ 对象后面加括号,触发执行
__dict__ 查看类或对象中的所有成员
66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数
list1 = []
for a in range(1,6):
for b in range(1,6):
for c in range(1,6):
if a!=b and a!=c and b!=c:
list1.append(a+b+c)
print(len(list1))=============》60
67、什么是反射?以及应用场景?
68、metaclass作用?以及应用场景?
69、用尽量多的方法实现单例模式。
70、装饰器的写法以及应用场景。
71、异常处理写法以及如何主动跑出异常(应用场景)
72、什么是面向对象的mro
73、isinstance作用以及应用场景?
74、写代码并实现:
Given an arrayofintegers,returnindicesofthe two numbers such that they add up to a specific target.You may assume that each input would
have exactly one solution,andyou maynotuse the same element twice.
Example:
Given nums = [2,7,11,15], target =9,
Because nums[0] + nums[1] =2+7=9,
return[0,1]
75、json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
76、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
77、什么是断言?应用场景?
78、有用过with statement吗?它的好处是什么?
79、使用代码实现查看列举目录下的所有文件。
80、简述 yield和yield from关键字。
CPython
>>> v=18
>>> print(bin(v))
0b10010
*arg和**kwarg作用
filter,迭代器,把符合要求的值列出来
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口