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转发机制来实现函数
原文地址:https://www.cnblogs.com/yinyitianya/p/11819932.html