当前位置: 首页 > 后端技术 > Python

大厂常考的Top10Python面试题:你掌握了多少?

时间:2023-03-26 18:14:18 Python

问题一:Python中的列表和元组有什么区别?列表是可变对象,元组是不可变对象。也就是说,列表中的元素可以任意修改,但元组中的元素不能修改。问题2:Python数组和列表有什么区别?Python中的数组和列表存储数据的方式相同。但是,数组只能包含单个数据类型元素,而列表可以包含任何数据类型元素。问题三:Python中的append和extend有什么区别?append()在列表末尾追加一个新元素,列表只占用一个索引位置,并添加到原列表中extend()在列表末尾追加一个列表,追加列表中的每个元素,并添加原清单4的一个问题:Python中==和is的区别is是用来判断两个变量引用对象是否相同,==用来判断引用变量的值是否相同是平等的。问题5:谈谈不可变类型(字符串、数值类型、布尔值)的Python深拷贝:浅拷贝和深拷贝一样,对象的引用(内存地址)没有变。对于可变对象(列表、字典、集合):复制浅拷贝时,只会复制一层,并在内存中开辟一块空间存放复制的列表。更深层次没有副本,即第二层使用相同的内存;深拷贝的时候会一层层拷贝,遇到可变类型就开辟一块内存往下拷贝,遇到不可变类型就继续使用之前的引用。因为不可变数据的修改会开辟一个新的空间,深拷贝数据之间的修改不会互相影响。总结如下:浅拷贝耗时少,占用内存少,只拷贝顶层数据,拷贝效率高。在拷贝不可变对象时,浅拷贝和深拷贝的作用是一样的,都没有开辟新的空间,相当于一个赋值操作。当一个可变对象被浅拷贝时,只有第一层的引用被拷贝。如果元素是一个可变对象并且被修改,复制的对象也会改变。对一个变量对象进行深拷贝时,会逐层拷贝。当遇到一个变量类型时,它会开辟一块内存并进行复制。元组是异构的。元组是否是可变对象取决于元组中的元素。如果元组及其后代中的每个元素都不包含可变对象,则该元组是不可变对象。如果元组的元素及其后代包含可变对象,则元组是可变对象。问题六:区分break、continue和pass?break:跳出循环,不执行下一个循环。同时,break后面的代码也不会执行。pass:pass后面的代码仍然会继续执行,即当前循环还在继续。continue:continue之后的代码不会执行,直接进入下一个循环。问题七:Python中什么是局部变量和全局变量?全局变量:在函数外部或全局空间中声明的变量称为全局变量。这些变量可以被程序中的任何函数访问。局部变量:在函数内部声明的任何变量都称为局部变量。这个变量存在于本地空间,而不是全局空间。问题8:python中range和xrange有什么区别?在大多数情况下,xrange和range在功能上是相同的。它们都提供了一种生成整数列表的方法,唯一的区别是range返回一个Python列表对象,而xrange返回一个xrange对象。这意味着xrange在运行时实际上并不生成静态列表。它使用一种称为屈服的特殊技术按需创造价值。该技术适用于一种称为生成器的对象。所以如果你有一个非常大的列表,考虑xrange。问题9:什么是python装饰器?装饰器本质上是一个Python函数,它允许其他函数在不更改任何代码的情况下添加额外的功能。装饰器的返回值也是一个函数对象。常用于有横切需求的场景,如:插入日志、性能测试、事务处理、缓存、权限验证等场景。问题10:告诉我有关python迭代器和生成器的信息?介绍python生成器需要介绍可迭代对象和迭代器。可迭代对象(IterableObject),简单理解就是可以使用for循环遍历的对象。比如常见的list、set、dict。可迭代对象有一个返回迭代器的__iter__方法,或者定义了一个getitem方法,可以通过索引索引对象(如果没有值可以抛出IndexError异常),所以可迭代对象能够通过它得到一个迭代器对象.因此,可迭代对象可以通过调用内置的iter()方法返回一个迭代器。生成器实际上是一种特殊的迭代器,但这种迭代器更加优雅。它不再需要像上面的类那样写__iter__()和__next__()方法,只需要一个yield关键字。