python面试题简单篇总结

2019年4月1日14:32:43 发表评论 245 views
摘要

python面试题总结

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

当函数的参数前面有一个星号*号的时候表示这是一个可变的位置参数,两个星号**表示这个是一个可变的关键词参数

2、谈一谈Python的装饰器

装饰器本质上是一个Python函数(当然也有类装饰器),它可以让其它函数在不作任何变动的情况下增加额外功能,装饰器的返回值也是一个函数对象。有了装饰器我们就可以抽离出大量的与函数功能无关的且重复的代码进行复用。常用的地方:插入日志、性能测试、事务处理、缓存、权限校验等。

3、python多线程的看法

Python并不支持真正意义上的多线程,Python提供了多线程包。Python中有一个叫Global Interpreter Lock(GIL)的东西,它能确保你的代码中永远只有一个线程在执行。经过GIL的处理,会增加执行的开销。这就意味着如果你先要提高代码执行效率,使用threading不是一个明智的选择,当然如果你的代码是IO密集型,多线程可以明显提高效率,相反如果你的代码是CPU密集型,那么,这种情况可能就达不到预期的效果。

4、os,sys模块不同,并列举常用的模块方法

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。sys模块负责程序与Python解释器的交互,提供了一系列的函数和变量用于用户操作Python运行时的环境。

5、什么是lambda表达式?它有什么好处?

lambda表达式通常是当你需要使用一个函数,但是又不想费脑袋去命名一个函数的时候使用,也就是通常所说的匿名函数。lambda表达式一般的形式是:关键词lambda后面紧接一个或多个参数,紧接一个冒号“:”,紧接一个表达式。lambda表达式是一个表达式不是一个语句。

6、Python里面如何拷贝一个对象?

Python中对象之间的赋值是按引用传递的,如果要拷贝对象需要使用标准模板中的copy

copy.copy:浅拷贝,只拷贝父对象,不拷贝父对象的子对象。

copy.deepcopy:深拷贝,拷贝父对象和子对象。

7、__new__和__init__的区别?

__init__为初始化方法,__new__方法是真正的构造函数。

__new__是实例创建之前被调用,它的任务是创建并返回该实例,是静态方法。

__init__是实例创建之后被调用的,然后设置对象属性的一些初始值。

总结:__new__方法在__init__方法之前被调用,并且__new__方法的返回值将传递给__init__方法作为第一个参数,最后__init__给这个实例设置一些参数。

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: