10.内建函数
2020-12-17 本文已影响0人
Stone_説
1.内建函数
2.sorted函数
3.reversed函数
4.enumerate函数
5.zip函数
6.迭代器
1.内建函数
标识id
>>> id(1)
9736960
>>> a = [1,2,3]
>>> id(a)
140083621682944
哈希hash()
>>> hash(1)
1
>>> hash((1,2,3))
529344067295497451
>>> hash(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
isinstance(obj,class_or_tuple)
判断对象obj是否属于某种类型或者元组中列出的某个类型
isinstance(True,int)
>>> isinstance(1,int)
True
>>> isinstance(1,(int,float))
True
issubclass(cls,class_or_tuple)
判断对象cls是否是某种类型的子类或元组中列出的某个类型的子类
issubclass(bool,int)
>>> issubclass(bool,int)
True
>>> issubclass(bool,float)
False
2.sorted函数
sorted(iterable[,key][,reverse])排序
返回一个新的列表,默认升序
reverse是反转
>>> sorted([1, 3, 5])
[1, 3, 5]
>>> sorted([1, 3, 5], reverse=True)
[5, 3, 1]
>>> sorted({'c':1, 'b':2, 'a':1})
['a', 'b', 'c']
3.reversed函数
翻转reversed(seq)
返回一个翻转元素的迭代器
>>> list(reversed("13579"))
['9', '7', '5', '3', '1']
>>> for x in reversed(['c','b','a']):
... print(x)
a
b
c
>>> reversed(sorted({1, 5, 9}))
<list_reverseiterator object at 0x7f67c281f130>
>>> p = reversed(sorted({1, 5, 9}))
>>> next(p)
9
...
>>> next(p)
1
>>> next(p)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
4.enumerate函数
枚举enumerate(seq,start=0)
迭代一个序列,返回索引数字和元素构成的二元组
start表示索引开始的数字,默认是0
>>> for x in enumerate([2,4,6,8]):
... print(x)
(0, 2)
...
(3, 8)
>>> for x in enumerate("abcdef",10):
... print(x,end=" ")
(10, 'a') (11, 'b') (12, 'c') (13, 'd') (14, 'e') (15, 'f')
5.zip函数
拉链函数zip(*iterables)
像拉链一样,把多个可迭代对象合并在一起,返回一个迭代器
将每次从不同对象中取到的元素合并成一个元组
>>> list(zip(range(10),range(10)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]
>>> list(zip(range(3),range(3)))
[(0, 0), (1, 1), (2, 2)]
>>> list(zip(range(3),range(3),range(1),range(3)))
[(0, 0, 0, 0)]
>>> dict(zip(range(3),range(3)))
{0: 0, 1: 1, 2: 2}
>>> {str(x):y for x,y in zip(range(3),range(3))}
{'0': 0, '1': 1, '2': 2}
6.迭代器
6.1迭代器和取元素iter(iterable)、next(iterator[,default])
iter将一个可迭代对象封装成一个迭代器
next对一个迭代器取下一个元素,如果全部元素都取过了,再次next会抛出StopIteration异常
>>> it = iter(range(5))
>>> next(it)
0
...
>>> next(it)
4
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> it = reversed([1,3,5])
>>> next(it)
5
...
1
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
6.2可迭代对象
能够通过迭代一次次返回不同元素的对象
可以迭代,但是未必有序,未必可索引
可迭代对象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器等
可以使用成员操作符in、not in、in本质上就是在遍历对象
>>> 3 in range(10)
True
>>> 3 in (x for x in range(10))
True
>>> {x:y for x,y in zip(range(4),range(4,10))}
{0: 4, 1: 5, 2: 6, 3: 7}
>>> 3 in {x:y for x,y in zip(range(4),range(4,10))}
True
>>> {x:y for x,y in zip(range(4),range(4,10))}
{0: 4, 1: 5, 2: 6, 3: 7}
>>> 4 in {x:y for x,y in zip(range(4),range(4,10))}
False
6.3迭代器
特殊的对象,一定是可迭代对象,具备可迭代对象的特征
通过iter方法把一个可迭代对象封装成迭代器
通过next方法,迭代迭代器对象
生成器对象,就是迭代器对象
>>> for x in iter(range(3)):
... print(x,end=" ")
0 1 2
>>> g = (x for x in range(3))
>>> type(g)
<class 'generator'>
>>> next(g)
0
...
>>> next(g)
2
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration