一、基础知识
1.注释
1)# 单行注释;
2)""" 多行注释 """;
2.规范
1)数字不允许作为变量名开头;
2)变量中多个单词使用下划线分隔;
3)变量中英文字母尽量全部小写;
4)导库的时按照标准库、扩展库、自定义库顺序导入;
5)一个代码块后增加一个空行
3.小tips
1)可以使用%s、%d、%f对字符串、整型、浮点型占位。%5d中数字控制输出长度。%.2f控制小数精度。
str = "我是%d岁的%s"%(18, "小学生")
2)可以采用{}方式做格式输出控制
name = "wjj"
age = 17
print(f"我叫{name},我今年{age}岁")
二、语法结构
1.常用结构
1)函数
def 函数名(参数):
函数体
return 返回值
2)空值
return None
3)函数的多返回值
def name():
return 1,2,3
x,y,x = name()
2.数据容器
1)列表
name = ["元素0", "元素1", "元素2", ... , "元素n"]
print(name[0])
name.index("元素2") # 返回列表下标索引值
name.insert(1, "元素") # 插入元素
name.append("元素") # 列表尾部插入元素
name.extend("数据容器") # 批量添加
name.del(2) # 删除元素
name.pop(2) # 删除元素,可以接收删除元素
name.remove("元素") # 删除元素
name.clear() # 清空列表
name.count("元素") # 列表中元素的数量
len(name) # 列表长度
2)tuple元组
元组不可修改,最后一个元素后要加上一个","。
name = () # 定义一个空元组
name = tuple() # 定义一个空元组
name.index("元素") # 查找元素下标
name.count("元素") # 统计元素数量
len(name) # 长度
3)字符串
不支持修改。
name = "数据"
name.index() # 查找元素的开始下标
name.replace("旧元素", "新元素") # 将旧元素全部替换为新元素,得到一个新的字符串
name.split("元素") # 按照元素进行切分,得到一个列表
name.strip("元素") # 不传参数删除头尾的空格, 传参按照参数,删除字符串前后所有元素中的字符
name.count("元素") # 元素出现的次数
len(name) # 字符串长度
4)序列
序列支持切片,即:列表、元组、字符串,均支持进行切片操作。
切片:从一个序列中,取出一个子序列,返回列表类型;
语法:序列[起始下标:结束下标:步长],起始和结束不写默认是从头到尾,步长不写默认是1,步长为负数表示倒着切;
5)集合
集合不允许重复,无序,不支持下标索引访问,允许修改;
name = {"元素1", "元素2", ... , "元素n"} # 定义一个集合
name = set() # 定义一个集合
name.add("元素") # 添加元素
name.remove("元素") # 移除指定元素
name.pop() # 随机取个元素
name.clear() # 清空
name.difference(name2) # 取出name和name2的差集
name.difference_update(name2) # 在name中删除和name2集合相同的元素
name.union(name2) # 合并name和name2集合,去重
len(name) # 集合元素数量
6)dict字典
key不允许重复;
name = {"key": "value", "key": "value"}
name = dict() # 定义一个字典
data = name["key"] # 取出对应的value
name.keys() # 获取全部的key
7)通用操作
max("容器") # 返回集合中最大的元素
min("容器") # 返回集合中最小的元素
list("容器") # 转换成列表
str("容器") # 转换成字符串
tuple("容器") # 转换成元组
set("容器") # 转换成集合
sorted("容器",[reverse = True]) # 给定参数进行排序,正序或者逆序,返回列表
8)总结
列表 | 元组 | 字符串 | 集合 | 字典 | |
元素数量 | 多 | 多 | 多 | 多 | 多 |
元素类型 | 任意 | 任意 | 仅字符 | 任意 | key:除字典类型 value:任意 |
下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
可修改性 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
数据有序 | 是 | 是 | 是 | 否 | 否 |
3.特有语法
1)lambda
用于临时构建一个函数,只使用一次,只能写一行代码;
lambda 传入参数: 函数体(一行代码)
2)模块和导入
[from 模块名] import [模块|类|变量|函数|*] [as 别名]
三、函数
1.文件操作
file = open(name, mode, encoding) # r只读,w写原有内容会被删除,a追加
file.read(num) # 读取指定长度数据,不给参数读取全部
file.readLines() # 读取一行
file.write("内容") # 写入 \n 换行
file .flush() # 刷新,从内存写入文件
file.close() # 关闭文件
2.异常
# 基本捕获语法
try:
# 语句1
except:
# 捕获到异常后的操作
else:
# 可选,未出现异常的操作
finally:
# 肯定执行
# 捕获指定异常
try:
# 语句
except 异常类型 as e:
# 捕获到异常后的操作
# 异常类型 Exception代表所有异常
四、类
1.形式
class 类名:
成员变量
def 方法名(self):
# 方法体
def 方法名(self, 参数):
# 方法体
self.成员变量 = 参数
2.构造方法
调用类时自动执行,前后两个下划线;
def __init__(self, 参数):
# 方法体
3.魔术方法
1)__str__字符串方法
将输出从内存地址变为数据;
def __str__(self):
return # 字符串
2)__lt__小于符号比较方法
比较两个类的特定变量;
def __lt__(self, other):
return self.变量 < other.变量
3)__le__大于等于符号比较方法
比较两个类的特定变量;
def __le__(self, other):
return self.变量 >= other.变量
4)__eq__等于比较方法
比较两个类的特定变量;
def __eq__(self, other):
return self.变量 == other.变量
4.私有成员(封装)
私有成员变量:变量名以__开头(两个下划线);
私有成员方法:方法名以__开头(两个下划线);
class Phone:
__name = None
def __name(self):
# 内容
5.继承
class 子类(父类):# 单继承
class 子类(父类1, 父类2, ...):# 多继承
父类对象调用
super().成员
6.注解
1.变量名: 类型 = 变量
var_1: int = 10
stu: Student = Student() # Student类
2.# type: 数据类型
num = 10 # type: int
3.对函数方法进行类型注解
def add(x: int, y: int):
pass
4.对返回值类型进行注解
def func(data: list) -> list:
return data
5.Union类型
from typing import Union
例子:
list[Union[int, str]] = [1,2,"dssad"]