巨坑的python机制:for...else
一般来说,for里面嵌套if的话,如果走完了if语句就不会走else语句,但是在python里面是会的!!!
举个例子:编写一个方法,找到所有为“天龙”的书籍,如果按照如下写法(book为列表,里面嵌套字典,字典的key分别为ID、name及address)
def find_book(name):
for i in book:
if name == i['name']:
print(i)
else:
print('没有此图书')
那么控制台输出的是:
可以看到他走完了if之后还会走else
百度了一下for...else的文章,对应内容如下:
但是如果break的话,其他方法如果调用此方法,则只能找到一条数据,因为找完第一条数据就break退出掉了,找了很多方法,最终解决方案如下:
思路如下:
1.定义一个新的列表,遍历原本存放书籍信息的列表,找到对应的图书则添加到新列表里面去
2.判断如果新列表长度大于0的话,则通过for循环遍历输出对应的图书信息
3.这样避免了其他方法调用的时候会break掉无法继续的情况,当然如果只是本身内部方法自己使用的话可以直接break掉
借鉴导师关于for..else的理解思路代码:
for i in range(0,10):
if i>10:
print('我是第一个for...else')
break
else:
print('晴天你好啊')
for i in range(0,10):
if i>5:
print('我是第二个for...else')
break
else:
print('晴天你好啊')
for i in range(10):
if i == 7:
print('我是第三个for...else')
pass
else:
print('not found')