常见的Python面试题+详细解答

常见面试题整理–Python概念篇

(一),这两个参数是什么意思:*args,**kwargs?我们为什么要使用它们?

答:如果我们不确定往一个函数中传入多少参数,或者我们希望以元组(tuple)或者列表(list)的形式传参数的时候,我们可以使用*args(单星号).如果我们不知道往函数中传递多少个关键词参数或者想传入字典的值作为关键词参数的时候我们可以使用**kwargs(双星号),args,kwargs两个标识符是约定俗成的用法。
另一种答法:当函数的参数前面有一个星号*号的时候表示这是一个可变得位置参数,两个星号**表示这是一个可变的关键词参数。星号*把序列或者集合解包(uppack)成位置参数,两个星号**把字典解包成关键词参数。
代码辅助理解:

tempList = [1,2,3]
tempTuple = (2,3,4)
tempDict = {'s':3,'m':4,'c':5}

def testFunc(*args,**kwargs):
    print args,kwargs

testFunc()#() {}
testFunc(*tempList)#(1,2,3) {}
testFunc(*tempTuple)#(2,3,4) {}
testFunc(*tempDict)#('s','m','c') {}
testFunc(**tempDict)#() {'s':3,'m':4,'c':5}
testFunc(*tempList,**tempDict)#(1,2,3) {'s':3,'m':4,'c':5}
testFunc(0)#(0,) {}
testFunc(0,*tempList)#(0,1,2,3) {}
testFunc(0,**tempDict)#(0,) {'s':3,'m':4,'c':5}
testFunc(0,*tempList,tempName = 'bye',**tempDict)#(0,1,2,3) {'s':3,'m':4,'c':5,'tempName':'bye'}
(二),谈一谈Python的装饰器(decorator)

装饰器本质上是一个Python函数,它可以让其它函数在不做任何变动的情况下增加额外功能,装饰器的返回值也是一个函数对象。他经常用于有切面需求的场景。比如:插入日志,性能测试,事务处理,缓存,权限校验等。有了装饰器我们就可以抽离出大量的与函数功能无关的雷同代码进行重用。
有关于具体的装饰器的用法看这里:装饰器-廖雪峰的官方网站

(三),简要概述Python的垃圾回收机制(garbage collection)

Python中的垃圾回收机制是以引用计数为主,标记-清除分代收集为辅。

  • 引用计数:Python在内存中存储每个对象的引用计数,如果计数变为0,该对象就会消失,分配给该对象的内存就会释放出来。
  • 标记-清除:一些容器对象,比如list,dict,tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的结点,而引用关系构成这个有向图的边).
  • 分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。
    未完待续!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值