Python中的for...else语句可以不写else吗?

学习过程中遇到这个问题来交流下。

首先我们来看这个循环:

for i in range(1,6):
    for k in range(1,i):
        print (k,end='')#可以设置end参数为空字符串防止输出一个字符就自动换行
    else:
         print ("\n")

输出结果:

1

12

123

1234

再来看这个:

for i in range(1,6):
    for k in range(1,i):
        print (k,end='')
    print ("\n")

输出结果:

1

12

123

1234

那结果是可以吗?来看下for...else的说明:

在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,如果没有break,加不加else都一样。

如果不理解可以看这个比较:

没有else:

for num in range(10,15):  # 迭代 10 到 15 之间的数字
   for i in range(2,num): # 根据因子迭代
      if num%i == 0:      # 确定第一个因子
         j=num/i          # 计算第二个因子
         print('%d 等于 %d * %d' % (num,i,j))
         break            # if语句的一部分,执行完if就跳出当前循环及回到上一级for循环
   print (num, '是一个质数')

结果为:

10 等于 2 * 5
10 是一个质数
11 是一个质数
12 等于 2 * 6
12 是一个质数
13 是一个质数
14 等于 2 * 7
14 是一个质数

有else:

for num in range(10,15):  # 迭代 10 到 15 之间的数字
   for i in range(2,num): # 根据因子迭代
      if num%i == 0:      # 确定第一个因子
         j=num/i          # 计算第二个因子
         print('%d 等于 %d * %d' % (num,i,j))
         break            # if语句的一部分,执行完if就跳出当前循环及回到上一级for循环
   else:                  # 循环的 else 部分
      print (num, '是一个质数')

结果为:

10 等于 2 * 5
11 是一个质数
12 等于 2 * 6
13 是一个质数
14 等于 2 * 7

可以这样理解:当你用 for 循环执行语句时,如果执行得到需要的结果就提前退出,如果执行完了还没得到需要的结果就以另外一种形式通知调用者,及执行else里面的语句。因此else与break搭配才能体现价值,其他时候谨慎使用。

引用了以下网页的说明或代码:

http://www.runoob.com/python/python-for-loop.html

https://baijiahao.baidu.com/s?id=1573720809777981&wfr=spider&for=pc

 

展开阅读全文

没有更多推荐了,返回首页