python面试题
1.字典安装value值进行排序
d = {'a': 24, 'g': 52, 'i': 12, 'k': 33} a = sorted(d.items(), key=lambda x: x[1], reverse=True)
2.反转字符串
1 b = "ab12cd345g" 2 3 # 方法1使用字符串切片 4 c = b[::-1] 5 print(c) 6 # 方法2使用列表的reverse方法 7 d = list(b) 8 d.reverse() 9 d = "".join(d) 10 print(d) 11 # 方法3.使用reduce 12 e = reduce(lambda x, y: y + x, b) 13 print(e) 14 15 16 # 方法4.使用递归 17 def funcg(s): 18 if len(s) < 1: 19 return s 20 return funcg(s[1:]) + s[0] 21 22 23 f = funcg(b) 24 print(f) 25 26 27 # 方法5使用栈 28 def funcz(s): 29 l = list(s) 30 result = "" 31 while len(l) > 0: 32 result += l.pop() 33 return result 34 35 36 g = funcz(b) 37 print(g) 38 39 40 # 方法6 for循环 41 42 def funf(s): 43 result = "" 44 max_index = len(s) - 1 45 for index, value in enumerate(s): 46 result += s[max_index - index] 47 return result 48 49 50 h = funf(b) 51 print(h)
3 .is和==的区别
is用来判断两个对象是否指向同一个地址空间,==用来判断同一类型的对象的值是否相等
1 x = y = [4, 5, 6] 2 z = [4, 5, 6] 3 print(id(x)) 4 print(id(y)) 5 print(id(z)) 6 print(type(x)) 7 print(type(y)) 8 print(type(z)) 9 print(x == y) 10 print(x == z) 11 print(x is y) 12 print(x is z)
4.python删除一个列表中的重复数据
1 a = [1, 2, 3, 5, 4, 6, 1, 2, 3] 2 3 #方法1直接set去重 4 b = list(set(a)) 5 print(b) 6 7 #方法2循环去重 8 new_list = [] 9 while a: 10 b = a.pop() 11 if b not in new_list: 12 new_list.append(b) 13 print(new_list)
5 判断代码的输出结果
解注参考https://segmentfault.com/a/1190000016577391
1 def multi(): 2 return [lambda x: x * i for i in range(4)] 3 4 5 print([m(3) for m in multi()]) 6 7 #[9, 9, 9, 9]
6 python中类方法、类实例方法、静态方法有何区别
实例方法
定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:只能由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
调用:实例对象和类对象都可以调用。
静态方法
定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
调用:实例对象和类对象都可以调用。
7 python中如何动态获取和设置对象的属性
dir([obj]): 调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。 hasattr(obj, attr): 这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。 getattr(obj, attr): 调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为’bar’,则返回obj.bar。 setattr(obj, attr, val): 调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为’bar’,则相当于obj.bar = val
obj.__dict__:
查看当前对象有哪些方法和属性
8 python重载机制
Python是动态类型语言,不需要声明变量类型,函数中可以接受任何类型的参数也就无法根据参数类型来支持重载,
python没有必要去考虑参数的类型问题,这些都可以在函数内部判断处理,并无必要去在写一个函数。
python 有多种传参方式,默认参数/可变参数/可变关键字参数可以处理函数参数中参数可变的问题,
在python可以通过singledispatch转发机制来实现函数