高级语言
接近自然语言和数学语言,在一定程度上与计算机无关。
编译
用相应语言的编译程序对高级语言描述的源代码进行扫描后生成目标代码,目标代码再经过连接、装配成可执行指令序列运行,获得结果。
解释
用解释程序对源代码逐句扫描、翻译,执行后直接获得结果。
序列
序列类型是一种容器通过索引访问成员(由于元素之间存在顺序关系,因此可以存在数据相同但是位置不同的元素)。
索引规则:0->和<- -1
序列的通用知识:
- 序列的值比较:
- 如果是字符串进行比较,是按照字符串逐个字符的ASCII码值的大小进行的。(a:97,A:65)
- 不同类型的序列不能进行值比较,例如:[‘a’,‘k’]和(‘a’,‘k’),虽然两个序列的元素内容是一样的,但无法进行不同类型数据的值比较。
-
序列对象的身份比较(is是看序列对象的id是否相同,相同返回True,赋值=会使两个对象id相同)
-
切片:[startindex:endindex:steps]
例子:
可以看出对应endindex的数是没有的
可以看出startindex是一定存在的
-
重复:序列对象*整数(需要复制的份数)
-
判断成员:in或not in,判断一个元素是否属于一个序列。
序列相关的内建函数:
- len()返回参数序列的长度
- sorted()返回一个排好序的序列副本,原序列不变
- zip(序列1,序列2,…)返回一个迭代器,迭代器的第n个元素是由每个可迭代对象的第n个元素组成的元组
想要立即显示惰性计算的值,可以将其转换为急性计算类型如list();也可以在前面加*表示解压。
- reversed()返回序列逆序排列后的迭代器
- enumerate()将可迭代对象组合成索引+数据格式输出,返回迭代器。
- sum()用于序列数值的相加,要求序列的元素必须都是数值类型,可以是整型和浮点数
- max()返回参数的最大值
如果参数只有一个对象,则返回该对象中的最大值元素;
如果参数有若干对象,则返回拥有最大值元素的那个对象。
字符串(不可变类型)
列表(可变类型)
允许通过索引来改变对应的元素值。
- 可以存储不同类型的数据成员(列表中的元素可以是元组)
- 使用[]或list()创建
列表的内建函数:
- append()向列表尾部添加对象。
- extend()向列表尾部添加可迭代对象t的每个元素。
- pop()删除索引值为i的列表元素。
- remove()删除第一个找到的对象
- reverse()翻转列表(作用于列表本身)
- sort(key=None,reverse=False)列表排序(作用于列表本身)
- copy()生成一个列表的(浅)拷贝,只复制父对象不复制内部子对象,即只是引用内部子对象
- deepcopy()既复制父对象也复制内部子对象
- =赋值,引用同一个对象
元组(不可变类型)
不允许通过索引来改变对应的元素值。
- 可以存储不同类型的数据成员
- 使用()或tuple()创建
- 元组的可变元素可变
- 元组作为函数特殊返回类型,函数返回对象的个数>1时
range对象(不可变类型)
range()生成一个不可变的数字序列
- 惰性求值
- 可以通过len()函数获取长度
- 可被索引
- 不能使用next()
- 可重复访问元素
可迭代对象(Iterable)
可以直接用于for循环遍历的对象称为可迭代对象。
迭代器(Iterator)
所有的可迭代对象可以通过iter内置函数转为迭代器。
- 惰性计算:只在需要时才实际生成值,在每个元素产生后暂停。可以用next()函数遍历下一个值的对象。
- 只能从前往后正向访问元素,直到抛出StopIteration异常
- 不支持下标访问
- 不能访问已经访问过的数据
生成器对象(Gernerator)
生成器是一种特殊的迭代器,是构造新的可迭代对象的一种简洁方式。
创建生成器的两种方法:
- 函数定义中将返回关键字return替换为yield
- 使用生成器表达式
使用生成器对象的元素的方法:
- 根据需要将其转化为列表或元组
- 可以使用生成器对象的__next__()方法或内置的next()进行遍历
- 直接使用for循环遍历
生成器函数
包含yield语句的函数可以用来创建生成器对象,这样的函数也称生成器函数。
return语句和yield语句:
return语句一旦执行会立即结束函数的运行。
每次执行yield语句并返回一个值之后会暂停或挂起后面代码的执行,下次通过生成器对象的_ _ next _ _()方法、内置函数next()、for循环遍历生成器对象元素或其他方式显式“索要”数据时恢复执行。
生成器表达式
类似列表推导式,只不过外面是圆括号
字典
创建字典:dict()将序列类型的数据对象转换成字典
a = dict(Mayue = 3000,Lilin = 4500, Wuyun = 8000)
b = dict([['Mayue',3000],['Lilin',4500],['Wuyun',8000]])
c = dict([('Mayue',3000),('Lilin',4500),('Wuyun',8000)])
d = dict((('Mayue',3000),('Lilin',4500),('Wuyun',8000)))
e = {}.fromkeys(('Mayue','Lilin','Wuyun'),3000)
f = dict(zip(序列1,序列2))
键值查找:字典中不能通过某个索引找到某个元素,在字典中通过键来确定相对应值。
字典更新:
添加元素:
成员判断:
删除元素:
字典的内建函数
dict()创建字典的函数
len()返回字典长度
hash()判断是否可哈希
字典方法
- get(key,default = None)返回键key对应的值,如果该键不存在,则返回default值,默认为None
- setdefault(key,default = None)如果键key在字典中,则返回key对应的值;如果该键不存在,则将key的值设为default值,默认为None,新的键值对加入到字典中。
- pop(key,default = None)如果键key在字典中,则去除相应值;如果该键不存在,则返回default在参数的值,默认为None.
- update()添加字典的项,或更新字典已有键的值。
items()
values()
keys() - copy()获得字典的一个副本
- clear()清空字典
集合
创建集合:
set(组合数据类型)
frozenset()
集合的特点
一个无序不重复的元素的组合
集合中的元素必须是不可变类型,即必须是可哈希的(不可改变对象都是可哈希的)。
- 可变集合(set)
- 不可变集合(frozenset)
集合的方法
面向可变集合:
add()
remove()
discard()
update()
clear()
集合的基本操作
交&
并|
补^
差-
函数
- 内建函数:指包含在__builtins__模块中的函数,安装完python后可直接使用
- 标准库:需要先导入模块再使用函数,每个库有相关的一些函数
- 第三方库:非常多
- 用户自定义函数:有固定的定义、调用和参数传递方式等
函数的定义
def 函数名():
'''文档字符串'''
函数体
return 表达式1,表达式2...
函数的参数
- 位置实参
- 关键字实参(必须将关键字参数放在位置参数后面)
- 默认参数(非默认参数必须在默认参数之前)
- 可变长参数–可变长位置参数:不确定参数总量时,允许传递一组数据给一个形参。
–可变长关键字参数:**参数必须出现在最后
lambda函数
lambda函数是一种匿名函数,没有具体的函数名
a = lambda x,y:x+y
__name__属性
每个Python文件在运行时都会有一个__name__属性
- 如果该文件作为模块被导入,__name__的值被自动设置为模块名
- 如果该文件作为程序直接运行,__name__的值被自动设置为字符串’main’
内置函数map()
接收一个函数和一个可迭代对象作为参数,把函数依次映射到可迭代对象的每个元素上,返回一个迭代器对象。
内置函数filter()
将函数作用到一个可迭代对象上,返回迭代器,用来筛选出使函数返回值为True的元素。
标准库functools中的函数reduce()
接收2个参数的函数以迭代累积的方式从左到右依次作用到一个可迭代对象的所有元素上。
类
class ClassName(object):
- ‘’’ 类文档字符串’’’(提供查询时的帮助信息。类名.doc)
- 类体(定义一些类的属性和方法,实例方法的第一个参数总是self,self指向调用该方法的实例本身,调用时不需要实参和self对应)
- 可以在类中直接定义变量作为类的数据属性(静态成员),在类创建后就可以使用,可以由类中的方法来更新,也可以在主程序中更新。类属性和实例无关,修改类属性需要使用类型。
(注:类和实例都是命名空间。类是类属性的命名空间,实例则是实例属性的命名空间。可采用类来访问类属性,如果是实例没有同名属性,则也可以通过实例来访问类属性,但是使用实例属性来修改类属性是有问题的,因此修改类属性需要使用类名,而不是实例名。)
实例的__dict__属性由一个字典组成,包含一个实例的所有属性及值,键是属性名,值是属性相应的数据值。
_ _ new _ _()创建对象,分配内存
_ _ init _ _()方法永远会在对象创建完成后被Python自动调用
_ _ del _ _()方法,是在Python自动释放对象之前最后一个调用的方法,当对象引用计数减少到0时,Python会自动释放对象,而程序执行退出或显示调用del都会减少引用计数
重写(overriding,子类改写父类的方法,从而部分地改变父类的行为)
重定义(redefine,修改参数并改变功能)
重载(overloading,有相同方法名但参数列表不同,根据参数类型和个数选择方法,一般在同一个类中实现)
访问控制
默认情况下,python类的成员属性和方法都是public。
“访问控制符”来限定成员函数的访问:
以双下划线开头,且不以双下划线结束的属性是私有的。
(__var属性会被_classname__var替换,防止父类与子类中的同名相冲突,限定仅在类内部可见)
(不能直接访问私有属性,但可以在方法中访问)
以单下划线开头,且不以单下划线结束的属性是受保护的。
异常
- try-except语句
try:
被检测的语句块
except Exception:
异常处理语句块
try:
num1 = int(input('Enter the first number:'))
num2 = int(input('Enter the second number:'))
print(num1/num2)
except ValueError:
print('Please input a digit!')
多个except语句捕捉异常
一个except块捕捉多个异常
空except子句:不推荐,不知道具体的异常原因。通常解决办法是在except子句后面加上as子句,利用as子句获知具体的错误原因。
- else子句
如果在try块中没有异常引发,则else子句被执行。
循环中的else子句:正常结束循环,则执行else中的代码。 - finally子句
finally子句可以用在try语句中,无论是否发生异常,finally子句中的语句块都要被执行 - raise语句
除了由python解释器引发异常外,还可以利用raise语句主动引发异常