重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站制作、莲花网络推广、微信小程序定制开发、莲花网络营销、莲花企业策划、莲花品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供莲花建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com本篇文章给大家分享的是有关Python中遇到的“坑”,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1.哪个是True,哪个是False?
这里要看三组代码:
# 第一组:
>>>a = 256 >>>b = 256 >>>a is b # 第二组: >>>a = 257 >>>b = 257 >>>a is b # 第三组: >>>a = 257,b = 257 >>>a is b
问题来了,这三组代码的运行结果分别是什么呢?答案是True、False和True。第一组和第三组结果是True好像没问题,那为什么第二组的结果是False呢?这里先用id()来查看一下a和b的地址是什么:
# 第一组: >>>id(a) >>>1426657040 >>>id(b) >>>1426657040 # 第二组: >>>id(a) >>>363389616 >>>id(b) >>>363392912 # 第三组: >>>id(a) >>>5722000 >>>id(b) >>>5722000
可以看到第一组和第三组的a和b的id值是相同的,但是第二组是不同的。出现这种情况是因为Python为了避免重复的创建和回收,就把那些常用的整数缓存起来,每次需要使用时直接从缓存中拿,而不是重新创建,这些整数的范围是[-5, 256],不在这个范围之中的数字就要重新创建了。那为什么第三组的a和b是一样的呢?这是因为Python内部做了优化,对于在同一个代码块中的代码,如果出现两个值相同的整数,那么它们将被重用。这里可以用下面的代码进行测试:
a = 257 b = 257 def func(): c = 257 print(a is c) # False print(a is b) # True func()
这段代码中a和b的id值是一样的,和c的id值不同。这是因为a和b在同一个代码块,而c处在func函数里,属于局部变量,和a不在同一个代码块。所以在创建c的时候会重新创建,但是创建b的时候会重用a这个对象。
在Python的交互式命令行中,每单独一行都视为一个代码块,因此第三组中的a和b处在同一个代码块中,所以后者重用了前者,因此,两个变量的id是相同的。
2.关于正则表达式re.sub()
都知道正则表达式中的re.sub()是用于字符串替换的,比如:
import re def remove_tag(html): text = re.sub('<.*?>', '', html, re.S) return text
这段代码的功能就是将html中的标签都替换为空,没什么好说的,这里可以用一段html代码来测试一下:
html = """Document """ print(remove_tag(html)) # Document
运行结果和我们想象的一样,但是如果html代码再长一点呢?比如下面:
html = """Document h2标题
h3标题
h4标题
""" print(remove_tag(html))
运行结果如下:
Document h2标题h3标题h4标题