脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 基于python for in if 连着写与分开写的区别说明

基于python for in if 连着写与分开写的区别说明

2021-09-27 00:46woailyoo0000 Python

这篇文章主要介绍了基于python for in if 连着写与分开写的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下:

?
1
2
3
4
5
6
links.extend(link for link in get_links(html) if re.match(link_regex, link))
# 上面的语句分开写,如下
# 但下面需要使用links.append,如果依然使用links.extend会出现错误的结果
for link in get_links(html):
  if re.match(link_regex, link):
     links.append(link)

让我们用ipython做个实验:

基于python for in if 连着写与分开写的区别说明

由上图可以看出,for in if 连击推导式隐式的将link由str转变为了list,而分开写是不会帮我们转换的,所以需要使用append把整个str加入到list.

补充:python的for i in list 陷阱

?
1
2
3
4
d = [1,2,3,4,5]
for i in d:
  d.remove(i)
print d

结果是 :

?
1
[2, 4]

这个陷阱比较隐蔽,我再用白盒子测试的时候,发现了这个bug,大致原因就是remove d[0]之后,i 自动变成了 d[1], 但是 d已经变成了 d[2,3,4,5],所以i=d[1]就悲催的指向了3,跳过了2!

看来python还是要注意了解底层实现啊!

解决办法是

?
1
2
3
4
d = [1,2,3,4,5]
for i in d[:]:
  d.remove(i)
print d

就可以实现边遍历边删除了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/woailyoo0000/article/details/79285397

延伸 · 阅读

精彩推荐