基于python for in if 连着写与分开写的区别说明
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做个实验:

由上图可以看出,for in if 连击推导式隐式的将link由str转变为了list,而分开写是不会帮我们转换的,所以需要使用append把整个str加入到list.
补充:python的for i in list 陷阱
d = [1,2,3,4,5]for i in d: d.remove(i)print d
结果是 :
[2, 4]
这个陷阱比较隐蔽,我再用白盒子测试的时候,发现了这个bug,大致原因就是remove d[0]之后,i 自动变成了 d[1], 但是 d已经变成了 d[2,3,4,5],所以i=d[1]就悲催的指向了3,跳过了2!
看来python还是要注意了解底层实现啊!
解决办法是d = [1,2,3,4,5]for i in d[:]: d.remove(i)print d
就可以实现边遍历边删除了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持好吧啦网。如有错误或未考虑完全的地方,望不吝赐教。
相关文章:
1. 使用PHP实现实时数据可视化功能的示例详解2. 一文总结Vue和React的异同3. 解决vue3中from表单嵌套el-table时填充el-input,v-model不唯一问题4. Vue2 中的数据劫持简写示例5. 详解Python requests模块6. ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页7. uni-app结合.NET 7实现微信小程序订阅消息推送8. Vue实现动态路由导航的示例9. set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能对比10. js中textContent、innerText和innerHTML的用法以及区别

网公网安备