python中for循环放在后面要怎么理解?

作者&投稿:弓试 (若有异议请与网页底部的电邮联系)
请教Python 这个类for循环怎么理解?~

在python语言中,for in 循环本身会自动调用对象的__next__()函数,直到遇到StopIteration这个异常退出循环,每次执行一次__next__()函数,并且将返回值赋给for后面的变量。
程序是这么运行的
for n in Fib():#Fib()是一个类,调用类名相当于定义一个对象
#也可以写成
#f=Fib()
#for n in f:
由于Fib()实现了,__next__()函数,自然要调用这个__next__()函数,结果是
self.a, self.b = self.b, self.a + self.b # 第一次,这句话执行后self.a=1,self.b=1
if self.a > 100000: #第一次不满足条件,因为self.a=1
raise StopIteration();#第一次不执行
return self.a # 返回1
由于第一次没有raise StopIteration没执行,所以继续下个循环。
self.a, self.b = self.b, self.a + self.b # 第二次,这句话执行后self.a=1,self.b=2
if self.a > 100000: #第二次不满足条件,因为self.a=1
raise StopIteration();#第二次不执行
return self.a # 返回1,输出1
由于第三次没有raise StopIteration没执行,所以继续下个循环。
self.a, self.b = self.b, self.a + self.b # 第三次self.a=2,self.b=3
if self.a > 100000: #第三次不满足条件,因为self.a=2
raise StopIteration();#第三次不执行
return self.a # 返回2,输出2
由于第四次没有raise StopIteration没执行,所以继续下个循环。
self.a, self.b = self.b, self.a + self.b # 第四次self.a=3,self.b=5
if self.a > 100000: #第四次不满足条件,因为self.a=3
raise StopIteration();#第四次不执行
return self.a # 返回3,输出3
...........一直循环,直到self.a大于100000
其实这个函数是返回斐波那契数列的一个类。
不明白可追问。

程序中的else语句是便于处理某种行为,在循环的正常终止时执行:即以return或者break方式退出循环将会忽略else语句;存在continue语句将会执行else。我看了一遍又一遍也只知晓这个,但我一直记不起else在何时会被执行。
是永远被执行?顾名思义在循环失效时?在正常结束时?碰到return语句退出循环时?
在关键词选择上的不确定性让我很懊恼,我发现else使用上不确定性很大。我的问题不是“这个关键词会被用的目的”,而是怎么把else的语法弄清楚并且记住它。
我确定这能引起相当数量的讨论,而且我能想象这个关键词选择与try else的语法使用上具有一致性。也许基于这个原因选择else能够辨别它的功能,并且更容易记忆。

i等于9因为闭包,lambda生成之后i引用的就是for循环中的i

建议你看一下python的列表生成器,

f = [(lambda n : i + n) for i in range(10)] 等同于

f=[]

for i in range(10)

f.append(lambda n : i + n)

下面是相关内容

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):

>>> range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []>>> for x in range(1, 11):...    L.append(x * x)
...>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

三层和三层以上的循环就很少用到了。

运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

>>> import os # 导入os模块,模块的概念后面讲到>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']

for循环其实可以同时使用两个甚至多个变量,比如dict的iteritems()可以同时迭代key和value:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }>>> for k, v in d.iteritems():...     print k, '=', v... y = B
x = A
z = C

因此,列表生成式也可以使用两个变量来生成list:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }>>> [k + '=' + v for k, v in d.iteritems()]
['y=B', 'x=A', 'z=C']

最后把一个list中所有的字符串变成小写:

>>> L = ['Hello', 'World', 'IBM', 'Apple']>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

小结

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

思考:如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:

>>> L = ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>AttributeError: 'int' object has no attribute 'lower'

使用内建的isinstance函数可以判断一个变量是不是字符串:

>>> x = 'abc'>>> y = 123>>> isinstance(x, str)True>>> isinstance(y, str)False

请修改列表生成式,通过添加if语句保证列表生成式能正确地执行。




python中的for i in range怎么用
python for i in range是用来for循环遍历的。python中range 是个函数,range() 函数可创建一个整数列表,python中用来在for循环中遍历。用法如: for i in range (1,3)。语法格式:range(start, stop[, step]),分别是起始、终止和步长。range()函数返回的对象的行为都很像一个列表,但是它确实...

python中的for i in range怎么用
for i in range(a,b,c)a为循环开始的数字(可不填,默认为0),b为循环结束的后一位(c为正数时)的数字,c为步进的距离和方向,默认为1。for i in range(1, 101,1):print i range(1, 101)表示从1开始,到101为止(不包括101),取其中所有的整数。for i in range(1, 101)就是说...

python中for循环放在后面要怎么理解?
i等于9因为闭包,lambda生成之后i引用的就是for循环中的i 建议你看一下python的列表生成器,f = [(lambda n : i + n) for i in range(10)] 等同于 f=[]for i in range(10)f.append(lambda n : i + n)下面是相关内容 列表生成式即List Comprehensions,是Python内置的非常简单却强大的...

python中如何让一段代码重复执行?
Python中重复执行一段代码的方法有很多种,以下是其中一些常用的方法:1. 使用for循环 使用for循环可以重复执行一段代码指定的次数,如下所示:```python for i in range(10):print("Hello, world!")```这段代码会重复执行10次,每次都会输出"Hello, world!"。2. 使用while循环 使用while循环可以...

python 如何用for循环 写一个三角形?
代码如下:for i in range(1,6):print (2*i-1)*'.'Python for 循环语句流程图:

