Python常见面试题
1.下面代码输出结果是一样吗?
import copy a = ('a','b','c') b=a c=copy.copy(a) d=copy.deepcopy(a)
print(id(b))
print(id(c))
print(id(d))
一样,因为a为不可变对象,对于不可变数据类型,内存中只能有一个相同值的对象.如果a是可变对象,则代码输出的都不一样
可变数据类型:列表list和字典dict
不可变数据类型:整型int、浮点型float、字符串型string和元组tuple
2.请实现:@runtime效果为当调用student_run时会自动打印当前时间
@runtime def student_run(name): print("student"+name+"run") student_run("张三"")
实现代码
import time def runtime(function): def get_run_time(): print(time.time()) function() return get_now_time
3.请根据列表list1=[1,2,3,4,5,6,7,8,9],使用一行代码生辰给一个新的列表list2,list2中每个元素是list1中的平方
#方法一 lambda表达式 list2 = list(map(lambda x : x*x,list1)) #方法二 列表推导式 list2=[x*x for x in list1]
4.用python实现冒泡算法
def bubble_sort(list): length=len(list) for i in range(0,length): for j in range(i+1,length): if list(i) >list(j): list(i),list(j)=list(j),list(i) return list
5.用python实现快排
def quicksort(array): if len(array) < 2: return array else: pivot = array[0] #找到一个基准值 #遍历整个列表,将小于这个基准值的元素放到一个子列表中 less = [i for i in array[1:] if i < pivot] #遍历整个列表,将大于这个基准值的元素放到一个子列表中 greater = [i for i in array[1:] if i>pivot] #首先,明确我们对元素为0个/1个的列表无需要排序 #使用函数递归 #目标:让我们在一个基准值的一侧变为有序,然后依次返回,让我们的每个基准值的两侧都变得有序 return quicksort(less)+[pivot]+quicksort(greater) #这是一些测试样例 print(quicksort([2,5,3,9,7,11])) print(quicksort([152,134,38796,7438415,1,2272,34345,24,127]))
6.python中的私有变量能访问吗,如果能访问,如何访问?
可以访问,通过__类名__变量名访问
7.python中的类有多少方法种类,他们的区别是什么?
- 实例方法 必传参数self,只有实例可以操作的方法,可以操作实例变量
- 类方法 必传参数cls,需要添加@classmethod,类可以直接调用,可以操作类变量,
- 静态方法 脱离类而存在的,既不能操作类变量,也不能操作实例变量
8.python是静态还是动态类型?是强类型还是弱类型?
动态强类型语言
- 动态还是静态指的是编译器还是运行期确定类型
- 强类型指的是不会发生隐式转换(如 print(1+"1")就会报错,而php等弱类型就会自动转换)
9.单例模式
#方法一 装饰器 def Singleton(cls): _instance={} def _singleton(*args,**kwargs): if cls not in _instance: _instance[cls]= cls(*args,**kwargs) return _instance[cls] return _singleton