朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow
声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!
除了for循环外,还有很多工具都有自动迭代的能力。
下面是经典的for循环自动迭代文件的代码:
>>>for line in open('script1.py'): # Use file iterators
... print(line.upper(),end='')
...
IMPORT SYS
PRINT(SYS.PATH)
X = 2
PRINT(2 ** 33)
除了for循环外,列表解析、in成员关系测试、map内置函数以及像sorted和zip调用这样的内置函数也都使用了迭代协议。当应用于一个文件时,所有这些使用文件对象的迭代器都自动地按行扫描:
>>>uppers = [line.upper() for line in open('script1.py')]
>>>uppers
['IMPORT SYS\n','PRINT(SYS.PATH)\n','X = 2\n','PRINT(2 ** 33)\n']
>>>map(str.upper,open('script1.py')) # map is an iterable in 3.0
还有些函数其实也变相地使用了迭代功能。例如,sum调用计算任何可迭代对象中的总数,如果一个可迭代对象中任何的或所有的项为真的时候,any和all内置函数分别返回True;max和min分别返回一个可迭代对象中最大和最小的项。如下示例中的所有工具接受任何可迭代对象作为一个参数,并且使用迭代协议来扫描它,但返回单个的结果:
>>>sum([3,2,4,1,5,0]) # sum expects numbers only
15
>>>any(['spam','','ni'])
True
>>>all(['spam','','ni'])
False
>>>max([3,2,5,1,4])
5
>>>min([3,2,5,1,4])
1
list和tuple内置函数,字符串join方法也会使用对象的迭代协议:
>>>list(open('script1.py'))
['import sys\n','print(sys.path)\n','x = 2\n','print(2 ** 33)\n']
>>>tuple(open('script1.py'))
('import sys\n','print(sys.path)\n','x = 2\n','print(2 ** 33)\n')
>>>'&&'.join(open('script1.py'))
'import sys\n&&print(sys.path)\n&&x = 2\n&&print(2 ** 33)\n'
>>>a,b,c,d = open('script1.py')
>>>a,d
('import sys\n','print(2 ** 33)\n')
>>>a,*b = open('script1.py') # 3.0 extended form
>>>a,b
('import sys\n',['print(sys.path)\n','x = 2\n','print(2 ** 33)\n'])
另外,在函数调用中可能会用到的一种特殊的*arg形式,它也会使用迭代协议把一个集合的值解包为单个的参数:
>>>def f(a,b,c,d): print(a,b,c,d,sep='&')
...
>>>f(1,2,3,4)
1&2&3&4
>>>f(*[1,2,3,4]) # Unpacks into arguments
1&2&3&4
>>>f(*open('script1.py')) # Iterates by lines too!
import sys
&print(sys.path)
&x = 2
&print(2 ** 33)