1 python中id、is、=、== 分别是比较什么的?
id 查看内存地址,is是比较内存地址是不是相同,=是赋值,==比较的是变量的值
2 说说python的小数据池(了解即可,面试偶尔会问到)。
python中数字。在一定规则范围内,如果同时定义多个相同值的数字类型或字符串类型变量,他们会共用一个内存地址。可以用 is 验证。
数字:范围在 -5~256
小数据池的目的是节省内存空间。
1 alist = [{'name':'alex', 'age':20}, {'name':'luffy', 'age':2}, {'name':'egon', 'age':30}, {'name':'peiqi', 'age':30}, ]
根据alist中的age由大到小进行排序
解法1:
alist.sort(key=lambda x: x['age'], reverse=True)
解法2:
import operator
alist.sort(key=operator.itemgetter('age'), reverse=True)
在python当中如何获取命令行参数?
知识点python的sys模块
import sys
sys.argv # 接收用户输入的命令行参数
int 的使用
num = int('111', 2)
print(num)
# 会报错吗?会请说出理由,不会请给出结果
输出的是7 。不会报错, 因为int 接收两个参数, 第二个参数是进制的意思, 范围在 2-32。
111 会 被当作2进制的数, 转换成十进制的 7
python2中有range和xrange,这两个有什么区别?
py2 中的range 会一次性将数据全部创建出来, xrange 则是一个生成器 会在调用的时候才会输出值 不会一次性创建太多的数据。
如果模块是被导入的__name__的值是什么,如果是被执行的__name__的值又是什么?
请给出答案,时间方便可以可以说明解题过程
------被导入的时候 __name__ 的值是。这个模块的文件名。 被执行时 __name__ == "__main__"
2 请用python实现99乘法表。
for i in range(1, 10):
for j in range(1, i+1):
print("%d * %d = %d" % (i, j, i*j), end=" ")
print()
multi_table = ["%d * %d = %d" % (j, i, i * j) for i in range(1, 10) for j in range(1, i+1)]
1 文件操作中f = open(filename, mode, code),执行写入f.write('hello world'),请问hello world 是写进了文件还是只是存在内存当中?如何使写的内容主动存储到文件中。
f.write时间内容写到计算机的内存中
存储到文件:
f.close()# 文件关闭,会自动将内容从内存存储到文件中
f.flush()# 主动将内容从内存存储到文件中
2 如何调整文件中的指针?
f.seek()
3 说下truncate的作用。
如果指定了 size 则从size处往后都截断清除,不指定size从指针处往后都截断
1 给出最后print的结果
def multipliers():
return [lambda x : i * x for i in range(4)]
print([m(2) for m in multipliers()])
[6,6,6,6]
lambda 不会保存变量的值。 他使用的是 i 变量的一个引用。 i 变量再循环完成之后,指向了 3. 所以 lambda 中的 i 都是 3. 打印时 3*2 都是6.
2 下面代码的执行结果是什么?
num = 5
def func():
num = 10
print('func', num)
def func2():
print('func2', num)
func() # 10
func2() # 5
3 以下代码的执行效率怎么样,会不会慢,慢在哪?
def func(num):
s = 'first'
for i in range(num):
s += 'luffy'
return s
会慢! 因为使用的是 + 拼接字符串。 因为字符串是不可变类型。所以每次拼接都会去申请新的内存空间 来存放新的值。从而导致变慢。
1 一行代码实现1-100的求和,一行代码实现1-100奇数求和,一行代码实现1-100偶数求和。
sum(range(1, 101)),sum(range(1, 101, 2)),sum(range(2, 101, 2))
2 字符串的拼接可以使用+和join完成,两者有什么区别?
字符串属于不可变数据类型,每执行一次+都会申请一块新的内存地址,因此用+号连接的时候,会有多次的内存申请和复制,
而使用join在连接字符串的时候,会先计算需要多大的内存存放结果,然后一次性的申请所需呀的内存,字符串拼接的时候建议使用join
3 python的自省是指的什么?
python的自省是指在程序执行的过程中,能够知道对象的类型。(自动的判断)
1 什么是闭包函数,闭包函数满足什么样的条件?请写一个常见的闭包函数。
闭包函数本质就是函数的嵌套和高阶函数。
1)必须嵌套函数
2)内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
3)外部函数必须返回内嵌函数——必须返回那个内部函数
2 什么是递归函数?在递归函数的使用中要注意什么地方?
递归函数就是自己调用自己。
注意:
1. 递归函数需要明确的有一个 结束的条件。否则就会无限递归 从而超出python最大的递归深度。(sys 模块可修改递归深度,默认是1000)
2. 每次进入一层递归,问题的规模都应该比上一层有所减小。
3. 递归效率不高。 只用于特别的地方。
3 请用递归函数实现10的阶乘:10*9*8*7....*1
def factorial(num): if num <= 1: return 1 return num * factorial(num-1)
1 在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值 的数 li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]
li = [-100, 1, 3, 2, 7, 6, 120, 121, 140, 23, 411, 99, 243, 33, 85, 56] mid = (max(li) + min(li)) / 2 res = abs(li[0] - mid) result = None for i in li: curr_min = abs(i - mid) if curr_min < res: res = curr_min result = i print(result)
2 写一个configparser模块的应用小示例
3 利用random模块写一个6位的随机验证码,验证码内包含字母、数字(随机出现)
s = string.ascii_lowercase + string.digits print(random.sample(s, 6))
1 以下代码执行的结果,如果出现错误请说明错误原因。
def calc(a, b, c, d=1, e=2): return (a+b)*(c-d)+e print(calc(1, 2, 3, 4, 5)) print(calc(1, 2, 3)) print(calc(1, 2)) print(calc(1, 2, 3, e=4)) print(calc(e=4,c=5, a=2, b=3)) print(calc(1, 2, 3, d=5, 4))
2 re模块中,search、match、findall的作用分别是什么?
search 的作用是,找到字符串中符合匹配模式的, 第一个匹配项。 然后就返回结果,不在继续匹配。
match 的作用是, 从字符的开始进行匹配, 如果有符合匹配模式的匹配项就返回,否则就返回 None
findall 的作用是, 从字符串中找到所有的符合匹配模式的匹配项,饭后保存到列表中返回, 否则返回 None
1 python的内置模块有哪些?【不少于10个】。
2 logging模块的作用,以及使用场景,写一个简单的日志模块。可以在其他模块中调用。
3 以下代码执行的结果,并说明理由。
def func(a): print(a) print(b) b=9 # 如果这一行注释了会发生什么?为什么?
b = 6 func(3)
1 subprocess模块的作用是什么?如何使用subprocess执行查看/bin/目录下的存在我文件或者目录
2 一下代码执行的结果是什么?
li = [ [ ] ] * 5 print(li) # output? li[0].append(10) print(li) # output? li[1].append(20) print(li) # output? li.append(30) print(li) # output?
3 用户输入一个时期格式:2019-07-26返回是一年中的第几天?
1 什么是面向对象?相比较于函数编程,面向对象有什么优点?
2 什么是类、属性、方法、实例(对象)、实例化?
3 面向对象的特点是什么?
1 python为类内置的特殊属性,假设类名为People,说一下下面这些特殊属性的作用。
People.__dict__
People.__module__
People.__doc__
2 python的类中有哪两种属性,分别是什么?不同的属性分别是属于谁?
3 编写一个学生类,产生一堆学生对象,要求有一个计数器【属性】,统计一共实例了多少对象。
Class Student(object):
count = 0 # 计数器
def __init__(self,):
Student.count += 1
# 未完成 以后再说
1 类的属性和对象属性有什么区别?
类属性 在类定义的阶段就会, 添加到类的名称空间中。 并且是所有对象共享的。 (如果没有进行私有化的话)。
对象属性是类中 函数自己的名称空间中的属性, 只有对象才可以访问到。 类本身无法进行访问。
2 类和对象在内存中是如何保存的?
3 什么是绑定到对象的方法、绑定到类的方法、非绑定方法,这些方法有什么特点?
@classmethod 绑定到类的方法。 类进行访问时,可自动传值。
1 python中的经典类和新式类有什么区别?
在python 2中,加不加括号,都是表示经典的类,而如果括号里指明继承object,则为新式类。
python 3中,不管加不加括号,不管指不指明继承object,都是新式类。 新式类和经典类最大的不同也在这里, 新式类必须要有一个继承。
经典类和新式类的区别就在于,一个是深度优先查, 一个是 广度优先的查询。
经典类遵循深度优先的法则进行,属性和方法的查询。 新式类 遵循广度优先的法则进行属性和方法的查询。
可以使用 类名.mro() 来查看,当前这个类的(Method resolution Order) 方法解析顺序。
2 以下代码经典类和新式类的继承顺序是什么?
class A(object):
def test(self):
print('from A')
class B(A):
def test(self):
print('from B')
class C(A):
def test(self):
print('from C')
class D(B):
def test(self):
print('from D')
class E(C):
def test(self):
print('from E')
class F(D,E):
# def test(self):
# print('from F')
pass
3 在面向对象中如何把属性变成私有属性?私有属性的意义是什么?
1 Python中staticmethod,和classmethod的作用是什么?
2 以下代码有何问题,应该如何纠正?@property的作用是什么?
class Dog(object):
def __init__(self,name):
self.name = name
@property
def eat(self):
print(" %s is eating" %self.name)
d = Dog("dog")
d.eat()
1 在元类中控制把自定义类的数据属性都编程大写。
2 在类中,参数self是否可以替换成其他的变量?
3 __slots__属性的作用是什么?
1 以下代码的运行结果?
class Dog:
__slots__ = ('name')
def __init__(self, name):
self.name = name
def test(self):
print('预先定义的test方法')
d = Dog('Snoopy')
d.age = 5
2 enumerate函数的用法如下,请用python实现enumerrate函数。
li = ['a', 'b', 'c', 'd']
for index, item in enumerate(li):
print(index, item)
输出结果:
0 a
1 b
2 c
3 d
1 在python中in操作 对于list, set, tuple, dict 效率如何?简要说明下。
2 模仿王者荣耀定义两个英雄类
要求:
英雄需要有昵称、攻击力、生命值等属性;
实例化出两个英雄对象;
英雄之间可以互殴,被殴打的一方掉血
1 python中异常处理的作用是什么?什么是万能异常?如何在一段代码上加万能异常?
2 以下代码执行的结果,报错请说明原因?
class Func:
def __init__(self, name):
self.name = name
def name(self):
print("hello world!")
f = Func('alex')
ret = hasattr(f, 'name')
print(ret)
fun = getattr(f, 'name')
fun()
1 如何让类多次实例化的时候只有一个实例?
1 如何让类多次实例化的时候只有一个实例?
一个类多次实例化只获得一个实例,这是一种设计模式(单例)。
单例模式保证了在程序的不同位置都 可以且仅可以取到同一个对象实例 :如果实例不存在,会创建一个实例;如果已存在就会返回这个实例。因为单例是一个类,所以你也可以为其提供相应的操作方法,以便于对这个实例进行管理。
简单的装饰器版本,进攻参考
def singleton(cls):
_instance = {}
def inner(*args, **kwargs):
if cls not in _instance:
_instance[cls] = cls(*args, **kwargs)
return _instance[cls]
return inner
@singleton
class Cls(object):
def __init__(self):
pass
cls1 = Cls()
cls2 = Cls()
print(id(cls1) == id(cls2))
2 用两个队列实现一个栈。
后进先出:后放进去先拿出来。
class Stock:
def __init__(self):
self.queueA=[]
self.queueB=[]
def push(self, node):
self.queueA.append(node)
def pop(self):
if len(self.queueA)==0:
return None
while len(self.queueA)!=1:
self.queueB.append(self.queueA.pop(0))
self.queueA,self.queueB=self.queueB,self.queueA #交换是为了下一次的pop
return self.queueB.pop()
测试一下是否成功实现了栈
if __name__=='__main__':
times=5
testList=list(range(times))
testStock=Stock()
for i in range(times):
testStock.push(testList[i])
print(testList)
for i in range(times):
print(testStock.pop(),',',end='')
1 什么是计算机网络?计算机网络的作用是什么?
2 OSI七层模型分别是什么,请简要说明每一层的作用?