python中如何用for语句写出从1的阶乘到20的阶乘的加和?
def sum_factorial(start, stop): # 递归求阶乘 def factorial(n): if n == 0: return 1 return n * factorial(n-1) # 生成器解析式生成各个数的阶乘,然后再求和 return sum(factorial(i) for i in range(start, stop+1))# 调用函数,测试代码print(sum_factorial(1, 20...

python怎么结束一个for循环
这里首先打开pycharm编辑器,新建一个python文件:2、然后写入演示小程序,这里输出0到10的数,当数字等于5时结束整个for循环,否则则依次打印出所有的数字:3、最后运行一下程序,可以直观的看到程序的for循环执行到5时就强制结束了,输出的结果只有前5个数:...

python中 for 循环的in 是一定要的么?
Python for循环中in是必须的。Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来。names = ['Michael', 'Bob', 'Tracy']for name in names:print name 执行结果:Michael Bob Tracy 第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如...

python的for循环语句怎么写
range(stop) -> range object range(3) -> (0, 1, 2)range(start, stop[, step]) -> range object range(1, 6) -> (1, 2, 3, 4, 5)range(1, 6, 2) -> (1, 3, 5)上面的是range的使用方法, 结合for语句代码: for i in range(3): print(i)输出结果:0 1 2 循环其它...

python中怎么确定for的范围?如果for循环底下行数很多怎么知道它的范围在...
python使用缩进表示代码范围。类似于C的花括号。for x in range(666): # x从这里开始 ... for y in range(777): # y从这里开始 ... # y到这里结束 # x到这里结束 # 其他代码...

洛江区17110685905: Python 中for循环和后面的语句一起执行就出错误,print和for单独执行就没问题.有知道的大神请指点! -
牢施力能: 你这是在用python自带的IDE(新手推荐使用PyCharm, 自带的对新手不友好) 自带IDE每一条命令(也就是每个">>> "后面的代码), 只能走一条代码 你这里是两条(for循环和print函数), 所以自带ide不支持这样 你需要把这两条代码分开, 和下图类似:

洛江区17110685905: python中for循环怎么用 -
牢施力能: 1. for 循环介绍复制代码代码如下:>>> li = ['a', 'b', 'e'] >>> for s in li: (1) ... print s (2) ae >>> print "\n".join(li) (3) ae(1) for 循环的语法同 list 解析相似.li 是一个 list,而 s 将从第一个元素开始依次接收每个元素的值. (2) 像 if 语句或其它任意...

洛江区17110685905: python for 语句怎么写 -
牢施力能: Python for循环控制语句一般格式及方法 for循环语句是python中的一个循环控制语句,任何有序的序列对象内的元素都可以遍历,比如字符串、列表List、元组等可迭代对像.之前讲过的if语句虽然和for语句用法不同,但可以用在for语句下做条件...

洛江区17110685905: for循环在什么情况下,下面跟花括号 -
牢施力能: 当for要执行的只是一条语句时,可以不要加花括号,除此之外,都要加花括号.“{}”是将多个语句放在一起成为一个语句块, 执行的时候将会把语句块的语句都执行 而不用“{}”只会执行 for 下面的一句但是,对与学习者 建议每用一个for都将 循环体用“{}”括起来,养成好的编码习惯.

洛江区17110685905: 小白请教Python的 嵌套For循环
牢施力能: 第一次执行第一条语句,x的值为-2,然后进入内循环. 执行第二条语句,z的值依次赋为1和-1,然后分别打印-21\n-2-1\n.(注意\n为换行符,python中每个print结束,系统自动加入一个换行符,如果print语句后面添加一个逗号:print x,z,,就不会打印换行符了). 第二次执行第一条语句,x的值为0,然后进入内循环. 执行第二条语句,z的值依次赋为1和-1,然后分别打印01\n0-1\n. 第三次执行第一条语句,x的值为2,然后进入内循环. 执行第二条语句,z的值依次赋为1和-1,然后分别打印21\n2-1\n.

洛江区17110685905: for循环(python) -
牢施力能: 区别很大的.... python是使用 缩进 (一般推荐使用4个空格) 来标注代码块 而非使用括号 第一段代码中for i_record in i_list: ...for u_record in u_list: 后面2个for语句处于同样的缩进 则表示他们的执行顺序是先后顺序 而第二段代码中 2个for语句则表示嵌套循环了

洛江区17110685905: Python中for语句是怎么用的 -
牢施力能: Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. 语法: for循环的语法格式如下: for iterating_var in sequence: statements(s)流程图: 实例: 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-for letter in 'Python': # 第一...

洛江区17110685905: python中的for i in range怎么用 -
牢施力能: for i in range(a,b,c) a为循环开始的数字(可不填,默认为0),b为循环结束的后一位(c为正数时)的数字,c为步进的距离和方向,默认为1. for i in range(1, 101,1): print i range(1, 101)表示从1开始,到101为止(不包括101),取其中所有的整...

洛江区17110685905: python中的for循环 -
牢施力能: 第一个问题你用的for-in,这样你的list没有一个序号,也就不能判断第一个元素了,像这样遍历的为什么不用for i in range(len(list))呢..如果你真的像这样,可以在循环外设置一个计数器,然后在循环里不断加一.. 第二个问题条件写 if type(i)==list:就可以了..

洛江区17110685905: 求问Python for循环语句 -
牢施力能: for a in range(1,101,2): print(a,end=“ ”)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网