Python面试题自我总结(一)

  • is与==区别

==用来判断两个对象的value(值)是否相等

is 用来判断对象间的唯一身份id(标识)是否相等

在变量与单例值之间比较常用的是is(x is None)
is运算符比 == 速度快

  • 深拷贝与浅拷贝

浅拷贝:传递对象的引用,原始值被修改/赋值

深拷贝:开辟新的空间,保存之前的对象,传递之前对象的值到新的空间中,相互之间不会影响

浅拷贝:直接赋值、copy.copy
深拷贝:copy.deepycopy()

  • GIL全局解释器

GIL(Global Interpreter Lock) GIL不是Python的特性,是python解释器(CPython)引入的一个概念(解释器:把.py为扩展名的文本文件,通过解释器去执行 CPython IPython PyPy JyPython)。
解决多线程之间数据完整性和状态同步的方法就是加锁,GIL就是一把超级大锁(全局排他锁),对多线程效率有不小影响==Python单线程程序。但如果进行耗时的IO操作,能释放GIL也可以提升运行效率。

  • def func(*args,**kwargs)

*args:用来发送非键值对的可变数量的参数列表给函数(1,‘5’,(1,5),[5,8,9],{‘x’:1})

**kwargs:用来传递不定长度的键值对参数给函数(a=2,c=4,x=5)

  • 可变类型与不可变类型

不可变:不允许将变量的值发生变化,如果改变变量的值就是新建了一个新的对象(string 数值 元组tuple[0]=100 非法的)

可变:允许变量的值发生变化,可以通过append、+=等操作(list、dict)

  • 内存管理机制

引用计数:
每个对象都有指向该对象的引用总数。对象被引用时其计数+1,不再被一个变量引用时-1,等于0时对象被删除

垃圾回收:
1. 引用计数
2.标记清楚:假如两个引用之间存在循环引用,则其实际有效计数为0
3.分代回收:将内存块根据存活时间划分不同集合(‘代’),垃圾收集的频率随‘代’的存活时间增大而减小,活的越长的对象越不可能是垃圾

内存池机制:
呈现金字塔形状 -1-2层由操作系统完成,0层大内存若请求分配的内存大于256K,malloc函数分配内存,free函数释放内存。1,2层内存池有Python的接口函数PyMem_Malloc实现-----若请求分配的内存在1~256字节之间就使用内存池管理系统进行分配。3层 用户对Python对象的直接操作

  • 可迭代对象、迭代器和生成器

https://blog.csdn.net/qq_39884947/article/details/90144093

  • yield 与return

yieid 会暂停函数的运行,返回当前数据,执行 next方法,函数会从暂停的位置继续向下执行

return 会打断函数的运行,返回结果,再次运行函数,会从头开始重新执行
yieid 相同条件多次执行可以返回一组有关联的数据

return 相同条件多次执行返回同一结果
yieid 和 return 联用只有python3 支持,并且执行到return 会抛出StopIteration 异常

  • 线程、进程、协程

https://blog.csdn.net/qq_39884947/article/details/90144366
https://blog.csdn.net/qq_39884947/article/details/90145156
https://blog.csdn.net/qq_39884947/article/details/90144965

  • 装饰器

函数可以作为参数传递

普通的装饰器

def dec(func):
    def inner():
        print('装饰器运行')
        func()#没有则下方被装饰的函数不会运行
    return inner

@dec
def my():
    print('调用装饰器')
my()

传递参数的装饰器

def dec(func):
    def inner(m, n):
        print('装饰器运行')
        func(m, n)  # 没有则下方被装饰的函数不会运行
    return inner
@dec
def my(a, b):
    print('调用装饰器')
    print(a + b)
if __name__ == '__main__':
   my(1,3)

有返回值的装饰器

def dec(func):
    def inner(m, n):
        print('装饰器运行')
        result=func(m, n)  # 没有则下方被装饰的函数不会运行
        return result
    return inner
@dec
def my(a, b):
    print('调用装饰器')
    print(a + b)
    return '返回值'+str(a+b)
if __name__ == '__main__':
   print(my(1,3))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值