笔记
列表知识:
一个排列整齐的队伍,Python采用顺序表实现
列表内的个体称作元素,由若干元素组成列表
元素可以是任意对象(数字、字符串、对象、列表等)
列表内元素有顺序,可以使用索引
线性的数据结构
使用 [ ] 表示
列表是可变的
列表是非常重要的数据结构,对其内存结构和操作方法必须烂熟于心。
s=list()
s=[1,2,3,4,5]
增加方法:
增加单个元素:
append()
insert(index,object):在索引位置增加值
增加多个元素:
extend(iteratable)
+ 列表相加
* 列表乘一下,相当于做加法
删除方法:
remove() :就地修改原列表
pop():不添加索引,默认从尾部弹出
clear:清空列表
修改方法:
s=[1,2,3,4]
s[2] = 100
查询方法:
index(value,[start,[stop]]) :匹配第一个就返回索引
count():返回列表中匹配value的次数
index和count方法都是O(n)
随着列表数据规模的增大,而效率下降
列表长度:len()
列表复制 :copy shadowcopy .deepcopy
随机数:random()
元组tuple:
一个有序的元素组成的集合
使用小括号 ( ) 表示
元组是不可变对象
初始化
tuple() -> empty tuple
tuple(iterable) -> tuple initialized from iterable's items
t2 = (1,) # 必须有这个逗号
增删改:
元组元素的个数在初始化的时候已经定义好了,所以不能为元组增加元素、也不能从中删除元素、也不
能修改元素的内容。
查询方法:
跟列表一样
字符串:
先不写,已经记下了,忘记了再看
封装和结构:
a,b=(1,2)
右边至少是可迭代对象,记得左右相同
右边是个容器,有元素,个数要匹配
rest 剩余
a,*rest,b=1,2,3
rest=[2]
rest参数结构,是把剩余的拿走,返回list类型
partition:三元组
字典的方法:
s={'a':1,'b':2}
s['a']=10
s.get(a)
s.setdefault('c',666):设置c.如果有c,则拿C,如果没有,则拿缺省值,并且新增c元素
del s['a']
在循环字典的时候,可以用*rest缺省那个来拿想要的值
小结:
再以keys,values,items这3个方法迭代时,对字典的长度进行改变,是不可以的
keys,values,items 3个方法
列表解析式:一斜到低,带else的就不行
集合解析式
字典解析式
[i for i in range(5)] list(range(4)),[*range(5)]
解析式可以让i变化
lits(range(4)):可以利用map函数变身
def f(x):
return x*x
map(f,list)
chr():返回整数i对应的ASCII字符,与ord()作用相反
ord():返回单字符字符串的Unicode代码点
hex():转换一个整数对象为十六进制的字符串表示
bin():返回一个整数对象为2进制
oct():返回一个整数的八进制表示
生成器表达式:
外面的括号变为小括号(i for in in range(5))
生成器由生成器表达式得到
列表是可迭代对象,生成器也是可迭代对象
生成器也是迭代器的一种,但列表不是
迭代器特点:
1.一次性,不能回头
2.类似range,是惰性的,使用next()挤一下
3.for循环可以迭代,但是如果已经到头,for相当于迭代空容器,但是next不能迭代,如果使用next会抛出StopIeration
但是可以加缺省值next(x,666)
4.迭代器不可以索引
x=[i for i in range(100000)]
y=(j for j in range(1000000))
比较:
1.列表立即构建,元素都在了,可以反复使用;生成器对象立即产生,但是什么元素都没有
2.内存:列表元素内存立即都占用了;生成器在内存中只占用了一个生成器对象大小的内存
3.使用时,列表中元素就在那里了,随手拿;生成器才开始热身造元素,造好了返回
生成器对象由2种途径:1.生成器表达式:
sorted(可迭代对象,key=func,reverse=False)_
sorted([1,5,3])#立即返回全新列表,默认升序的
[1,3,5]
sorted(dict(a=1,b='22',c=200).values(),key=str)
str(1) > str('22')
1 '22' 200 转换完的结果只是用来排座次,不影响输出
[1,'22',200]
string.digits:包含数字0~9的字符串
string.letters:包含所有字母(大写或小写字符串,在python3.0中,使用string.ascii-letters代替)
string.lowercase:包含所有小写字母的字符串
string.printable:包含所有可打印字符的字符串
string.punctuation:包含所有标点的字符串
string.uppercase:包含所有大写字母的字符串
函数:
形参:
可以有缺省值,定义时,如果没有提供该参数,动态缺省值
5种
1.普通形参:可以有缺省值,2种传实参方式都可以用
2.*args可变仅位置形参,只能接受按照位置传入的参数,可以接受0个或任意个
3.**kwargs可变仅关键字形参,只能接受关键字传入的实参,可以接受0个或任意个
4.foo(*args,x,y)keyword-only形参,*args之后,只能接收仅仅关键字传入实参
5.fn(a,b,/)positional-only形参,/之前,仅仅接收位置传入参数
参数结构:
*对容器解构,按照位置传实参,字典取得是key
**只用于mapping,按照kv对实现关键字传参,Key要和形参对应
闭包:
自由变量:未在本地作用域中定义得变量,例如定义在内层函数外的外层函数的作用域中的变量
闭包:就是一个概念,出现在嵌套函数中,指的是内层函数引用到了外层函数的自由变量,就形成了闭包
global会定义为全局的,小心全局污染
nonlocal :如果在内层函数定义nonlocal,则是外层的c,不会是全局的
nonlocal:将变量标记为不在本地作用域定义,而是在上级的某一级局部作用域中定义,
但不能是全局作用域中定义
LEGB: local E:外层函数局部变量 ,Global ,Built-in
Local -> Enclosed(围住的,封闭的; 随函附上的; 附上的; 与外界隔绝的) -> Global -> Built-in
三句话:
对外不可见,向内穿透,就近原则
匿名函数:
lambda :只能是单行函数
生成器函数:
生成器对象:
1.生成器表达式,每一次生成器表达式执行一次都会得到一个全新的生成器对象
2.生成器函数,每一次函数调用都会得到全新的生成器对象,只有有yield语句的函数都是生成器函数函数
生成器函数每一次执行到yield这一句,把yield的值返回
return 非常强势,见到它函数就完了
浙公网安备 33010602011771号