Python面试题【1~10】

本文深入探讨了Python编程中的关键概念,包括yield关键字的作用、可变参数args和kwargs的使用、并发与并行的区别、处理大型文件的策略、字典排序、进程同步锁的原理、内存管理和垃圾回收机制。此外,还详细解释了Python中的深拷贝与浅拷贝的区别,并提供了实际示例进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Python 的 yield 关键字有什么作用?

保存当前运行状态,然后暂停执行,即将函数挂起。yield关键字后面表达式的值作为返回值返回。当使用next()、send()函数从断点处继续执行

2. Python中【args】【kwargs】 是什么?

  • 可变参数的处理
  • args 打包成 tuple
  • kwargs 被打包成 dict

3. 并发与并行的区别?

并发不是并行,但看起来像是同时运行的,单个cpu和多道技术就可以实现并发。并行也属于并发,指的是同时运行,只有具备多个cpu才能实现并行

4. 下面代码会输出什么?

list = ['1','2','3','4','5']
print(list[10:])
'''
这是一个坑!很e心的操作,代码将输出[], 它并不会产生我们脑海中预期的IndexError错误
'''

5. 处理一个大小为8G的文件,但是内存只有4G!如何实现以及需要考虑的问题?

方法一:
可以通过生成器,分多次读取,每次读取数量相对少的数据(比如500MB)进行处理,处理结束后在读取后面的 500MB的数据。
方法二:
可以通过linux命令split切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割

from mmap import mmap

def get_lines(f_p):
    with open(f_p,"r+") as f:
        m = mmap(f.fileno(), 0)
        tmp = 0
        for i, char in enumerate(m):
            if char==b"\n":
                yield m[tmp:i+1].decode()
                tmp = i+1

if __name__=="__main__":
    for i in get_lines("file/path"):
        print(i)

内存只有4G无法一次性读入8G文件,需要分批读入数据且记录每次读入数据的位置。分批每次读取数据的大小,太小的话会在读取操作花费过多时间

6. 请按value值进行排序: d= {‘a’:30,‘g’:50,‘i’:12,‘k’:23}

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

7. 介绍一下进程同步锁的概念

进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件或者打印终端是可以的。共享带来了竞争,竞争的结果就是混乱。解决办法就是加锁处理。加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行修改,即串行的修改,没错,速度是慢了,但牺牲了速度却保证了数据安全

8. python是如何进行内存管理的?

python采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只有一份该值,多个变量指向同一块内存地址

9. Python中的深拷贝和浅拷贝有什么区别?

copy.copy(浅拷贝): 只拷贝父对象,不会拷贝对象的内部的子对象
copy.deepcopy( 深拷贝): 拷贝对象及其子对象

10. Python垃圾回收机制

  • PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少。引用计数为0时,该对象生命结束了
  • 优点:【简单、实时性】
  • 缺点:【维护引用计数消耗资源、循环引用】
  • 标记-清除机制】基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放
  • 分代技术】分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值