Python基础阶段快到一段落,下面会陆续来介绍python面向对象的编程,今天主要是补充几个知识点,下面开始今天的内容。
一、反射
反射的作用就是列出对象的所有属性和方法,反射就是告诉我们,这个对象到底是什么,提供了什么功能,
可以伪造Web框架的路由系统。
举个例子:
1 2 |
|
如上所看,dir是一个内置的反射函数,可以列出对象的属性和方法。那么看一下有哪些反射内置函数
- dir([obj]): 调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内),obj的默认值是当前的模块对象
- hasattr(obj,attr): 这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。
- getattr(obj,attr): 调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为‘bar‘则返回obj.bar.
- setattr(obj,attr,val): 调用这个方法给obj的名为attr的值的属赋值为val,例如如果attr为‘bar‘,则相当于obj.bar=val
下面举个例子来把上面的内置函数应用到实际环境中:
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
从上面的脚本里可以看到有一些想这种__import__、__name__、__main__的函数,下面我们来介绍一下这种函数:
- __name__: 只有执行当前文件时,当前文件的特殊变量__name__==‘__main__‘才会生效,一般这个函数用到主函数中;
- __file__: 当前py文件所在相对路径,要和os.path.abs()配合使用;
- __cached__: 字节码存放位置pyc文件;
- __import__(字符串): 可以通过__import__()函数导入模块;
- __dic__: 获取程序注释
- __package__:模块在包里面
二、hashlib加密模块
用于加密相关的操作,代替了md5和sha模块,主要提供SHA1、SHA224、SHA256、SHA384、SHA512、MD5算法。这里只介绍md5加密,下面请看例子:
1 2 3 4 5 6 7 8 9 10 |
|
以上加密算法虽然依然非常厉害,但存在缺陷,即:通过撞库可以反解,所以有必要对加密算法中添加自定义key做二次加密。
1 2 3 4 5 6 7 8 9 |
|
三、re模块
python中re模块提供了正则表达式相关操作。
1、 字符串匹配:
- . 匹配除换行符以外的任意字符
- \w 匹配字符或数字或下划线或汉字
- \s 匹配任意空白字符
- \d 匹配数字
- \b 匹配单词的开始或结束
- ^ 匹配字符串的开始
- $ 匹配字符串的结束
2、字符串次数匹配:
- * 重复0次或多次
- + 重复1次或多次
- ? 重复0次或1次
- {n} 重复n次
- {n,} 重复n次或更多次
- {n,m} 重复n到m次
3、re模块的方法
方法一:match
match:从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None.
1 2 3 4 |
|
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
方法二:search
search: 浏览整个字符串去匹配第一个,为匹配成功返回None,这里强调一下match方法是从开头去匹配。
格式: search(pattern,string,flags=0)
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
方法三:findall
findall:获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中多个组,则以列表形式返回,且每一个匹配均是元组;空的匹配也会包含在结果中。
格式:findall(pattern,string,flags=0)
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
方法四:sub
sub:替换匹配成功的指定位置的字符串
1 2 3 4 5 6 |
|
举例说明:
1 2 3 4 5 6 7 8 |
|
方法五:split
split:根据正则匹配分割字符串
1 2 3 4 5 |
|
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 |
|
练习:
1、拼接IP地址:
1 |
|
2、拼接手机号:
1 |
|
3、拼接邮箱地址:
1 |
|