Python系列教程(二十):内建函数和迭代器

    Python提供了很多函数可以实现很多功能,这些函数天生已经内置在python中,我们可以拿来既用,这些就叫内建函数,也叫built-in函数,它可以方便我们程序人员进行开发,比如前面已经接触过的:max(),min(),len()都属于内建函数,今天将介绍更多常用的内建函数的使用方法。

  一、常用的内建函数  

1、id(obj) -> int

    说明:如果obj是一个标识符,那么返回的是一个标识符所指向的对象的内存地址,如果是一个对象,那么直接返回这个对象的内存地址。常常用来判断两个标识符是否同指向一个对象

>>>a = 'abc'
>>>b = a

>>>id(a)
140170313231920
>>>id(b)
140170313231920
>>>id('abc')
140170313231920

#如果他们的id号一样,用‘is’判断返回的是True
>>>a is b
True

2、hash(hashable) -> int

    说明:计算一个可哈希对象的哈希值

#可哈希对象
>>>hash('abc')
-7245317982790060037

#不可哈希对象
>>>hash([1,3])
TypeError: unhashable type: 'list'

3、print(*value, sep=' ', end='\n',file=sys.stdout, flush=False) -> None

    说明:实现输出功能,默认是标准输出,打印到控制台

    sep:输出分隔符,默认空格

    end:输出换行符,默认‘\n’

>>>print('avc',['deff'],{13,4},sep='__')
avc__['deff']__{4, 13}

4、类型转换

    数值型:int(obj)、float(obj)、bool(obj)、complex(obj)

    数据结构:str(obj)、list(obj)、tuple(obj)、dict(obj)、set(obj)

    进制类型:bin(obj)、hex(obj)、oct(obj)

    这里就一个个演示了,功能就是转换成对应的函数名类型,转换的时候记住一点就可以了,这个obj是可以被你这个类型转换的,比如list(obj),这个obj是要求一个可迭代对象的。

5、issubclass(cls,class_or_tuple) -> Bool

    说明:判断cls是否class的子类,如果有多个类的话,把它放在一个元组当中,用法跟isinstance一样。

>>>issubclass(bool,int)
True

 6、abs(x) -> int

    说明:将一个x取绝对值。

>>>abs(-3.4)
3.4

7、pow(x,y) -> x**y 

    说明:返回xy的值

>>>pow(3,4)
81

8、sum(iterable[,start]) ->int

    说明:计算一个可迭代对象的所有元素的总和,可以指定开始位置

>>>sum(range(1,10,3),4)
16

    还有很内建函数,在前面已经介绍过的:type(),isinstance(),input(),len(),max(),min(),round(),range()这些也都是常见的内建函数,这里就不再做多介绍。

  二、可迭代对象和迭代器  

    前面已经接触过可迭代对象,可迭代器,生成器,因为它们3个之间有区别又有关联,所以初学的时候这3个的概念容易混淆,傻傻分不清,下面对这3个东东的概念再做一次总结。

    可迭代特性:能通过一次次调用然后返回一个个不同元素的特点。

    可迭代对象(Iterable)如果一个对象具有可迭代的特性,那它就是一个可迭代对象,在前面已经接触了很多,比如5中基础数据结构(str,tuple,list,set,dict),range(),生成器等等,它们都具备可迭代的特性,所有都是是可迭代对象,可迭代对象的常用用法就是用‘in’成员操作符去迭代对象。

    迭代器(iterator):迭代器本身也是一个对象,可以把它想象成一个数据容器,一个更高级别的数据容器,里面可以存放元组、列表、字典等等。而同样的,迭代器也具有可迭代的特性,所以迭代器也是一个可迭代对象,也可以使用‘in’操作符去遍历迭代器。

    生成器(generator):生成器前面也说过,可以把它想象成一个调一次回一个元素的数据容器。它也是一个迭代器,当然也是一个可迭代对象,同样还是可以用‘in’操作符去遍历生成器。

1、iter(iterable) -> iterator

    说明:将一个可迭代对象转换成一个迭代器,然后可以通过next()或者‘in’进行迭代

>>>iter1 = iter([1,3,5,7,9])
<list_iterator at 0x7f7bc7647ac8>

#使用next()方法手动调用
>>>next(iter1)
1
>>>next(iter1)
3

#使用for..in调用
>>>for i in iter1:
>>>    print(i,end='+')
1+3+5+7+9+

2、reversed(seq) -> Iterator

    说明:将一个有序数据结构的元素进行反转后,返回一个迭代器

#列表是可以反转
>>>for x in reversed(['a','b','c']):
>>>    print(x,end='__')
c__b__a__

#字典本来就是无序的,有什么倒序一说
>>>for x in reversed({'a':1,'b':2,'c':3}):
>>>    print(x,end='__')
TypeError: 'dict' object is not reversible

3、sorted(iterable[,key[,reverse]]) -> NewList

    说明:将一个可迭代对象的元素进行排序,默认是升序,然后返回一个新列表。

    key:传递一个函数,指定排序规则

    reverse:默认是升序,设置为True为降序。   

>>>sorted({'c':1, 'b':2, 'a':1})
['a', 'b', 'c']

>>>sorted({'c':1, 'b':2, 'a':1},reverse=True)
['c', 'b', 'a']

>>>sorted('142948',reverse=True)
['9', '8', '4', '4', '2', '1']

4、enumerate(iterable, start=0) -> Iterator

    说明:枚举类型,从一个可迭代对象中获取元素,并和它取出来的顺序数字(默认从0开始)构成一个二元组,最后返回一个迭代器。

#对有序数据结构进行枚举
>>>a = enumerate(['a','b','c'],10)
>>>list(a)
[(10, 'a'), (11, 'b'), (12, 'c')]

#对无序的数据结构进行枚举
>>>b =enumerate({'a':44,'b':55,'c':66})
>>>list(b)
[(0, 'a'), (1, 'b'), (2, 'c')]

5、zip(*iterable) -> iterator

    说明:zip被称作为拉链函数,它的作用是:可以把多个可迭代对象的元素按照1:1的比例取出,然后组成一个元组,最后封装到一个迭代器中并返回。zip函数具备木桶短板特性,因为它是从每个可迭代对象中按照1:1比例取出元素的,所以会取最短的那个可迭代对象的元素组合成元组。

>>>z1 = zip(range(3,9),['a','b','c','d'])
>>>list(z1)
[(3, 'a'), (4, 'b'), (5, 'c'), (6, 'd')]
Jimmy's Blog ,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.xjimmy.com/python-20-bulitin_iterator.html

Leave a Comment