Python常见面试题

Python常见面试题,第1张

1.文件操作时,readlines()和xreadlines()的区别?

readlines()是把文件的全部内容读到内存,并解析成一个list,当文件很大的时候,需要占用很多内存。

xreadlines()则是直接返回一个iter(file)迭代器,在Python2.3之后已经不再推荐使用这种表示方法了,直接使用for循环迭代文件对象。

2.列举布尔值为False的常见值?

0,[],(),{},'',False,None

3. is和==的区别?

is比较的是内存ID

== 比较的是值

🌟4.现有字典dict={'a':24, 'g':52, 'i':12, 'k':33}请按字典中的value值进行排序

sorted(d.items(), key=lambda x:x[1])

lambda函数解释:

示例:

g = lambda x: x+1  # 求 x+1 的和

结果:

>>> g(1)
2
>>> g(2)
3

lambda可以理解为这样一个函数:

def g(x):
	return x+1

🌟5.请反转字符串“aStr”

print("aStr"[::-1])

🌟6.请按list1中元素的age由大到小排序

list1 = [{'name':'a',  'age':20}, {'name':'b', 'age':30}, {'name':'c', 'age':25}]

sorted(list1, key=lambda x:x['age'], reverse=True)

7.常用的字符串格式化哪几种?

name = '张三'

🌟1) 占位符

s1 = "%s DSB 你好"%name

🌟2) format

s2 = '{} DSB 你好'.format(name)

3) f-string (python3.6之后才有的特性)

s3 = f'{name} DSB 你好'

8.下面代码的输出结果将是什么?

list = ['a', 'b', 'c', 'd', 'e']

print(list[10:])

代码的输出结果将是:[],不会产生IndexError错误。

但是,如果尝试使用超出成员个数的index来引用列表的成员,将会导致IndexError.

9.写一个列表生成式,产生一个公差为11的等差数列

print([x*11 for x in range(10)])

10.给定两个列表,怎么找出他们相同的元素和不同的元素?

list1 = [1, 2, 3]

list2 = [3, 4, 5]

set1 = set(list1)

set2 = set(list2)

print(set1&set2)

print(set1^set2)

set()函数的作用是创建一个无序不重复元素集。创建完之后,可以进行关系测试,删除重复数据,还可以计算交集、并集、差集等。

11.请写出一段Python代码实现删除一个list里面的重复元素:

l1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a']

l2 = list(set(l1))

12.列举字符串、列表、元组、字典每个常用的5个方法:

字符串:replace,strip,split,reverse,upper,lower,join...

列表:append,pop,insert,remove,sort,count,index...

元组:index,count,len,dir

字典:get,keys,values,pop,popitems,clear,update,items...

13.什么是反射?以及应用场景?

在绝大多数语言当中都有反射机制的存在,可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python中一切皆对象。

1)反射机制是很多框架的基石。

🌟🌟14.简述Python的深浅拷贝?

copy():浅copy,浅拷贝指仅仅拷贝数据集合的第一层数据。

deepcopy():深copy,深拷贝指拷贝数据集合的所有层。

🌟15.Python垃圾回收机制?

垃圾回收机制是自动帮助我们管理内存,清理垃圾的一种工具。

1)引用计数

当一个对象的引用被创建或者复制时,对象的引用计数加1;

当一个对象的引用被销毁时,对象的引用计数减1;

当对象的引用计数减少为0时,就意味着对象已经没有被任何人使用了,可以将其所占用的内存释放了。

优点:

简单、直观

实时性,只要没有了引用就释放资源。

缺点:

维护引用计数需要消耗一定的资源

循环应用时,无法回收。也正是因为这个原因,才需要通过标记-清理和分代收集机制来辅助引用计数机制。

2)标记-清除

“标记-清除”不改动真实的引用计数,而是将集合中对象的引用计数复制一份副本,改动该对象引用的副本,对于副本做任何的改动,都不会影响到对象生命走起的维护。

3)分代回收

将系统中的所有内存块根据其存活时间划分为不同的集合,

每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。

也就是说,活动得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率,

那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,

如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

16.如何打乱一个排好序的list对象alist

import random
random.shuffle(alist)

17.从0-99这100个数中随机取出10个,要求不能重复,可以自己设计数据结构

print([x * x for x in range(1, 11)])

18.介绍一下try except的用法和作用

Python的except用来捕获所有的异常,因为Python里面的每次错误都会抛出一个异常,所以每个程序的错误都被当作一个运行时错误。

try:
    pass
except BaseException as e:
    print(e)
finally:
    pass

19.在Python中如何抛出、捕获、处理异常?

raise Exception 触发抛出异常

用try和except语句来捕获异常

处理异常的方法有:

try...except...else语句

finally子句

with语句

20.Python递归的最大层数?

最大数为998

21.列表推导式和生成器表达式[i % 2 for i in range(10)]和(i % 2 for i in range(10))输出结果分别是什么?

print([i % 2 for i in range(10)])
print(i % 2 for i in range(10))

22.什么是闭包?

闭包函数(closure function)指的是定义在一个函数内部的函数,被外层函数包裹着,其特点是可以访问到外层函数中的名字

def outer():
    num = 1
    def inner():
        print(num)  #  内层函数中不存在num但可以访问到外层的num
    return inner

func = outer()

num = 1000
func()  #  输出结果:1

23.请实现一个装饰器,限制该函数被调用的频率,如10秒一次

import time
def time_pay(func):

    def inner(*args, **kwargs):
        for line in range(10):
            print(line + 1)
            time.sleep(1)

        res = func(*args, **kwargs)

        return res

    return inner

@time_pay
def func1():
    print('from func1...')

func1()

24.谈谈你对闭包的理解?

闭包(closure)是函数式编程的重要语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。当一个内嵌函数引用其外部作用域的变量,我们就会得到一个闭包。总结一下,创建一个闭包必须满足以下几点:

(1)必须有一个内嵌函数。

(2)内嵌函数必须引用外部函数中的变量。

(3)外部函数的返回值必须是内嵌函数。

25.Python函数调用的时候参数的传递方式是值传递还是引用传递?

Python的参数传递有:位置参数、默认参数、可变参数、关键字参数。

函数的传值到底是值传递还是引用传递,要分情况:

不可变参数用值传递:

像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为无论如何都不可能在原处改变。

不可变对象

可变参数是引用传递的:

比如像列表,字典这样的对象是通过引用传递,和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变。

26.递归函数停止的条件?

递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return;返回终止递归。

终止的条件:

1.判断递归的次数是否达到某一限定值。

2.判断运算的结果是否达到某个范围等,根据设计的目的来选择。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1498041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存