python杂记
其他学习中碰到的python知识,做一个杂烩记录
迭代器和可迭代对象
迭代器是一个带状态的对象,它能在你调用next()
方法时返回容器中的下一个值,任何实现了__iter__()
和__next__()
方法的对象都是迭代器,__iter__()
返回迭代器自身,__next__()
返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration
异常。
1 | class Fab(object): |
生成器
了解了迭代器之后,我们来看下生成器,普通函数用return
返回一个值,还有一种函数用yield
返回值,这种函数叫生成器函数。函数被调用时会返回一个生成器对象。生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅,它不需要像普通迭代器一样实现__iter__()
和__next__()
方法了,只需要一个yield
关键字。生成器一定是迭代器(反之不成立),因此任何生成器也是一种懒加载的模式生成值。
yield
就是return
返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。next
方法和send
方法都可以返回下一个元素,区别在于send
可以传递参数给yield
表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值。
1 | def fab(max): |
列表list
包含以下函数:
序号 | 函数 |
---|---|
1 | len(list) 列表元素个数 |
2 | max(list) 返回列表元素最大值 |
3 | min(list) 返回列表元素最小值 |
4 | list(seq) 将元组转换为列表 |
包含以下方法:
序号 | 方法 |
---|---|
1 | list.append(obj) 在列表末尾添加新的对象 |
2 | list.count(obj) 统计某个元素在列表中出现的次数 |
3 | list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
4 | list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 |
5 | list.insert(index, obj) 将对象插入列表 |
6 | list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
7 | list.remove(obj) 移除列表中某个值的第一个匹配项 |
8 | list.reverse() 反向列表中元素 |
9 | list.sort( key=None, reverse=False) 对原列表进行排序 |
10 | list.clear() 清空列表 |
11 | list.copy() 复制列表 |
元组tuple
元组包含了以下内置函数
序号 | 方法及描述 | 实例 |
---|---|---|
1 | len(tuple) 计算元组元素个数。 | >>> tuple1 = ('Google', 'Runoob', 'Taobao') >>> len(tuple1) 3 >>> |
2 | max(tuple) 返回元组中元素最大值。 | >>> tuple2 = ('5', '4', '8') >>> max(tuple2) '8' >>> |
3 | min(tuple) 返回元组中元素最小值。 | >>> tuple2 = ('5', '4', '8') >>> min(tuple2) '4' >>> |
4 | tuple(iterable) 将可迭代系列转换为元组。 | >>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu'] >>> tuple1=tuple(list1) >>> tuple1 ('Google', 'Taobao', 'Runoob', 'Baidu') |
元组中元素不可修改
range函数
1 | range(stop) |
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
with 关键字
(1)紧跟with后面的语句被求值后,返回对象的“_enter_()”方法被调用,这个方法的返回值将被赋值给as后面的变量;
(2)当with后面的代码块全部被执行完之后,将调用前面返回对象的“–exit–()”方法。
with工作原理代码示例:
1 | class Sample: |
代码的运行结果如下:
1 | in __enter__ |
可以看到,整个运行过程如下:
(1)enter()方法被执行;
(2)enter()方法的返回值,在这个例子中是”Foo”,赋值给变量sample;
(3)执行代码块,打印sample变量的值为”Foo”;
(4)exit()方法被调用;
星号的使用
-
单星号:解包器,传参时用,将列表之类的容器解包后传递出多个变量
1
2
3
4
5
6a = [1, 2, 3]
def func(a, b, c) :
print(a, b, c)
func(*a) -
双星号:打包器,函数定义时用,将传入的参数打包为字典
1
2
3
4
5def func(**a) :
for i in a.items() :
print(i)
func(x = 1, y = 3)