Python基础----知识点难点整理

1.列举Python2和Python3的区别。
答:
(1)python3源码加入UTF-8编码,使得中文编写合法化。
(2)print语法区别,去除print语句,加入print()函数。python2中print后边直接跟随打印出来的信息,但是python3中需要加括号,python2中print为打印一个空白行,python3中打印一个空白行为print()。
(3)Python2中有长整型变量,Python3中没有了,都被合称为int整数型
(4)Python2中会区分为UNICODE字符串和非UNICODE字符串,但是Python3中就只有UNICODE字符串。
(5)map函数在Python2中返回的是一个列表,在Python3中返回的是一个迭代器。
(6)python3中整型数相除返回浮点数,如果要取整需要使用//。
(7)输入函数改变,去除了raw_input(),变成了input()
(8)

2.简述Python的深浅拷贝以及应用场景。
答:Python中分为可变数据类型与不可变数据类型,浅拷贝复制可变数据类型的时候只能拷贝外边的一层,拷贝出来的外层地址与原地址不同,但是拷贝出来的数据与原数据类型中的地址相同,同时,里面的数据类型发生改变时,浅拷贝拷贝过来的不会发生改变,但是深拷贝则会拷贝深层的东西,可变数据类型改变时深拷贝的考过来的会发生改变,并且深层的数据存储地址也不相同。

3.*args与kwargs的区别
答:*args是面对当你不知道要传入多少个参数,或者传入的参数数据类型是什么样的s时,保存的数据格式是元组。**kwargs是收集的关键字参数,当输入的参数需要一一对应时,格式为key=value,保存下来的格式为字典。

4.简述生成器,迭代器,可迭代对象以及应用场景。
答:生成器:在Python中是一个一边进行计算,一边进行循环的一种运行机制,被称为生成器。1.列表生成式的改写:【】改为()2.yield关键字的使用
生成器的应用场景:在计算机中,内存是有限的,如果在Python中读取一个文件,这个文件的大小超出了计算机的内存,就会出现内存溢出的现象,所以此时就可以运用生成器和readline方法循环运行,便计算便查看,可以大大节省计算机的内存空间。
可迭代对象:能够for循环的对象就是可迭代对象。
迭代器:是一种更为抽象的运行机制,能使用next方法的就是迭代器,生成器一定是迭代器,迭代器一定是可迭代对象,可迭代对象可以使用iter()方法将其转化为迭代器。
迭代器的使用场景:(1)如果数据规模巨大。(2)数列有规律,但是无法用列表生成式表达规律的。

5.请说明yield关键字的工作机制
答:yield运用于生成器,作一个标记的作用,当使用生成器运行到yield关键字时,函数运行停止,开始调用下面的函数,当遇到next()方法时,返回yield关键字的位置,再运行yield之后的函数内容,同时也可以使用send方法,给yield前的变量传值。

6.请简单谈谈装饰器的作用和功能。
答:装饰器的本质其实就是一个函数,给需要被装饰的核心函数进行装饰时,如果不使用装饰器,一个函数就需要一个装饰函数的话会浪费大量的资源,所以,这个时候就需要装饰器来进行装饰,装饰器就如同相片与相框的关系,对核心函数进行装饰,但是不该变其函数本质。一个装饰器可以在不修改代码的前提下增加额外的功能,装饰多个函数,这样就可以节省大量的计算机内存。同时可以实现代码的,开放封闭原则,对以实现的进行封闭对之后可以对扩展对象进行开发。

7.Python中如何读取大数据的文件内容。
答:当Python中打开一个10G的文件时,内存如果不足10G时就会出现内存溢出现象,这时就可以使用生成器,节省内存,并且使用readline方法一次读取一行将这些信息用生成器,循环显示出来,以实现阅读大文件的目的。

8.Python中的模块和包是什么
答:模块就是Python文件,文件中是封装好的函数,模块就和工具包一样,里面装的就是函数,当你需要实现某个功能的时候就可以从这个工具包中调用工具,这时候就需要模块的导入。包实际上就是将有联系的模块组织在一起,有效避免将模块名称冲突问题,让应用组织更加清晰,多个模块可以打包成一个包,封装起来以后使用可以节省工作,编写代码的时间,也可以发给别人使用。

9.Python是如何进行内存管理的(Python是如何实现垃圾回收的)。
答:Python中的垃圾回收采用的是引用计数机制为主,和标记—清除分代收集两种机制为辅的策略。引用计数是采用的是让程序记录下引用的对象的次数,当引用次数地时候就删除该元素以达到节省内存的管理。标记-清除算法由标记阶段和清除阶段构成。标记阶段是把所有活动对象都做上标记的阶段。清除阶段是把那些没有标记的对象,也就是非活动对象回收的阶段。通过这两个阶段,就可以令不能利用的内存空间重新得到利用。

10.谈谈你对面向对象的看法与理解。
答:面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
特性:抽象 封装 继承 多态
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低。

11.Python面向对象中的继承有什么特点。
答:python面向对象中,子类继承父类的属性及其方法,也可以通过属性名更改自己的方法。

12.面向对象中super的作用
答:super函数是python2.2以后加入的内容,是用于调用父类的一个方法,其主要运用于解决多重继承问题的。在继承过程中如果直接使用父类的名字进行调用是没有问题的,但是进行多重调用时就会出现种种问题,super就是为了解决这类问题而生的。

13.面向对象中深度优先和广度优先是什么,并说明引用场景
答:多继承时,
深度优先是:遇到一种情况时,将这种情况所面临的所有选项依次遍历,直至无路可走,将所有选项遍历完成后,没有其他选项,返回上一层或者更高层,直至找到其他选项进行遍历。
广度优先:遇到一种情况时,将与能达到此情况同样步数的所有情况都遍历一遍后,再遍历下一层的情况,以此类推。

14.请简述__init__和__len__两种魔术方法的使用方法与作用。
答:
__init__是构造方法,创建实例对象时会默认执行,一般用来传入参数,用传入的参数来初始化该实例
__len__返回个数
例如:
有一个实例对象S
调用len(S)方法时会执行S.len()

你可能感兴趣的:(技术类)