正则表达式
正则表达式知识点匹配单个字符
字符
功能
.
匹配任意一个字符,除了\n
[]
匹配括号中列举的字符,如:[abc]、[a-z]
\d
匹配数字0-9
\D
匹配非数字的部分
\s
匹配空白字符,即空格、tab
\S
匹配非空白字符
\w
匹配单词字符,即a-z、A-Z、0-9、中文字符
\W
匹配非单词字符
注意点:
点号(.)本身是不支持检测换行符的,但是可以通过追加re.S参数来实现支持匹配换行,如下:
123import rere.match(r'.+', "shuai\nqi\n", re.S)
匹配多个字符
字符
功能
*
匹配前一个字符0次或者无限次,即可有可无
+
匹配前一个字符1次或者无限次,即至少有一次
?
匹配前一个字符0次或者1次,即要么有一次,要么0次
{m}
匹配前一个字符出现m次
{m,n}
匹配一个字符出现m到n次
匹配开头结尾
字符
功能
^
匹配字符串开头
$
匹配字符串结尾
匹配分组
字符
功能
|
匹配左右 ...
注释和函数
注释和算数知识点单行注释:以# 开头12# 为确保程序可读性,#和注释的内容之间需要添加一个空格# 注释的内容与代码在同一行的时候,为了保持可读性,需将代码与注释之间至少两个空格
多行注释:1以三个引号包裹(单引号、双引号都可以)
算数Tip:赋值运算符 = 算数运算符+=
符号
作用
+
算数+
-
算数-
*
算数乘运算
/
算数除运算
//
算数求商运算
%
算数求余数运算
**
算数求乘方运算
Tip:* 运算同样适用于字符串
作业
(问答)单行注释的注意点(两处)
(问答)多行注释的注意点
利用ipython,求10除以20的运算结果
利用ipython,求10除以3的商
利用ipython,求10除以3的余数
利用ipython,求2的8次方的结果
利用ipython,打印出18个”sorry”
深浅拷贝
深、浅拷贝知识点概念
引用
在复制一个变量时,只复制它的引用方式,而没有重新开辟空间来存放它引用的数据,当被复制变量发生变化时,新的变量数据也会同时发生变化。
123a = [1,2]b = aa.append(3) # a变则b变
浅拷贝:
在拷贝一个变量时,重新开辟空间来存放它内部数据的引用方式,当内部引用的数据发生变化时,拷贝后的对象同时发生变化。通过copy中的copy方式复制变量:a=copy.copy(b)
1234567891011a = [1,2]b = [3,4]c = [a,b]d = copy.copy(c)a.append(3) # 拷贝地址的内容发生变化,则d发生变化c.append((1,2)) # 拷贝的对象发生变化,d不变e = c[:] # 利用切片达到的结果等同于e = copy.copy(c)# 字典中也有个方法copypersonal = dict(name = "wuxiang", age=27)copy_data = personal.copy() # 此处的copy也是浅拷贝
深拷贝:
在拷贝一个变量时,重 ...
私有化、继承、多态
私有化、继承、多态知识点私有化
xx:公有变量
_x:单前置下划线,用于定义私有化属性或方法,当在其它模块通过from xxx import *时是无法导入的,但是可以通过子类和类对象进行访问,也可以通过导入具体的变量名进行访问
1234567# 导入具体的变量名from Demo1 import _a# 在子类中也可直接访问class Test2(Test1): def func(self): print(self._a)
__xx:双前置下划线,用于定义私有化属性或方法,成员之间无法进行访问,同时子类也无法访问。但是可以通过【对象名._类名__私有对象名】进行访问
__xx__:双前后下划线,python内置的魔法对象或属性。自已不要发明这类名字
xx_:单后置下划线,为了避免自己定义的变量名与系统的关键字冲突
import导入模块导入顺序12345678910# 检查模块的导入顺序import sysprint(sys.path) # sys模块中有一个path方法会打印出导入模块时的顺序# 通过sys.path.append(路径)可以向系统中 ...
类中属性和Property
类中属性和property知识点类对象/属性、实例对象/属性
实例化过程:
当通过类名(a)实例化一个对象的时候,此时会调用类中__new__方法开辟一个独立的空间并返回该空间的引用(对象b),然后将该引用传递给 __init__方法,__init__方法会在新开辟的空间中初始化属性信息(变量),而对象a所拥有的各类方法则可以通过__class__方法直接寻找到类对象中的方法。
调用方式:
实例对象:可以调用实例属性、实例方法、类属性、类方法、静态方法
类对象:可以调用类对象、类属性、静态方法
实例对象调用类属性的方式:实例对象名.__class__.类属性名
property属性
定义和调用
方法1:通过添加修饰符
定义时,在实例方法的基础上添加**@property装饰器**,并且仅有一个self参数。调用时,无需加括号
设置property属性赋值时,使用xx.setter装饰器
设置property属性删除时,使用xx.deleter装饰器
12345678910111213141516171819202122class Test(object): d ...
类成员相关
类成员相关知识点实例化12# 程序在实例化的时候,都会创建一个自己独立的内存空间,用于保存各自不同的属性# 同一个类下实例化的不同对象,他们的方法在内存中却只有一份,只有需要时才将对象的引用传递到方法的内部
类对象、属性12# python程序在运行时也会直接将类加载到内存中,只是类对象在内存中只有一份,使用一个类可以创建多个实例对象# 类对象同时有自己的属性(类属性)、方法(类方法),可以通过"类名.属性/方法"进行访问
使用
12345678910111213# 类属性是给类对象中定义的属性,常用来记录这个类相关的特征,类属性不会用来记录具体对象的特征# 定义方式:属性名 = 属性值 (在类下方直接定义)# 使用方式:类名.类属性名 class Tool(object): # 使用赋值语句定义类属性,记录被调用的次数 count = 0 def __init__(self): Tool.count += 1 # 每次使用类实例化一个对象都会自动+1,并且该变量值存放在内存中的类对象中 tool ...
继承和重写
继承和重写知识点单继承定义123# 子类继承父类、父类的祖先类所有的方法和属性class 类名(父类名称): 类体
多继承定义1234# 多继承的子类继承了所有父类的方法和属性# 继承的父类之间尽量不要有相同名称的方法和属性class 类名(父类1, 父类2, 父类3, ... ): 类体
1# 若继承的父类中有相同名称的方法和属性,在未调整顺序之前,优先调用先继承的父类中指定的方法
方法搜索顺序:__mro__123# (知道)__mro__:是python的内置属性,用于在多继承时判断方法、属性的调用路径print(类名.__mro__)# __mro__按照打印内容从左到右顺序查找,先在当前类中查找,然后再按顺序依次到下一个类中查找,找到即执行,不再找下去,如果找完所有的类都没有寻找到方法就报错
方法的重写(多态)备注:当父类的方法无法满足子类的需求时,并且两者实现的方式完全不同,则需要在子类中重写父类的方法
1# 定义方式:定义一个与父类中被重写的方法同名的方法即可
方法的拓展备注:当父类的方法无法满足子类的需求时,父类封装的方法是子类方法的一部分,此时需 ...
Tcp、IP相关知识
IP地址
背景
IPv4:表示的是IP的第四代版本,目前已经到了第六代版本(IPv6)
IPv4格式:xxx.xxx.xxx.xxx (256*256*256*256个)
IPv4格式:
每个IP的组成部分都分为一个网络地址+主机地址,根据所用的位数不同,分为6大类
IPv4分类:
A类地址
由一个字节的网络地址和3个字节的主机地址组成,网络地址的**最高位(二进制)**必须为0
地址范围:1.0.0.1 - 126.255.255.254 (可转换为2进制)
可用的A类网络有126个,每个网络能容纳(256*256*256-2)个主机(.0和.255不能够使用)
B类地址
由2个字节的网络地址和2个字节的主机地址组成,网络地址的必须为10
地址范围:128.1.0.1 - 191.255.255.254 (可转换为2进制)
可用的B类网络有16384个,每个网络能容纳65534个主机(.0和.255不能够使用)
C类地址
由3个字节的网络地址和1个字节的主机地址组成,网络地址的必须为110
地址范围:192.0.1.1 - 223.255.255.254 (可 ...