Python是一个面向对象的解释型的交互式高级脚本语言:Python被设计成一种高可读性的语言,因为它大量地使用了英语中的单词作为关键字,而且不像其他语言使用标点符号构成复杂的语法结构,Python的语法结构非常少。
Python是一种面向对象的语言:即Python是支持面向对象的,支持在对象中进行代码封装。
Python是一种解释型语言:即Python程序是在运行时由解释器解释执行的,因而不用事先编译源程序。这一点和Perl和PHP类似。
Python是一种交互式语言:即你能够在Python提示符下直接交互式地编写你的程序。
Python是初学者的语言:Python是一种非常适合初学者的语言,它支持多种类型的应用程序的开发,如简单的文本处理、www浏览器应用程序开发、游戏开发等等。
1)什么是Python?使用Python的优点有哪些?缺点有哪些?
Python是一种面向对象的解释性的交互式语言,带有对象、模块、线程、异常和内存自动管理的机制。
使用Python的优点有:简单、易学、轻便可移植、可扩展、可读性、具有多种内建数据类型、开源等等。
使用Python的缺点有:运行速度慢,代码不能加密(解释性语言,发布python应用只能发布源代码,不像C发布编译后的应用文件)
2)什么是PEP 8?
PEP 8是一种编码规范,是一系列关于如何让Python代码更加具有可读性的编码建议。
3)什么是序列化(pickling)和反序列化(unpickling)?
序列化:将在内存中的变量转为可存储或传输的过程。应用JSON传输,序列化为统一格式json
反序列化:与序列化的过程相反
Pickle模块允许我们将Python对象转换成一个string表示的信息,并且可以使用dump函数将其保存到一个文件中去,这样的过程称为序列化。而使用文件中保存的对象信息重构Python对象的过程称为反序列化。
4)Python是如何被解释执行的?
Python是一种解释型语言,它可以直接从源代码运行程序。程序员编写的源代码首先转变成一种中间语言代码,然后再被转换成能够直接执行的机器语言代码。
5)Python是如何进行内存管理的?
Python内存空间是以Python私有堆的形式进行管理的。所有的Python对象和数据结构都存放在一个私有堆中。解释器可以访问私有堆,而程序员不可以。
将Python堆空间中的内存分配给Python对象的工作是由Python内存管理器完成的。而内核API则会提供给程序员一些相关的工具来完成涉及到内存的编码工作。
Python还内置垃圾回收器,从而进行回收释放内存到堆空间。
6)能够找到程序中的bug进行静态分析的工具有哪些?
PyChecker是一种能够发现Python源代码中的bug并对其中的代码风格和复杂度进行警告的静态分析工具。另外一种工具是Pylint,它能够验证模块是否满足编码标准。
7)什么是Python装饰器?
用来装饰一个函数从而使这个函数在不修改本身的函数定义外,动态产生额外的功能;装饰函数的入参为需要被装饰的函数。装饰器本质上是一个返回函数的高阶函数
一个Python装饰器是我们在符合Python语法的同时又方便地对函数做的一些特定的修改。
8)列表、元组、集合、字典的区别是什么?
列表:元素可变(任何数据类型),有序(可索引),append/insert/pop;
元组:元素不可变,但元素中的可变元素是可变的;有序(可索引);而且元组可以被散列,例如作为字典的键。
集合:无序(不可被索引)、互异
字典:无序,键值对(key:value),key唯一不可重复
9)怎样理解字典和列表?
它们是一种用来创建可变对象的语法结构,数据容器。
dic插入、查找速度比list快,不会随key的增加而增加,但list会随着元素的增加而增加(偏移量)
10)参数是如何通过值或者引用传递的?
python中确切说应该是“传对象引用”的方式,引用对象传递。 一切皆对象,参数皆引用
如果函数收到的是一个可变对象(比如列表、字典)的引用,则可修改对象的原始值==相当于“引用传递”方式;
如果函数收到的是一个不可变对象(比如数字、字符、元组),就不能直接修改原始对象指向的值==相当于“值传递”方式;
11)Python提供哪些内置类型?(原文有语法错误,根据个人理解翻译)
分为可变类型和不可变类型。
可变类型:
列表
集合
字典
不可变类型:
字符串
元组
数字
12)Python中的命名空间是什么?
名字到对象的一个映射;
一个对象拥有一个ID(内存地址)、一个类型、一个值,但可以有不同的名字,比如:a=1,b=a,a和b指向同一个对象;
命名空间就是用来映射这个关系的;
13)Python中的lambda表达式是什么?
lambda表达式是一个匿名函数,省去了对函数命名,所以叫匿名函数。通常用作代码行内的嵌入函数。
14)为什么Python中的lambda表达式没有声明?
Python中的lambda表达式没有声明是因为它只是用来创建一个新的函数对象,并且在运行时才返回值给对象。
15)Python中的pass是什么意思?
pass是Python中的空操作语句,或者说,它是一个复杂语句中的一个空间占位符,只是用来表示空白,什么都不用写。
16)Python的迭代器是什么?
迭代器是用来迭代可迭代对象的,比如包含一组元素的列表。 iter()生成迭代器对象,next()依次访问迭代器对象的下一个值
17)Python中的unittest是什么?
unittest是Python中的单元测试框架。它支持共享的测试建立、自动测试、关闭测试、聚集测试等等。
18)什么是切片?
从一组序列中截取一段序列的机制,比如列表、元组、字符串等类型中选择一个范围中的元素。
19)Python中的生成器是什么?
一种特殊的迭代器,用关键字yield表示,它特殊的地方在于运用在函数中函数体没有return返回,而是使用关键字yield返回值,yield每返回一次,函数状态挂起 。这种函数叫做生成器函数,被调用时返回一个生成器对象;
20)Python中的docstring是什么?
docstring是一个py文件、函数、类开头部分的用'''编写的一段注释文档和说明,通过help函数可查看该文档说明。
docstring是Python中产生文档的方式,它可以为Python中的函数、模块和类产生说明文档。
21)Python中如何拷贝一个对象?
使用标准库的copy模块:copy.copy()浅拷贝,copy.deepcopy()深拷贝
copy.copy()浅拷贝:拷贝了对象,但拷贝对象的值仍然是指向原对象的值(相当于引用),修改拷贝对象的元素,则被拷贝对象的值也会被修改
copy.deepcopy()深拷贝: 不仅拷贝了对象,同时也拷贝了对象中的元素,获得了全新的对象,与被拷贝对象完全独立;但这需要牺牲一定的时间和空间。
22)Python中负的索引是什么意思?
Python中可以使用整数和负数进行索引。对于正索引,0是第一个,1是第二个,以此类推。对于负索引,-1是最后一个,-2是倒数第二个,以此类推。
23)怎样将一个数字转换成字符串?
使用内置函数str()即可。如果想要八进制或者十六进制的形式,可以使用oct或者hex函数。
24)xrange和range的区别是什么?
xrange返回一个xrange生成器对象,而range返回一个list对象。
生成很大数列的时候,range会使用和其范围大小相同的内存;相比xrange的性能要高很多
25)Python中的模块和包是什么?
在Python中,模块就是一种构建程序的方式。每一个Python程序文件都是一个模块,这个文件还可以引入其他模块如对象和属性等。
包就是一个带有__init__.py文件的文件夹,里面可包含多个模块
26)@property、@staticmethod、@classmethod:
@property:特性,被其装饰过的方法(函数),可以当成属性一样去调用和访问。如:a()是一个方法==》c.a(对象.属性)调用
@staticmethod:静态方法,被其装饰的函数中不含self参数,相当于类外面的方法,但会在类中被调用(跟类有关系但在运行时又不需要实例和类参与)。通过类名调用
@classmethod:类方法,通过类名调用(一般类中的方法是实例方法,通过实例调用),使用时将类作为方法的第一个参数传入,如:
@classmethod
def test(cls):
print(cls,cls.x)
27) 如何理解self?
self为类中方法的默认第一个参数,self指向创建的实例本身。 调用时self不需要传,Python解释器自己会把实例变量传进去
一、知识点整理
1、python2与python3的区别:
(1)宏观比对
python2 源码不标准,较为混乱,并且重复的代码很多。
python3 源码统一了标准,同时也去除了重复代码。
(2)编码比对
python2默认编码方式是ASCII。
python3默认编码方式是utf-8(能识别中文)。
PS:对应python2的编码问题,可以在代码首行处加入 #-*- encoding:utf-8 -*- 解决。
2、python的环境分为“编译型”与解释型;
编译型指的是一次性将所有程序编译成二进制文件。
优点:运行速度很快
缺点:开发效率低,不能跨平台执行
语种:C/C++/GO/Swift/Object-C/Pascal等
解释型指的是当程序执行时,编译器会将代码一行一行的解释。
优点:开发效率高,可以跨平台执行。
缺点:运行速度慢。
语种:JS/Python/Ruby/PHP/Perl/Erlang
PS:Java和C#属于混合型语种;
PS:python是一门动态解释型的强类定义语言;
3、变量是将一些运算的中间结果暂存到内容当中,以便后续代码的调用。
格式:变量名 = 值
命名要求:
1)变量命名必须有数字、字母、下划线任意组合,但不能使用数字开头。
2)不能是python中的关键字,关键字的范围是“['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']”
3)变量具有可描述性,例如名称变量可定义为“name”,不能定义为“asss”。
4)变量命名不能是中文。
4、常量就是一个一直不变的量,并且命名最好全部是大写。
5、注释是为了方便自己与他人更好的理解代码。
单行注释:#
多行注释:'''被注释的内容''' 或 """被注释的内容"""
6、用户交互 input 输入命令:
1)等待用户输入内容;
2)将输入的内容赋值给了前面的变量;
3)input 出来的数据类型全部是str类型;
7、基础数据类型可以分为三种3种, 数字、字符串、布尔类型(暂时介绍这三种)。
int(整数型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
字符串转化成数字用法是 int(str)
ps:str必须是数字组成的
数字转化成字符串用法是 str(int)
long(长整数型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
PS:自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
str(字符串类型)
python当中凡是用引号(单引号或双引号)引起来的都是字符串。
特性:
可相加:字符串的拼接。
可相乘:str * int
bool(布尔值)
分为True和False两种。
二、基础命令整理
1、print 打印输出命令,例如 print(123) 或 print('一二三')
2、type 是一个内建的函数,调用他能够得到一个返回值,从而知道想要查询的对象类型信息,例如print(123,type(123))
3、input 输入命令,程序会等待用户输入值,值全部是字符类型。例如变量name = input('请输入您的名字!')
4、''单引号:当字符串中包含双引号时,可以用单引号引起来。
""双引号:当字符串中包含单引号时,可以用双引号引起来。
"""多引号:当字符串是多行内容时,必须要用多引号引起来。
5、字符串拼接:
例如 name + age ,表示name变量(str)拼接上age变量(str)
name * 10 ,表示输出name变量(str)值10此,并且将其全部拼接在一起。
6、运算符介绍:
7、逻辑运算:
逻辑运算分为 and 、 or 、 not 三种。
1)在没有()的情况下,not 优先级高于 and ,and优先级高于 or ,即关系为 () > not > and > or ,同一优先级从左往右计算。
2)x or y , x 为真,值就是x,相反 x 为假,那么值就是 y;
x and y , x 为真,值是 y,相反 x 为假,那么值就是x;
3)or 和 and 的返回值正好相反。
or:
只要有一个True,就会返回True
PS:如果程序首先看到True,就不会再看or 后面的条件。
and
只要有一个False,就会返回False
PS:如果程序首先看到False,就不会再看and 后面的条件。
8、赋值运算:
9、if 流程控制语句
单分支格式:
if 条件:
满足条件执行代码
双分支格式:
if 条件:
满足条件执行代码
else:
if条件不满足就走这段代码
多分支格式:
if 条件:
满足条件执行代码
elif 条件:
上面条件不满足就走这个
elif 条件:
上面条件不满足就走这个
elif 条件:
上面条件不满足就走这个
elif 条件:
上面条件不满足就走这个
10、while循环语句
基本循环格式:
while 条件:
# 循环体
循环终止语句:
1)break:完全终止循环
2)continue:单次终止循环
while else:
当while循环正常执行完,中间没有被break中止的话,就会执行else后面的语句。
11、格式化输出 - 占位符
%s 表示字符串占位符;
%d 表示数字占位符;
%% 会被解析成字符%,如%%s 解析成 %s