1>__init__函数不应当返回除了None之外的任何对象
如果这个程序:
class AAA:
def __init__(self):
return("我是天才!----by樱木花道")
然后a=AAA(),则会红字报错,是TypeError: __init__() should return None, not 'str'
但是更改一下,变成下面这样:
class AAA:
def __init__(self):
print("我是天才!----by樱木花道")
然后a=AAA(),输出就是我是天才!----by樱木花道。可见“返回”的差别。
2>\n与\t
f=open("文件路径","打开模式")
f.write(内容)
如果仅仅是这样,那么就是“衔尾蛇”,头到尾尾接头,得到了结果是一个大长句。
f.write(内容)
f.write("\n")
注意这个格式,是有双引号的!
这样的输出不是傻乎乎的打出一个\n,而是“内容”的末尾多一个回车。
f.write(内容)
f.write("\t")
这样的输出不是傻乎乎的打出一个\t,而是“内容”的末尾多一个空格,其中输入几个\t,就多几个空格。
但是要注意,在正则表达式里,搜索回车符\n,是用re.findall(r"[\n]",搜索语句),不是["\n"],这个细节要注意!
3>re.search
re.search的输出结果是一个字符串,即str,这是不能直接拿来用于range,需要int()一下。
4>正则表达式
有时候正则表达式需要匹配一个IP地址的时候,我们可以耍一个无赖
re.serach(r"\d\d\d.\d\d\d.\d\d\d.\d\d\d",需要搜索的文件内容)
但是这样只能搜索到IP地址每一位都是数字的结果,比如212.463.192.654。而像192.168.0.1就不能智能的识别,而且\d的范围默认是0~9,而ip地址范围是0~255,这样的话,也会抓出来一堆类似999.888.777.666这种压根不是ip的东西。
而且还有这样的情况:
import re
html="123999?"
re.findall(r"[0-9]",html)=['1', '2', '3', '9', '9', '9']
re.findall(r"[0-10]",html)=['1'] = re.findall(r"[0-01]",html)
re.findall(r"[0-23]",html)=['1', '2', '3']
从例子可以看出来,范围是0-9是0123456789,但是0-10的时候却只有一个1,这是因为python里0-10他认为是0-1and0-0,它把10给拆成了“1 and 0”,0-23也同理,只会匹配0 1 2和最后的3,其中3是死数,而前面的是范围。
这样我们就明白为何re.findall(r"[0-255]",“188”)=['1'] 了。因为正则表达式匹配的是字符串!0-255,其实匹配的是0 1 2和5。
那么想要匹配一个0~255的数怎么写呢?
re.findall(r"[0,1]\d\d|2[0-4]\d|25[0-5]","188")=["188"] |==or
那么真正可以用来完全匹配IP地址的方法是什么呢?理解不了的话,那就死记硬背吧。
re.search(r"(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])","192.168.1.11")