您的位置:首页 > 编程语言 > Python开发

python基础知识

2017-11-07 07:47 309 查看

一. Python基础

1.如何配置项目环境

利用virtualenv配置项目环境,利用virtualenv+environmentname命令创建虚拟环境,利用deactivate退出虚拟环境.

2.参数如何传递,传递值还是引用

对于简单数据类型,如整数,浮点,布尔,字符串,是传递值.

对于复杂的数据类型,如列表,字典,类,对象,是传递引用的,函数形参及函数外的变量指向的是同一个变量,只是名字不同.

3.列表推导,生成器和迭代器

列表推导利用列表结构并加入简单的for循环;

简单来说,可以直接作用于for循环的对象称为可迭代对象,可以被next函数调用并不断返回下一个值的对象称为迭代器.

生成器是用来实现迭代器的方法,生成器的方式是每次处理一个对象,而不是一口气的构造整个数据结构,因此相对于列表推导,生成器更节省内存.

4.除了在函数中进行import外,如何避免循环引用

(1)代码划分清晰的层级,代码应该是一个树形结构,清晰划分层级后,上层模块可以引用下层模块,下层模块不能引用上层模块,理论上不会有循环引用.

(2)不使用的模块不要引用.

5.init方法与new方法的区别

(1)init通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性,做一些额外的操作,发生在实例被创建完以后,它是实例级别的方法.

(2)new通常用于控制生成一个新实例的过程,它是类级别的方法.

6.python装饰器是什么

装饰器是一个函数,它以函数为参数,并且返回一个函数,也可以解释为对对象的重新包装,这个对象可以是函数,也可以是类.

7.python中的pickling和unpickling

pickling将函数对象转换为字符串,再利用dumps存入文件的方法,unpickling相反.

8.python是如何被解释的

python解释器会把源代码转换成一种中间的语言,然后再转换成机器语言来执行.

9.python是如何做内存管理的

python的内存管理器是在python的私有的堆上的,所有的python对象和数据结构都在私有堆上,程序员不能直接访问这个空间,解释器负责管理.

python对象的堆分配是由python的内存管理来完成的,在python的核心API中有一些工具和内存管理相关.

python同时有内置的垃圾回收器,负责回收不再使用的内存并释放到堆空间.

10.python的垃圾回收机制

python主要运用了'引用计数'来跟踪和回收垃圾,在引用计数的基础上,还可以通过'标记-清除'解决容器对象可能产生的循环引用的问题,通过'分代回收'以空间换取时间来进一步提高垃圾回收的效率.

引用计数:当一个对象的引用被创建或者被复制时,对象的引用计数加1,当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数变为0时,意味着没有任何人引用了,可以将其占有的内存释放了.

引用计数的缺点是如果存在循环引用,则不能将垃圾回收,因此引入了'标记-清除',首先建立对象引用计数的副本,然后假设两个对象A,B,我们从A出发,因为它有一个对象B的引用,因此我们将B的引用计数减1,然后顺着引用到达B,如果B中有一个对A的引用,那么将A的计数减1,由于是副本,即使B中没有对A的引用,也不影响原数据.

'分代回收'是在'标记-清除'的基础上,对系统中所有的内存块根据其存活时间划分为不同的集合,每一个集合就称为一个'代',垃圾回收的频率随着'代'存活的时间增加而减少,也就是说,内存存活时间越长,越不像是垃圾,因此减少垃圾回收的频率,衡量存活时间通常是利用几次垃圾收集动作来衡量,如果一个对象经历的垃圾收集次数越多,该对象存活时间越长.

11.python的模块和包是什么

每个python文件都是一个模块,每一个模块都可以被其他模块调用,python包是python文件夹就是包含模块的包,一个包可以有模块或子文件夹.

12.python的内置数据结构

不可变的数据结构:字符串,整数,浮点数,元组;

可变的数据结构:列表,字典;

13.python的命名空间

在python中,所有引入的名字都有其存在和被查找的空间,就像是一个大箱子,在里面变量名称可以找到相应的对象,想要找到这个对象,需要找到变量名称.

14.python中的lambda是什么,为什么没有声明

lambda是只包含表达式的匿名函数,通常嵌套在函数中.

15.python的切片是什么

切片是将数组,字符串,元组,字典中某一部分元素提取出来的方法.

16.python如何复制对象,浅复制和深复制

python中可以通过copy.copy()和copy.deepcopy()实现,不是所有对象都能被复制,浅复制是创建一个新的对象及对象的引用,深复制是创建一个新的对象以及递归对象所包含的子对象.

17.python中负数指数指什么

python序列中正数指数0代表第1个元素,1代表第2个元素,负数指数-1代表最后一个元素,-2代表倒数倒数第二个元素,依次类推.

18.python中range与xrange的区别

range返回列表,xrange返回一个生成器,xrange比range节省内存.

19.python中with语句及用法

with语句一般用在使用文件,数据库连接等需要分配资源,回收资源的情况下,并且可以处理异常.

with语句是为方便上下文管理而设计的语法,使用方法为:

with 托管类实例化 as 托管实例:

  #用托管实例做一些事

托管类可以自主定义,只需要定义init,enter,exit,三个方法就可以让with能够处理自己定义的类.

20.python读取大文件的方法

分段读取一个文件,每次读取相对小的数据量,对这段数据进行处理,生成结果,然后释放内存,再读取一段数据,如此循环.

21.python中使用try…except…的优缺点

优点:正常操作代码的控制流不会和错误代码混合在一起,当某种条件发生时,它也允许控制流跳过多个框架,集中报错;

缺点:它也可能产生令人困惑的控制流,调用库时容易错过错误情况.

22.python中的编码和解码

python2:

str–>decode–>unicode–>encode–>str

python3:

bytes–>decode–>str(unicode)–>encode–>bytes

常见的编码类型,unicode,utf-8,gbk,gb2312,

23.GIL是什么,为什么GIL很重要?

GIL(global interpreter lock)即全局解释器锁,python代码的执行由python虚拟机来控制,python在设计之初就考虑到在解释器的主循环中,同时只有一个线程运行,对虚拟机的访问由GIL来控制,如果没有GIL,在写模块时需要频繁的解锁来保证线程安全.

24. python中ord方法与chr方法

chr将0~255的整数转换为对应的字符,ord与之相反。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: