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")