python核心基础知识
基础知识:
Python定义:
是一个免费、开源、跨平台、动态、面向对象的编程语言
Python程序的执行方式
交互式:
在命令行输入指令,回车即可得到结果
1. 打开终端
2. 进入交互式:python3
3. 编写代码:print(“hello world”)
4. 离开交互式:exit()
文件式:
将指令编写到.py文件,可以重复运行程序。
1. 编写文件
2. 打开终端
3. 进入程序所在目录:cd 目录
4. 执行程序: python3 文件名
Linux常用命令:
1. pwd:查看当前工作目录的路径
2. cd:改变工作目录(进入到某个目录)
练习:
1. 在指定目录创建python文件.
--目录:/home/tarena/month01
--文件名:exercise01.py
2. 在文件中写入:print(“你好,世界!”)
3. 运行python程序
执行过程:
计算机只能识别机器码(1010),不能识别源代码(python)。
1. 由源代码转变成机器码的过程分成两类:编译和解释。
2. 编译:在程序运行之前,通过编译器将源代码变成机器码,例如:C语言。
– 优点:运行速度快
– 缺点:开发效率低,不能跨平台。
3. 解释:在程序运行之时,通过解释器对程序逐行翻译,然后执行。例如 Javascript
– 优点:开发效率高,可以跨平台;
– 缺点:运行速度慢。
4. python是解释型语言,但为了提高运行速度,使用了一种编译的方法。编译之后 得到pyc文件,存储了字节码(特定于Python的表现形式,不是机器码)。
源代码 – 编译 --> 字节码 – 解释 --> 机器码
解释器类型:
1. CPython(C语言开发)
2. Jython (java开发)
3. IronPython (.net开发)
数据基本运算
基础知识
pycharm常用快捷键:
1. 移动到本行开头:home键
2. 移动到本行末尾:end键盘
3. 注释代码:ctrl + /
4. 复制行:ctrl +d
5. 删除行:shift + delete
6. 选择列:shift + alt +鼠标左键
7. 移动行:shift + alt + 上下箭头
8. 代码格式化:ctrl+alt+l
注释
给人看的,通常是对代码的描述信息
1. 单行注释:以#号开头。
2. 多行注释:三引号开头,三引号结尾。
函数
表示一个功能,函数定义者是提供功能的人,函数调用者是使用功能的人。
例如:
print(数据) 作用:将括号中的内容显示在控制台中
print("hello world")# 1. 字面意思:打印(数据) # 2. 作用:在终端中显示数据 # 3. 适用性:显示结果
变量 = input(“需要显示的内容”) 作用:将用户输入的内容赋值给变量
name = input("请输入姓名:") age = input("请输入年龄:")
变量
1. 定义:关联一个对象的标识符。
2. 命名:必须是字母或下划线开头,后跟字母、数字、下划线。
不能使用关键字(蓝色),否则发生语法错误:SyntaxError: invalid syntax。
3. 建议命名:字母小写,多个单词以下划线隔开。
class_name = “xxx”
4. 赋值:创建一个变量或改变一个变量关联的数据。
5. 语法:
变量名 = 数据
变量名1 = 变量名2 = 数据
变量名1, 变量名2, = 数据1, 数据2
# 将数据地址赋值给变量
name = "悟空"
name = "孙悟空"将数据地址赋值给变量(不是将变量name自身地址赋值给da_sheng)da_sheng = name
print(name)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TXIKSUmG-1600477831917)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200827170157098.png)]
del语句
1. 语法:
del 变量名1, 变量名2
2. 作用:
用于删除变量,同时解除与对象的关联.如果可能则释放对象。
3. 自动化内存管理的引用计数:
每个对象记录被变量绑定(引用)的数量,当为0时被销毁。
核心数据类型
整形int
1. 表示整数,包含正数、负数、0。
如: -5, 100, 0
2. 字面值:
十进制:每位用十种状态计数,逢十进一,写法是0~9。
二进制:每位用二种状态计数,逢二进一,写法是0b开头,后跟0或者1。
八进制:每位用八种状态计数,逢八进一,写法是0o开头,后跟0~7。
十六进制:每位用十六种状态计数,逢十六进一,
写法是0x开头,后跟09,AF,a~f
浮点型float
1. 表示小数,包含正数、负数,0.0。
2. 字面值:
小数:1.0 2.5
科学计数法:e/E (正负号) 指数
1.23e-2 (等同于0.0123)
1.23456e5(等同于123456.0)
字符串str
是用来记录文本信息(文字信息)。
字面值:双引号
布尔bool
用来表示真和假的类型
True 表示真(条件满足或成立),本质是1
False 表示假(条件不满足或不成立),本质是0
数据类型转换
1. 转换为整形: int(数据)
2. 转换为浮点型:float(数据)
3. 转换为字符串:str(数据)
4. 转换为布尔:bool(数据)
结果为False:bool(0) bool(0.0) bool(None)
5. 混合类型自动升级:
1 + 2.14 返回的结果是 3.14
1 + 3.0 返回结果是: 4.0
运算符
算术运算符
+ 加法
- 减法
* 乘法
/ 除法:结果为浮点数
// 整除:除的结果去掉小数部分
% 求余
** 幂运算
优先级从高到低: ()
**
* / % //
+ -
增强运算符
y += x 相当于 y = y + x
y -= x 相当于 y = y - x
y *= x 相当于 y = y * x
y /= x 相当于 y = y / x
y //= x 相当于 y = y // x
y %= x 相当于 y = y % x
y = x 相当于 y = y x
比较运算符
< 小于
<= 小于等于\> 大于\>= 大于等于== 等于!= 不等于
返回布尔类型的值
比较运算的数学表示方式:0 <= x <= 100
逻辑运算符
与 and
表示并且的关系,一假俱假。
示例:
True and True # TrueTrue and False # FalseFalse and True # False
False and False # False
或 or
表示或者的关系,一真俱真
示例:
True or True # True
True or False # True
False or True # True
False or False # False
非 not
表示取反
例如:
not True # 返回False
not False # 返回True
短路运算
一但结果确定,后面的语句将不再执行。
身份运算符
语法:
x is yx is not y
作用:
优先级
高到低:
算数运算符
比较运算符
增强运算符
身份运算符
逻辑运算符
语句
行
1. 物理行:程序员编写代码的行。
2. 逻辑行:python解释器需要执行的指令。
3. 建议一个逻辑行在一个物理行上。
4. 如果一个物理行中使用多个逻辑行,需要使用分号;隔开。
5. 如果逻辑行过长,可以使用隐式换行或显式换行。隐式换行:所有括号的内容换行,称为隐式换行 括号包括: () [] {} 三种
显式换行:通过折行符 \ (反斜杠)换行,必须放在一行的末尾,目的是告诉解释器,下一行也是本行的语句。
选择语句
if elif else 语句:
1. 作用:
让程序根据条件选择性的执行语句。
2. 语法:
if 条件1:
语句块1
elif 条件2:
语句块2
else:
语句块3
3. 说明:
elif 子句可以有0个或多个。else 子句可以有0个或1个,且只能放在if语句的最后。
if语句的真值表达式
if 100:
print(“真值”)
等同于
if bool(100):
print("真值")
条件表达式
语法:变量 = 结果1 if 条件 else 结果2
sex = input("请输入性别:")
if sex == "男":value = 1
else:value = 0
value = 1 if sex == "男" else 0
作用:根据条件(True/False) 来决定返回结果1还是结果2。
循环语句
while 语句
1. 作用:
可以让一段代码满足条件,重复执行。
2. 语法:
while 条件:
满足条件执行的语句
else:
不满足条件执行的语句
3. 说明:
else子句可以省略。在循环体内用break终止循环时,else子句不执行。
while True:if float(input("请输入您的存款")) > 100000:print("娶你")else:print("学习")if input("请输入q退出:") == "q":break
for 语句
1. 作用:
用来遍历可迭代对象的数据元素。
可迭代对象是指能依次获取数据元素的对象,例如:容器类型。
2. 语法:
for 变量列表 in 可迭代对象:
语句块1
else:
语句块2
3. 说明:
else子句可以省略。在循环体内用break终止循环时,else子句不执行。
message = "我爱编程"
# 遍历字符串
for item in message:# 打印每个字符print(item)
# for item in message:
# item = "x" # 修改的是变量item存储的地址,没有修改字符串
print(message)
range语句
1. 作用:
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)。
2. 语法:
range(开始点,结束点,间隔)
3. 说明:
函数返回的可迭代对象可以用for取出其中的元素
返回的数字不包含结束点
开始点默认为0
间隔默认值为1
跳转语句
break语句
1. 跳出循环体,后面的代码不再执行。
2. 可以让while语句的else部分不执行。
continue 语句
跳过本次,继续下次循环
容器类型
通用操作
数学运算符
1.+:用于拼接两个容器
list01 = [1,2,3]
list02 = [4,5,6]
list03 = list01 + list02
print(list03)
# [1, 2, 3, 4, 5, 6]
2. +=:用原容器与右侧容器拼接,并重新绑定变量
3. *:重复生成容器元素
4. *=:用原容器生成重复元素, 并重新绑定变量
5. < <= > >= == !=:依次比较两个容器中元素,一但不同则返回比较结果。
成员运算符
1. 语法:
数据 in 序列
数据 not in 序列
2. 作用:
如果在指定的序列中找到值,返回bool类型。
索引 index:
1. 作用:定位单个容器元素。
2. 语法:容器[整数]
3. 说明:
正向索引从0开始,第二个索引为1,最后一个为len(s)-1。
反向索引从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)。
切片 slice
1. 作用:
定位多个容器元素。
2. 语法:
容器[开始索引:结束索引:步长]
3. 说明:
结束索引不包含该位置元素
步长是切片每次获取完当前元素后移动的偏移量
开始、结束和步长都可以省略
message = "我是齐大圣孙悟空"
# 训练
# print(message[2: 6])# "齐天大圣"
print(message[2: -3]) # "齐天大圣"
print(message[3: -1]) # "大圣孙悟"
print(message[2:: -1])# "齐是我"
print(message[1:4:-1])# 空
内建函数
1. len(x) 返回序列的长度
2. max(x) 返回序列的最大值元素
3. min(x) 返回序列的最小值元素
4. sum(x) 返回序列中所有元素的和(元素必须是数值类型)
字符串 str
定义
由一系列字符组成的不可变序列容器,存储的是字符的编码值。
编码
1. 字节byte:计算机最小存储单位,等于8 位bit.
2. 字符:单个的数字,文字与符号。
3. 字符集(码表):存储字符与二进制序列的对应关系。
4. 编码:将字符转换为对应的二进制序列的过程。
5. 解码:将二进制序列转换为对应的字符的过程。
6. 编码方式:
--ASCII编码:包含英文、数字等字符,每个字符1个字节。
--GBK编码:兼容ASCII编码,包含21003个中文;英文1个字节,汉字2个字节。--Unicode字符集:国际统一编码,旧字符集每个字符2字节,新字符集4字节。--UTF-8编码:Unicode的存储与传输方式,英文1字节,中文3字节。
字面值:
单引和双引号的区别:
1. 单引号内的双引号不算结束符
2. 双引号内的单引号不算结束符
三引号的区别:
1. 换行会自动转换为换行符\n
2. 三引号内可以包含单引号和双引号
3.作为文档字符串
转义字符:
1. 改变字符的原始含义。
\’ \” \””” \n \ \t \0 空字符
2. 原始字符串:取消转义。
a = r”C:\newfile\test.py”
字符串格式化:
1. 定义:
生成一定格式的字符串。
2. 语法:
字符串%(变量)
“我的名字是%s,年龄是%s” % (name, age)
3. 类型码:
%s 字符串 %d整数 %f 浮点数
列表 list
定义
由一系列变量组成的可变序列容器。
基础操作
1. 创建列表:
列表名 = []
列表名 = list(可迭代对象)
2. 添加元素:
表名.append(元素)
列表.insert(索引,元素)
list01.insert(1, 40)
3. 定位元素:
列表名[索引] = 元素
变量 = 列表名[索引]
变量 = 列表名[切片] # 赋值给变量的是切片所创建的新列表
列表名[切片] = 容器 # 右侧必须是可迭代对象,左侧切片没有创建新列表。遍历列表:
正向:
for 变量名 in 列表名:
变量名就是元素
反向:
for 索引名 in range(len(列表名)-1,-1,-1):
列表名[索引名]就是元素
4. 删除元素:
列表名.remove(元素)
del 列表名[索引或切片]
深拷贝和浅拷贝
浅拷贝:复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程。
深拷贝:复制整个依懒的变量。
import copylist01 = [10, [20, 30]]
list02 = list01 # 赋值
list03 = list01[:] # 切片(浅拷贝)
list04 = copy.deepcopy(list01) # 深拷贝list04[0] = 100
list04[1][0] = 200 # 修改深拷贝后数据 不影拷贝前的数据
list03[0] = 1000 # 修改浅拷贝浅数据不影响拷贝前的数据
list03[1][0] = 2000 # 修改浅拷贝深层数据影响拷贝前的数据
list02[0] = 10000 # 因为数据1份,所以互相影响
list02[1][0] = 20000
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s6SGVjWO-1600477831919)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200827174559633.png)]
列表与字符串转换:
将多个字符串拼接为一个。
result = “连接符”.join(列表)
list01 = ["a", "b", "c"]
result = "#".join(list01)
print(result) #a#b#c
将一个字符串拆分为多个。
列表 = “a-b-c-d”.split(“分隔符”)
# "悟空,猪八戒,唐僧"
datas = "悟空,猪八戒,唐僧".split(",")
print(datas)
#['悟空', '猪八戒', '唐僧']
列表推导式:
1. 定义:
使用简易方法,将可迭代对象转换为列表。
2. 语法:
变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]
3. 说明:
如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃。
列表推导式嵌套:
1. 语法:
变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2]
2. 传统写法:
result = []
for r in [“a”, “b”, “c”]:
for c in ["A", "B", "C"]:
result.append(r + c)
3. 推导式写法:
result = [r + c for r in list01 for c in list02]
元祖 tuple
定义
1. 由一系列变量组成的不可变序列容器。
2. 不可变是指一但创建,不可以再添加/删除/修改元素。
基础操作
1. 创建空元组:
元组名 = ()
元组名 = tuple()
2. 创建非空元组:
元组名 = (20,)
元组名 = (1, 2, 3)
元组名 = 100,200,300
元组名 = tuple(可迭代对象)
3. 获取元素:
变量 = 元组名[索引]
变量 = 元组名[切片] # 赋值给变量的是切片所创建的新列表
4. 遍历元组:
正向:
for 变量名 in 列表名:
变量名就是元素
反向:
for 索引名 in range(len(列表名)-1,-1,-1):
元组名[索引名]就是元素
作用
1. 元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素。
2. 元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小。
3. 应用:
变量交换的本质就是创建元组:x, y = (y, x )
格式化字符串的本质就是创建元祖:“姓名:%s, 年龄:%d” % (“tarena”, 15)
字典 dict
定义
1. 由一系列键值对组成的可变散列容器。
2. 散列:对键进行哈希运算,确定在内存中的存储位置,每条数据存储无先后顺序。
3. 键必须惟一且不可变(字符串/数字/元组),值没有限制。
基础操作
1. 创建字典:
字典名 = {键1:值1,键2:值2}
字典名 = dict (可迭代对象)
2. 添加/修改元素:
语法:
字典名[键] = 数据
说明:
键不存在,创建记录。键存在,修改值。
3. 获取元素:
变量 = 字典名[键] # 没有键则错误
4. 遍历字典:
for 键名 in 字典名:
字典名[键名]
for 键名,值名 in 字典名.items():
语句
5. 删除元素:
del 字典名[键]
字典推导式
1. 定义:
使用简易方法,将可迭代对象转换为字典。
2. 语法:
{键:值 for 变量 in 可迭代对象}
dict_result = {number: number ** 2 for number in range(1, 11)}
print(dict_result)
{键:值 for 变量 in 可迭代对象 if 条件}
集合
定义
1. 由一系列键值对组成的可变散列容器。
1. 由一系列不重复的不可变类型变量(元组/数/字符串)组成的可变散列容器。
2.相当于只有键没有值的字典(键则是集合的数据)。
基础操作
1. 创建空集合:
集合名 = set()
集合名 = set(可迭代对象)
2. 创建具有默认值集合:
集合名 = {1, 2, 3}
集合名 = set(可迭代对象)
3. 添加元素:
集合名.add(元素)
4. 删除元素:
集合名.discard(元素)
运算
1. 交集&:返回共同元素。
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2 # {2, 3}
2. 并集:返回不重复元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 | s2 # {1, 2, 3, 4}
3. 补集-:返回只属于其中之一的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 - s2 # {1} 属于s1但不属于s2
补集^:返回不同的的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2 # {1, 4} 等同于(s1-s2 | s2-s1)
4. 子集<:判断一个集合的所有元素是否完全在另一个集合中
5. 超集>:判断一个集合是否具有另一个集合的所有元素
s1 = {1, 2, 3}
s2 = {2, 3}
s2 < s1 # True
s1 > s2 # True
6. 相同或不同== !=:判断集合中的所有元素是否和另一个集合相同。
s1 = {1, 2, 3}
s2 = {3, 2, 1}
s1 == s2 # True
s1 != s2 # False
子集或相同,超集或相同 <= >=
集合推导式
1. 定义:
使用简易方法,将可迭代对象转换为集合。
2. 语法:
{表达式 for 变量 in 可迭代对象}
{表达式 for 变量 in 可迭代对象 if 条件}
函数 function
pycharm 快捷键
参数信息(在方法中调用参数)
Ctrl + Q 快速查看文档
Ctrl + Alt + M 提取方法
Ctrl + D 复制一行
定义
1. 用于封装一个特定的功能,表示一个功能或者行为。
2.函数是可以重复执行的语句块, 可以重复调用
作用
提高代码的可重用性和可维护性(代码层次结构更清晰)。
定义函数
1. 语法:
def 函数名(形式参数):
函数体
2. 说明:
def 关键字:全称是define,意为”定义”。
函数名:对函数体中语句的描述,规则与变量名相同。
形式参数:方法定义者要求调用者提供的信息。
函数体:完成该功能的语句。
3. 函数的第一行语句建议使用文档字符串描述函数的功能与参数。
调用函数
1. 语法:函数名(实际参数)
2. 说明:根据形参传递内容。
返回值
1. 定义:
方法定义者告诉调用者的结果。
2. 语法:
return 数据
3. 说明:
return后没有语句,相当于返回 None。
函数体没有return,相当于返回None。
可变/不可变类型在传参时的区别
1. 不可变类型参数有:
数值型(整数,浮点数)
布尔值bool
None 空值
字符串str
元组tuple
2. 可变类型参数有:
列表 list
字典 dict
集合 set
3. 传参说明:
不可变类型的数据传参时,函数内部不会改变原数据的值。
可变类型的数据传参时,函数内部可以改变原数据。
函数参数
实参传递方式argument
位置传参
定义:实参与形参的位置依次对应
序列传参
定义:实参用*将序列拆解后与形参的位置依次对应。
关键字传参
定义:实参根据形参的名字进行对应。
字典关键字传参
1. 定义:实参用**将字典拆解后与形参的名字进行对应。
2. 作用:配合形参的缺省参数,可以使调用者随意传参。
形参定义方式parameter
缺省形参
1. 语法:
def 函数名(形参名1=默认实参1, 形参名2=默认实参2, …):
函数体
2. 说明:
缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数 都必须有缺省参数。
缺省参数可以有0个或多个,甚至全部都有缺省参数。
位置形参
语法:
def 函数名(形参名1, 形参名2, …):
函数体
命名关键字形参
1. 语法:
def 函数名(*args, 命名关键字形参1, 命名关键字形参2, …):
函数体
def 函数名(*, 命名关键字形参1, 命名关键字形参2, …):
函数体
2. 作用:
强制实参使用关键字传参
不定长形参
星号元祖形参
1. 语法:
def 函数名(*元组形参名):
函数体
2. 作用:
可以将多个位置实参合并为一个元组
3. 说明:
一般命名为’args’
形参列表中最多只能有一个
双星号元祖形参
1. 语法:
def 函数名(**字典形参名):
函数体
2. 作用:
可以将多个关键字实参合并为一个字典
3. 说明:
一般命名为’kwargs’
形参列表中最多只能有一个
参数自左至右的顺序
位置形参 --> 星号元组形参 --> 命名关键字形参 --> 双星号字典形参
作用域 LEGB
1. 作用域:变量起作用的范围。
2. Local局部作用域:函数内部。
3. Enclosing 外部嵌套作用域 :函数嵌套。
4. Global全局作用域:模块(.py文件)内部。
Builtin内置模块作用域:builtins.py文件。
变量名的查找规则
1. 由内到外:L -> E -> G -> B
2. 在访问变量时,先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变 量,最后是内置变量。
局部变量
1. 定义在函数内部的变量(形参也是局部变量)
2. 只能在函数内部使用
3. 调用函数时才被创建,函数结束后自动销毁
全名变量
1. 定义在函数外部,模块内部的变量。
2. 在整个模块(py文件)范围内访问(但函数内不能将其直接赋值)。
global 语句
1. 作用:
在函数内部修改全局变量。
在函数内部定义全局变量(全局声明)。
2. 语法:
global 变量1, 变量2, …
a = 10
def func01():# 在函数内部,只能读取全局变量a = 20 # 创建局部变量,没有修改全局变量print(a) # 20
func01()
print(a) # 10
def func02():global a # 如果在局部变量修改全局变量,必须通过global声明a = 20print(a)
3. 说明
在函数内直接为全局变量赋值,视为创建新的局部变量。
不能先声明局部的变量,再用global声明为全局变量。
nonlocal 语句
1. 作用:
在内层函数修改外层嵌套函数内的变量
2. 语法
nonlocal 变量名1,变量名2, …
def func01():a= 1def func():nonlocal a #print(a)func()
func01()
3. 说明
在被嵌套的内函数中进行使用
行重写,从而改变其行为。
转换字符串
__str__函数:将对象转换为字符串(对人友好的)
__repr__函数:将对象转换为字符串(解释器可识别的)
运算符重载
定义:让自定义的类生成的对象(实例)能够使用运算符进行操作。
算数运算符重载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyFDxXi6-1600477831920)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200827154846816.png)]
复合运算符重载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2FpV9LgC-1600477831922)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200827154907785.png)]
比较运算符重载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qoX1S1V6-1600477831923)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200827154920224.png)]
设计原则
开-闭原则(目标、总的指导思想)
****O****pen ****C****losed ****P****rinciple
对扩展开放,对修改关闭。
增加新功能,不改变原有代码
类的单一职责(一个类的定义)
****S****ingle ****R****esponsibility ****P****rinciple
一个类有且只有一个改变它的原因。
依赖倒置(依赖抽象)
****D****ependency ****I****nversion ****P****rinciple
客户端代码(调用的类)尽量依赖(使用)抽象。
抽象不应该依赖细节,细节应该依赖抽象。
组合复用原则(复用的最佳实践)
Composite Reuse Principle
如果仅仅为了代码复用优先选择组合复用,而非继承复用。
组合的耦合性相对继承低。
里氏替换(继承后的重写,指导继承的设计)
****L****iskov ****S****ubstitution ****P****rinciple
父类出现的地方可以被子类替换,在替换后依然保持原功能。
子类要拥有父类的所有功能。
子类在重写父类方法时,尽量选择扩展重写,防止改变了功能。
迪米特法则(类与类的交互原则
Law of Demeter
不要和陌生人说话。
类与类交互时,在满足功能要求的基础上,传递的数据量越少越好。因为这样可能降低耦合度。
不能先声明局部的变量,再用global声明为全局变量。
nonlocal 语句
1. 作用:
在内层函数修改外层嵌套函数内的变量
2. 语法
nonlocal 变量名1,变量名2, …
def func01():a= 1def func():nonlocal a #print(a)func()
func01()
3. 说明
在被嵌套的内函数中进行使用
行重写,从而改变其行为。
转换字符串
__str__函数:将对象转换为字符串(对人友好的)
__repr__函数:将对象转换为字符串(解释器可识别的)
运算符重载
定义:让自定义的类生成的对象(实例)能够使用运算符进行操作。
算数运算符重载
[外链图片转存中…(img-lyFDxXi6-1600477831920)]
复合运算符重载
[外链图片转存中…(img-2FpV9LgC-1600477831922)]
比较运算符重载
[外链图片转存中…(img-qoX1S1V6-1600477831923)]
设计原则
开-闭原则(目标、总的指导思想)
****O****pen ****C****losed ****P****rinciple
对扩展开放,对修改关闭。
增加新功能,不改变原有代码
类的单一职责(一个类的定义)
****S****ingle ****R****esponsibility ****P****rinciple
一个类有且只有一个改变它的原因。
依赖倒置(依赖抽象)
****D****ependency ****I****nversion ****P****rinciple
客户端代码(调用的类)尽量依赖(使用)抽象。
抽象不应该依赖细节,细节应该依赖抽象。
组合复用原则(复用的最佳实践)
Composite Reuse Principle
如果仅仅为了代码复用优先选择组合复用,而非继承复用。
组合的耦合性相对继承低。
里氏替换(继承后的重写,指导继承的设计)
****L****iskov ****S****ubstitution ****P****rinciple
父类出现的地方可以被子类替换,在替换后依然保持原功能。
子类要拥有父类的所有功能。
子类在重写父类方法时,尽量选择扩展重写,防止改变了功能。
迪米特法则(类与类的交互原则
Law of Demeter
不要和陌生人说话。
类与类交互时,在满足功能要求的基础上,传递的数据量越少越好。因为这样可能降低耦合度。
python核心基础知识相关推荐
- python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系
原标题:最新版 17 幅思维导图:Python 编程之核心知识体系 导读:本文主要涵盖了 Python 编程的核心知识,展示了一系列思维导图,主要就 Python 核心基础知识进行了细致梳理.无论你是 ...
- python基础知识总结-python编程语言基础知识总结
原标题:python编程语言基础知识总结 今天给大家讲解python语言基础~~ 01.python核心数据类型 整型数 int:整数是不带有小数部分的数字 浮点型数 float:浮点数是带有小数部分 ...
- 程序员必会的核心基础知识:1张导图+10本书
▲点击可查看大图 一年一度的秋招即将拉开序幕,程序员"金九银十"跳槽季也接踵而至.大部分互联网公司都会进行基础知识的考察,基础知识的重要性不言而喻. 计算机基础知识对程序员来说为什 ...
- python编程语言-python编程语言基础知识总结
原标题:python编程语言基础知识总结 今天给大家讲解python语言基础~~ 01.python核心数据类型 整型数 int:整数是不带有小数部分的数字 浮点型数 float:浮点数是带有小数部分 ...
- python前端基础知识总结 及部分练习题
python前端基础知识总结 知识总结 认识Python 发展历史 版本选择 python2.7是python2的最后一个版本,到2020年将不再维护 python3.6是python3最新的版本,是 ...
- python基础1:认识python和基础知识
第一章 认识python和基础知识 本章目录 1.1. 认识python(了解)1.2. 第一个python程序1.3. 注释1.4. 变量以及类型1.5. 标示符和关键字1.6. 输出1.7. 输入 ...
- python代码计算矩形面积_学习资料Python语言基础知识笔记以及答案
01. Python语言基础知识等笔记: 02. Python作业答案: [例2-3]通过输入函数input()输入股票代码.股票名称.当天股票最高价和最低价,通过输出函数print()输出股票代码+ ...
- python基础实例-Python入门基础知识实例,值得收藏!
7月的编程语言指数榜已经发布,Python 在今年5月首次超越 Java 拿下榜首位置后,仍保持上涨趋势,正逐渐与 Java 拉开差距.(图为与去年 7 月数据对比) 上周为大家简单介绍了如何安装Py ...
- python基础实例-Python入门基础知识实例,
今天小白就为大家分享一些Python的基础知识,希望大家都能快速入门Python~ 1.在Python 语言中,对象是通过引用传递的. 在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对 ...
最新文章
- 办公求生指南:分享10个可以提高办公效率的优质神器
- js按钮触发网页提醒_js触发asp.net的Button的Onclick事件应用
- Sharepoint 2007 定制Feature和卸载Feature
- Eclipse Class Decompiler---Java反编译插件
- 攻击 FreeIPA 域:对象枚举
- Android system.img 打包解包
- node-mysql中的连接池代码学习
- 深度剖析:Redis 分布式锁到底安全吗?看完这篇文章彻底懂了!
- 【数据结构与算法】二叉树结点最小深度求解算法
- Java中解决继承和接口默认方法冲突
- 重磅!阿里推出国产开源的JDK!这是要干掉oracle??
- PyTorch批训练及优化器比较
- jquery以及jquery对象介绍
- 去除360安全卫士的广告弹窗(亲测有效)
- 无限纷争怎么看以前的服务器,无限纷争怎么切换角色 无限纷争切换角色方法...
- page_to_pfn 、virt_to_page、 virt_to_phys、page、页帧pfn、内核虚拟地址、物理内存地址linux内核源码详解
- Nginx代理服务器的安装及 开机启动配置
- 斗鱼直播地址抓取——转载
- 停车还能360全方位影像_新款途锐2.0版、3.0版均能升级的原厂360全景影像及盲点辅助系统...
- 国家级贫困县摘帽情况分省分年统计(832个)
热门文章
- table 固定表头
- 【Python的自学之路】(五):案例分析第三课
- qpython 3h怎么使用_不思议迷宫M15怎么玩 不思议迷宫M15攻略
- 白热化的能源汽车市场、应如何与之抗衡?
- win10怎么改管理员名字_英雄联盟手游怎么改名字可以改吗?lol手游ID格式最多几个字...
- 摩尔的预言 唯有CUDA才是终极的CPU
- 【个性化】Windows10系统的个性化设置
- 网页滚动特效—WOW.JS快速使用教程
- CCAI 2017 | 刘燕:艺术与人工智能的明天——人机信任合作
- php cve 2017 12933,18-017 (March 27, 2018)