请选择 进入手机版 | 继续访问电脑版

[python] Python 循环函数详细 先容

[复制链接]
查看50 | 回复9 | 2021-9-13 14:13:55 | 显示全部楼层 |阅读模式
目次

一、循环函数

1、for循环

for循环必要 预先设定好循环的次数(n),然后实行 从属 于for的语句n次。

基本构造是

  1. for 元素 in 序列:
  2. statement
复制代码

举例来说,我们编辑一个叫forDemo.py的文件

  1. for a in [3,4.4,'life']:
  2. print a
复制代码

这个循环就是每次从表[3,4.4,'life'] 中取出一个元素(回忆:表是一种序列),然后将这个元素赋值给a,之后实行 从属 于for的操作(print)。

先容 一个新的Python函数

  1. range(),
复制代码
来帮助你建立表。

  1. idx = range(5)
  2. print idx
复制代码

可以看到idx是[0,1,2,3,4]

这个函数的功能是新建一个表。这个表的元素都是整数,

  1. 从0开始,下一个元素比前一个大1, 直到函数中所写的上限 (不包括该上限本身)
复制代码

(关于

  1. range(),
复制代码
还有丰富用法,有爱好 可以查阅,
  1. Python 3
复制代码
中,
  1. range()
复制代码
用法有变化,见品评 区)

举例:

  1. for a in range(10):
  2. print a**2
复制代码

2、while循环

while的用法是

  1. while 条件:
  2. statement
复制代码

while会不停地循环实行 从属 于它的语句,直到条件为假(False)

举例:

  1. while i < 10:
  2. print i
  3. i = i + 1
复制代码

3、停止 循环

  1. [code]continue :
复制代码
在循环的某一次实行 中,假如 遇到
  1. continue
复制代码
, 那么跳过这一次实行 ,举行 下一次的操作
  1. break  :
复制代码
制止 实行 整个循环[/code]
  1. for i in range(10):
  2. if i == 2:
  3. continue
  4. print i
复制代码

当循环实行 到

  1. i = 2
复制代码
的时间 ,if条件成立,触发
  1. continue
复制代码
, 跳过本次实行 (不实行
  1. print
复制代码
),继续举行 下一次实行 (
  1. i = 3
复制代码
)。

  1. for i in range(10):
  2. if i == 2:
  3. break
  4. print i
复制代码

当循环实行 到

  1. i = 2
复制代码
的时间 ,if条件成立,触发break, 整个循环制止 。

二、循环计划

1、range()

在Python中,

  1. for
复制代码
循环后的in跟随一个序列的话,循环每次使用 的序列元素,而不是序列的下标。

之前我们已经使用 过

  1. range()
复制代码
来控制
  1. for
复制代码
循环。现在 ,我们继续开发
  1. range
复制代码
的功能,以实现下标对循环的控制:

  1. S = 'abcdefghijk'
  2. for i in range(0,len(S),2):
  3. print S[i]
复制代码

在该例子中,我们使用

  1. len()
复制代码
函数和
  1. range()
复制代码
函数,用i作为S序列的下标来控制循环。在
  1. range
复制代码
函数中,分别定义上限,下限和每次循环的步长。这就和C语言中的
  1. for
复制代码
循环相类似 了。

2、enumerate()

使用

  1. enumerate()
复制代码
函数,可以在每次循环中同时得到下标和元素:

  1. S = 'abcdefghijk'
  2. for (index,char) in enumerate(S):
  3. print index
  4. print char
复制代码

实际 上,

  1. enumerate
复制代码
()在每次循环中,返回的是一个包含两个元素的定值表(
  1. tuple
复制代码
),两个元素分别赋予
  1. index
复制代码
  1. char
复制代码

3、zip()

假如 你多个等长的序列,然后想要每次循环时从各个序列分别取出一个元素,可以使用 zip()方便地实现:

  1. ta = [1,2,3]
  2. tb = [9,8,7]
  3. tc = ['a','b','c']
  4. for (a,b,c) in zip(ta,tb,tc):
  5. print(a,b,c)
复制代码

每次循环时,从各个序列分别从左到右取出一个元素,合并成一个tuple,然后tuple的元素赋予给a,b,c

zip()函数的功能,就是从多个列表中,依次各取出一个元素。每次取出的(来自不同列表的)元素合成一个元组,合并成的元组放入zip()返回的列表中。zip()函数起到了聚合列表的功能。

我们可以分解聚合后的列表,如下:

  1. ta = [1,2,3]
  2. tb = [9,8,7]
  3. # cluster
  4. zipped = zip(ta,tb)
  5. print(zipped)
  6. # decompose
  7. na, nb = zip(*zipped)
  8. print(na, nb)
复制代码

三、循环对象

这一讲的紧张 目标 是为了大家在读Python程序的时间 对循环对象有一个基本概念。

循环对象的并不是随着

  1. Python
复制代码
的诞生就存在的,但它的发展灵敏 ,特殊 是
  1. Python 3x
复制代码
的期间 ,循环对象正在成为循环的标准情势 。

