目录
基础
- 注释
- 单行注释 - 以#和空格开头的部分
- # print("你好,世界!")
- 多行注释 - 三个引号开头,三个引号结尾
- """ 第一个Pytho 。。。转行 nAuthor: 骆昊 """
- 单行注释 - 以#和空格开头的部分
-
基础语法
- 输出
- print('%d / %d = %f' % (a, b, a / b)) 占位符 %2d,只输出两位
- print('成绩为',x) 拼接
- print(fruit.title(), end=' ') 最后加空格(换行等)
- 循环
- for x in range(101):
- range(1, 100, 2)可以产生一个1到99的奇数序列,其中的2是步长,即数值序列的增量。
- range(101)可以产生一个0到100的整数序列。
- while 不知道循环次数
- for x in range(101):
- 函数
- def add(*args): *表示args是一个可变参数
- 定义了两个同名函数,后面的定义会覆盖之前的定义
- 用导入模块解决import module1 as m1 import module2 as m2 m1.foo() m2.foo()
- 导入的模块有可以执行代码,Python解释器在导入这个模块时就会执行
- 最好是将模块中的执行代码放入if __name__ == '__main__':
- 只有被Python解释器直接执行的模块的名字才是__main__
- global 全局变量 应减少使用
- 闭包
- 将一个局部变量的生命周期延长,使其在函数调用结束后依然可以访问
-
数据结构
- 字符串
- len(str1)计算字符串的长度
- str1.capitalize()首字母大写的拷贝
- str1.upper() 字符串变大写后的拷贝
- str1.find('or') 查找子串所在位置
- str3.strip()修剪左右两侧空格的拷贝
- str2.isdigit()是否由数字构成 str2.isalpha()是否以字母构成 str2.isalnum() 是否数字和字母构成
- 列表
- 定义
- list1 = [1, 3, 5, 7, 100]
- list2 = ['hello'] * 5
- 下标
- print(list1[0]) print(list1[-1])
- 添加
- list1.append(200)
- list1.insert(1, 400)
- list1 += [1000, 2000]
- 删除
- list1.remove(3) 删除第几个
- if 1234 in list1: list1.remove(1234) 按值删除
- del list1[0] 按下标删除
- 清空
- list1.clear()
- 切片
- fruits2 = fruits[1:4] 切下标1-3的(第二到四个)
- fruit3 = fruits只创建新的引用 fruits3 = fruits[:] 完整切片复制列表
- fruits4 = fruits[-3:-1]
- fruits5 = fruits[::-1] 反向拷贝
- 排序
- sorted(list1, key=len) #返回列表排序后的拷贝不会修改传入的列表
- 定义
- 元祖
- 定义
- 元素不能修改
- t = ('骆昊', 38, True, '四川成都')
- 创建时间和占用的空间上面都优于列表
- 获取
- print(t[0])
- for member in t:
- person = list(t) 转化成列表
- fruits_list = ['apple', 'banana', 'orange'] fruits_tuple = tuple(fruits_list) 列表换元祖
- 定义
- 集合
- 定义
- 不允许有重复元素
- set1 = {1, 2, 3, 3, 3, 2}
- set2 = set(range(1, 10))
- 添加
- set1.add(4)
- set2.update([11, 12])
- 删除
- if 4 in set2: set2.remove(4)#remove在集合中没有会报错
- set2.discard(5)#discard的元素在集合没有不会报错
- set3.pop()#删除制定元素并返回该元素值
- 转换
- for elem in set2: print(elem ** 2, end=' ') 遍历
- set3 = set((1, 2, 3, 3, 2, 1)) #元祖转换为集合,转换后只剩1,2,3
- 运算
- set1 & set2 set1.intersection(set2) 交集
- set1 | set2 set1.union(set2) 并集
- set1 - set2 set1.difference(set2) 差集
- set1 ^ set2 set1.symmetric_difference(set2) 对称差
- 定义
- 字典
- 定义
- 可储存任意对象,由键值对构成,冒号分开
- scores = {'骆昊': 95, '白元芳': 78, '狄仁杰': 82}
- 操作
- 更新
- print(scores['骆昊'])
- for elem in scores: print('%s\t--->\t%d' % (elem, scores[elem]))
- 更新
- scores['白元芳'] = 65
- scores.update(冷面=67, 方启鹤=85)
- 查询
- if '武则天' in scores: print(scores['武则天'])
- print(scores.get('武则天')) #get可设置默认值print(scores.get('武则天', 60)),则返回60
- 删除
- scores.popitem()#删除制定元素并返回默认从最后删除
- scores.pop('骆昊', 100)
- scores.clear() 清空字典
- 更新
- 定义
- 字符串
-
面向对象
- 类
- class Student(object):
- def __init__(self, name, age):self.name= name self.age = age #创建对象时初始化
- __slots__属性
- 限定自定义类型的对象只能绑定某些属性
- 限定只对当前类的对象生效,对子类并不起任何作用。
- eg: # 限定Person对象只能绑定_name, _age和_gender属性 __slots__ = ('_name', '_age', '_gender')
- 创建对象
- stu1 = Student('骆昊', 38)
- 希望对象的属性是私有的,在给属性命名时可以用两个下划线作为开头 self.__foo =
实际开发中并不建议将属性设置为私有的,因为这会导致子类无法访问
- 装饰器 @property
- 访问器 getter
- 修改器setter
- 静态方法
- 属于类,不属于对象#eg三边长构建三角形先判断是否可以的方法,
- 通过给类发消息调用
- @staticmethoddef is_valid(a, b, c):
- 类方法
- 第一个参数约定名为cls ,当前类相关的信息的对象#通过这个参数我们可以获取和类相关的信息
- @classmethoddef now(cls):
- 类之间的关系
- is-a 继承或泛化
学生和人的关系、手机和电子产品 - has-a 关联
eg部门和员工的关系- 聚合关系
整体和部分的关联 - 合成关系
整体进一步负责了部分的生命周期(整体和部分是不可分割的,同时同在也同时消亡)
- 聚合关系
- use-a 依赖
司机有一个驾驶的行为(方法),其中(的参数)使用到了汽车,那么司机和汽车的关系就是依赖关系
- is-a 继承或泛化
- 封装
隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口- 只需要知道方法名和传入的参数,不需要知道内部细节
- 继承
- 里氏替换原则 用子类对象去替换掉一个父类对象
- 重写override
- 子类继承父类后,对父类已有的方法给出新的实现版本
- 让父类的同一个行为在子类中拥有不同的实现版本
- 抽象类
- 不能够创建对象的类,专门为了让其他类去继承它
- python可以通过abc模块--ABCMeta元类 和 abstractmethod包装器 达到抽象类的效果
- 多态
- 调用经过子类重写的方法时,不同的子类对象会表现出不同的行为
- 类
-
文件操作
- f = open('致橡树.txt', 'r', encoding='utf-8') 以指定方式打开
- 读取
- print(f.read())
- with open('致橡树.txt', 'r', encoding='utf-8') as f: with关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源
- 写入
- 文件不存在会自动创建
- 以json格式存储
- 把一个列表或者一个字典中的数据保存到文件中
- with open('data.json', 'w', encoding='utf-8') as fs: json.dump(mydict, fs)
- json函数
- dump - 将Python对象按照JSON格式序列化到文件中
- dumps - 将Python对象处理成JSON格式的字符串
- load - 将文件中的JSON数据反序列化成对象
- loads - 将字符串的内容反序列化成Python对象
- 序列化:将数据结构或对象状态转换为可以存储或传输的形式 #通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本
-
异常处理
https://segmentfault.com/a/1190000007736783- try
- except
- 处理异常状况
- 可跟多个具体错误类型
- 语句可以以元组形式同时指定多个异常 except (ZeroDivisionError, TypeError) as e:
- 不指定异常类型,则默认捕获所有异常
- 尽量使用内置的异常处理语句(with语句,getattr())
- finally
- 无论程序正常或异常都会执行到
- 不要忘记在处理异常后做清理工作或者回滚操作r
-
正则表达式
https://deerchao.net/tutorials/regex/regex.htm- 元字符
- \bhi\b.*\bLucy\b
- \b单词开头或结尾
- . --位置 *--任意多个 .*--任意多个不包含换行的字符
- \bhi\b.*\bLucy\b hi开头,lucy结尾的字符串
- \d数字 0\d{2}-\d{8} #\d{8}重复匹配八次数字
- \s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
- \w 匹配字母或数字或下划线或汉字等。
- ^匹配字符串的开始$匹配字符串的结束
- \bhi\b.*\bLucy\b
- 测试工具
- regesterhttps://deerchao.net/tools/regester/index.htm
- regexbuddyhttp://www.regexbuddy.com/
- javascript正则表达式测试https://deerchao.net/tools/wegester/index.html
- 元字符
- 输出