序列
常用内置函数
1.list() 能把一个可迭代对象转换为一个列表
2.max() 返回一个参数集合或者序列中的最大值
3.sum() 返回一个数据类型的和
4.sorted() 返回一个全新的排序列表(默认从小到大),原来列表不会改变,区别于list.sort()
5.enumerate() 返回一个枚举对象,实现可迭代对象中每个元素及从0开始的序号共同构成一个二元组的列表。
6.zip() 用于创建一个聚合多个可迭代对象的迭代器。它将作为参数传入的每个可迭代对象的每个元素依次组合成元组,即第i个元组包含来自每个参数的第i个元素。
7.map() 函数根据提供的函数对指定的可迭代对象的每个元素进行运算,并将返回运算结果的迭代器。
8.filter()函数会根据提供的函数对指定的可迭代对象进行运算,并将运算结果为真的元素,以迭代器的形式返回。
9.
仅能使用+和* + :拼接 *:相当于多次拼接
id(s) 查看一个序列的id
is /not is 判断变量是否相等,in/not in 判断前一个元素是否在后一个元素中
del x[1:4] #删除序列中下标为1,2,3的元素
可迭代对象vs迭代器
迭代器一定是一个可迭代对象,可迭代对象可重复使用,迭代器只能使用一次。
1.iter() 将一个可迭代对象转换为一个迭代器
2.next() 逐个将迭代器中的元素取出来
迭代器中的元素都取出来后,会出现异常,异常不是错误,是程序员故意留下来的。
字典
1.创建字典
2.字典中最特殊的一个方法fromkeys()方法
fromkeys(iterable[,values]) 可以使用iterable指定的可迭代对象来创建一个新的字典,并将所有的值初始化为value参数指定的值。
可快速初始化某个字典
这里要注意的是,fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉
3.d.pop(参数:要移除的键) 删除字典中某个键
del d[元素] del d 删除字典,字典d不存在了,如果用d.clear则字典变成了一个空字典
4.修改字典中的值 update([other])
5.查找
6. items() 、keys()、values() 三个方法分别用于获取字典的键值对、键和值
7. 字典的嵌套
8.字典推导式
函数
1.函数文档和直接用‘#’为函数注释有什么不同?
给函数写文档是为了让别人更好的理解你的函数,是一个好习惯,会作为函数的一部分存储起来,和注释的功能是一样的
访问:
闭包
1.nonlocal:仅在函数中使用,用于内层嵌套函数对外层变量作用域的修改
例:为什么代码A没有报错,但代码B却报错了,应如何修改?
代码A:
def outside():
var=5
def inside():
var=3
print(var)
inside()
outside() #调用结果为3
代码B:
def outside():
var=5
def inside():
print(var)
var=3
inside()
outside() #调用报错,
原因:仔细一看报错的内容是:UnboundLocalError: local variable ‘var’ referenced before assignment,说的是变量 var 没有被定义就拿来使用,肯定错啦!
这里 outside() 函数里有一个 var 变量,但要注意的是,内嵌函数 inside() 也有一个同名的变量,Python 为了保护变量的作用域,故将 outside() 的 var 变量屏蔽起来,因此此时是无法访问到外层的 var 变量的。
修改如下:
def outside():
var=5
def inside():
nonlocal var
print(var)
var=8
inside()
outside() #打印5
装饰器
lambda
lambda是一个表达式并非语句,可以出现在Python语法不允许def语句出现的地方,但由于所有的功能代码都局限在一个表达式去实现,因此lambda通常用于实现较为简单的需求,就不用定义函数并取名,lambda是一个匿名函数
文件
完整语法格式:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode参数有:
file对象方法及描述:
方法 | 描述 |
---|---|
file.close() | 关闭文件,关闭后不能在进行读写 |
file.read([size]) | 从文件中读取指定字节数,若未指定或为负则读取所有 |
file.readline([size]) | 读取整行,包括 “\n” 字符。 |
file.readlines([sizeint]) | 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力 |
file.seek() | 设置文件当前位置 |
file.tell() | 返回文件当前位置 |
file.write(str) | 将字符串写入文件,返回的是写入的字符长度 |
file.writelines(sequence) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符 |
为什么for line in file:就直接访问的文件每一行呢?????
1.如何将一个文件对象(f)中的数据放进列表?
答:list(f)
2.如何迭代打印出文件对象f的每一行数据?
答:直接用for语句把文件对象迭代出来
for each_line in f:
print(each_line)