1、什么是循环对象

循环对象是如许 一个对象,它包含有一个

  1. next()
复制代码
方法
  1. (__next__()
复制代码
方法,
  1. 在python 3x
复制代码
中), 这个方法的目标 是举行 到下一个结果 ,而在竣事 一系列结果 之后,举出
  1. StopIteration
复制代码
错误。

当一个循环布局 (比如for)调用循环对象时,它就会每次循环的时间 调用

  1. next()
复制代码
方法,直到
  1. StopIteration
复制代码
出现,
  1. for
复制代码
循环汲取 到,就知道循环已经竣事 ,制止 调用next()。

假设我们有一个test.txt的文件:

  1. 1234
  2. abcd
  3. efg
复制代码

我们运行一下python下令 行:

  1. >>>f = open('test.txt')
  2. >>>f.next()
  3. >>>f.next()
  4. ...
复制代码

不断输入f.next(),直到末了 出现StopIteration

  1. open()返回的实际上是一个循环对象,
复制代码
包含有next()方法。而该next()方法每次返回的就是新的一行的内容,到达文件末端 时举出StopIteration。如许 ,我们相当 于手工举行 了循环。

自动 举行 的话,就如下:

  1. for line in open('test.txt'):
  2. print line
复制代码

在这里,for布局 自动 调用next()方法,将该方法的返回值赋予给line。循环知道出现StopIteration的时间 竣事 。

相对于序列,用循环对象的好处在于:不用在循环还没有开始的时间 ,就天生 好要使用 的元素。所使用 的元素可以在循环过程中逐次天生 。如许 ,节省 了空间,进步 了服从 ,编程更机动 。

2、迭代器

从技术上来说,循环对象和for循环调用之间还有一个中心 层,就是要将循环对象转换成

  1. 迭代器(iterator)。
复制代码
这一转换是通过使用 iter()函数实现的。但从逻辑层面上,常常可以忽略这一层,以是 循环对象和迭代器常常相互指代对方。 

3、天生 器

天生 器(generator)的紧张 目标 是构成一个用户自定义的循环对象。

天生 器的编写方法和函数定义类似 ,只是在

  1. return
复制代码
的地方
  1. 改为yield
复制代码
。天生 器中可以有多个
  1. yield
复制代码
。当天生 器遇到 一个
  1. yield
复制代码
时,会停息 运行天生 器,返回
  1. yield
复制代码
后面的值。当再次调用天生 器的时间 ,会从刚才停息 的地方继续运行,直到下一个
  1. yield
复制代码
。天生 器自身又构成一个循环器,每次循环使用 一个
  1. yield
复制代码
返回的值。

下面是一个天生 器:

  1. def gen():
  2. a = 100
  3. yield a
  4. a = a*8
  5. yield a
  6. yield 1000
复制代码

该天生 器共有三个

  1. yield
复制代码
, 假如 用作循环器时,会举行 三次循环

  1. for i in gen():
  2. print i
复制代码

再思量 如下一个天生 器:

  1. def gen():
  2. for i in range(4):
  3. yield i
复制代码

它又可以写成天生 器表达式(Generator Expression):

  1. G = (x for x in range(4))
复制代码

天生 器表达式是天生 器的一种简便的编写方式。读者可进一步查阅。

4、表推导

表推导

  1. (list comprehension)
复制代码
是快速天生 表的方法。它的语法简单,很有实用价值。

 假设我们天生 表L:

  1. L = []
  2. for x in range(10):
  3. L.append(x**2)
复制代码

以上产生了表L,但实际 上有快捷的写法,也就是

  1. 表推导
复制代码
的方式:

  1. L = [x**2 for x in range(10)]
复制代码

这与天生 器表达式类似 ,只不过用的是

  1. 中括号
复制代码

(表推导的机制实际 上是使用 循环对象,有爱好 可以查阅。)

到此这篇关于Python 循环函数详细 先容 的文章就先容 到这了,更多干系 Python 循环函数内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 关儿1 | 2021-9-26 18:20:58 | 显示全部楼层
今天怎么了,什么人都出来了!
回复

使用道具 举报

avatar 东阿制造 | 2021-10-3 04:07:15 | 显示全部楼层
admin楼主你想太多了!
回复

使用道具 举报

avatar 123457848 | 2021-10-3 06:47:12 | 显示全部楼层
admin楼主的帖子实在是写得太好了。文笔流畅,修辞得体!
回复

使用道具 举报

avatar 身无分文的少年 | 2021-10-5 06:04:44 | 显示全部楼层
不是惊喜,是惊吓!
回复

使用道具 举报

收藏了,以后可能会用到!
回复

使用道具 举报

支持一下!
回复

使用道具 举报

avatar 纆g | 4 天前 | 显示全部楼层
admin楼主人气很旺!
回复

使用道具 举报

avatar HY107 | 4 天前 | 显示全部楼层
admin楼主的病已经好了百分之六十二了!
回复

使用道具 举报

admin楼主内心很强大!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则