一、URL编码
通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因
为Url中有些字符会引起歧义,例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。
如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行
编码。又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏
览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。
二、异常处理
异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题。
在Python中,使用了try/except/finally语句块来处理异常
1、try..except
我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except
后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except
2、try..finally
无论异常是否发生,在程序结束前,finally中的语句都会被执行。finally语句也可以和except语句一起使用
3、raise
raise关键字后面需要指定你抛出的异常类型,一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使用dir()
函数来查看exceptions中的异常类型
关于异常处理总结如下:
1)except句不是必须的,finally语句也不是必须的,但是二者必须要有一个,否则就没有try的意义了。
2)except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。
3)except语句可以以元组形式同时指定多个异常,参见实例代码。
4)except语句后面如果不指定异常类型,则默认捕获所有异常,你可以通过logging或者sys模块获取当前异常。
5)如果要捕获异常后要重复抛出,请使用raise,后面不要带任何参数或信息。
6)不建议捕获并抛出同一个异常,请考虑重构你的代码。
7)不建议在不清楚逻辑的情况下捕获所有异常,有可能你隐藏了很严重的问题。
8)尽量使用内置的异常处理语句来 替换try/except语句,比如with语句,getattr()方法。
三、面向对象
1)面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用
2)类是一个模板,模板中包装了多个“函数”供使用(把一些函数封装到一个类里面)
3)对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
四、类
1、Python中的类有经典类和新式类,新式类的属性比经典类的属性丰富。( 如果类继object,那么该类是新式类 ),这两种定义方式在python3
里面没有任何区别,在python2里面有区别,一般都用新式类定义,新式类定义不写object也无所谓,一般按照规范要求还是写上较好
2、类的实例化
对象即实例,实例就是指具体造出来的东西,通过类实例化处理的东西,就是实例,比如下面代码把模型做成实际汽车的过程叫做实例化,中bus
、bus2、bus3都是实例,通过实例调用类里面的方法bus.run(),对象即实例
1)定义类的时候,类名的首字母都大写
2)用类的话,必须得先实例化
3)在类里面,函数位置写在哪里都无所谓
3、构造函数
用于初始化类的内容部状态,类被实例化的时候,它会自动的执行构造函数,Python提供的构造函数式 __init__(),如果你的类在实例化的时候要
传入一些参数,那么你就要在__init__这个函数里写参数了,如果你的类在实例化的时候要传入一些参数,那么你就要在__init__这个函数里写参数
了,比如bus = Car('黄色','3开门')实例化的时候要传入'黄色'、'3开门'这两个参数,def __init__(self,color,window)这里就得写两个参数,构造函数
就是传参用的
4、析构函数
“__del__”就是一个析构函数了,实例被销毁的时候执行的。程序运行完改程序的所有变量都不在内存里面,会执行这个析构函数,析构函数是
python底层实现的,和你自己写的代码没有任何关系,只要变量不在内存里面,python就会执行析构函数。那什么时候能用到析构函数呢,比如
mysql关闭连接,如果定义成def close():那么每次连接数据库都要调用下这个close()函数,如果定义成def __del__():那么每次数据库操作完会自
动系统调用这个函数,就不需要每次手动调用了
5、属性和方法
属性即类里面的普通变量,还有一种在方法上应用装饰器即为属性@property。比如coon和cur即为属性方法即类里面的函数
6、self的含义
self其实就是传入的实例名,用bus调用方法是,self就是bus,用bus2调用方法时self就是bus2。只要定义函数时有self,就可以使用self.
7、实例变量和类变量
实例变量。必须实例化时候才能用,实例变量也称为成员变量,能用self.出来变量都是实例变量,在方法外,类里面定义的变量是类变量,一般
公用的属性可以定义成类变量,用的时候也可以通过实例名.类变量名的方法使用
8、属性方法
属性方法:看上去好像是一个属性,其实是一个函数,也得实例化才能调用。属性方法不能入参。如果一个方法没有入参的话,在方法上面加上一个
@property,就可以把该方法变成属性方法
9、私有函数和私有变量
只要是私有的东西,不管是私有函数还是私有变量,函数和变量前面加上__表示私有函数和变量。只有在类里面可以使用,类外面不能被使用。
10、继承
父类有的功能、变量子类全有。如果定义的类,有很多重复功能的,那就可以把这些重复的类,定义成父类
11、多态
多态的思想就是一种方法,多种实现,python不支持多态,Python里面函数名不能重复,但是java里面函数名是可以重复的,比如定义个三个相同
的方法,但是方法里面参数个数不同,在函数调用时会根据传入的参数个数来决定调用那里方法
12、类方法和静态方法
静态方法:不需要实例化,和类没有任何的关系,类里面的其他东西它也用不了,只是写在类里面的一个普通函数而已
类方法:不需要实例化,直接类名.XX,它可以使用类变量
实例方法,必须实例化才能用的方法,直接辨别就是参数使用了self的就是实例方法
13、修改父类方法
修改父类方法有什么作用呢,最主要的作用是节省代码,比如一个函数文件中好几个类,但是都需要连接同一数据库,那么数据库的ip,user,passwd,port
就可以公用,把这些实例变量放到父类里面去定义,子类里面直接调用即可,不需要再重新定义一遍。修改父类的方法有两种,一种是直接手动调用父类的
方法,还有一种是使用super,super会自动找到父类,然后调用下面的方法
五、发邮件
1)在邮箱设置里面打开pop3/smtp服务
2)有的邮箱用密码发送不了,必须得获取授权码才可以。
发附件