冯诺依曼体系架构
- CPU:由运算器和控制器组成(CPU中还有寄存器和多级缓存Cache)
运算器:完成各种算数运算、逻辑运算、数据传输等数据加工处理
控制器:控制程序的执行 - 存储器:用于记忆程序和数据,例如内存(Memory)
- 输入设备:将数据或程序输入到计算机中,例如键盘,鼠标
- 输出设备:将数据或程序的处理结果展示给用户,例如显示器,打印机等
运算器、控制器、存储器、输入输出设备 称为冯诺依曼体系架构五大部件
程序
- 程序=算法+数据结构
- 数据是一切程序的核心
- 数据结构是数据在计算机中的类型和组织方式
- 算法是处理数据的方式,算法有优劣之分
基础语法
字符串
- r 前缀:在字符串前面加上 r 或者 R 前缀,表示该字符串不做特殊的处理,回归本义
# 未加 r 前缀
> C = 'windows
vidia'
> print(C)
> windows
vidia
# 加上 r 前缀
> C = r'windows
vidia'
> print(C)
> windows
vidia
#
在Python中表示换行符; 前缀 r ,把里面的所有字符当普通字符对待
- f 前缀:3.6版本开始 ,新增 f 前缀,格式化字符串
# 未加 f 前缀
> a = 'yinx1n'
> "He name is {a}"
> 'He name is {a}'
# 加上 f 前缀
> a = 'yinx1n'
> f"He name is {a}"
> 'He name is yinx1n'
转义序列
- ’ "
- 前缀 r ,把里面的所有字符当普通字符对待
标识符
- 一个名字,用来指代一个值
- 只能是字母、下划线和数字
- 只能以字母或下划线开头(不建议以下划线开头)
- 不能是Python的关键字,例如def、class就不能作为标识符
- Python大小写是敏感的
约定:
不允许使用中文
不要使用歧义单词,例如class_
在Python中不要随便使用下划线开头的标识符
常量
- 一旦赋值就不能改变值的标识符
- Python中无法定义常量
变量
- 赋值后,可以改变值的标识符
字面常量
- 一个单独的量,例如12、“abc”、‘2341356514.03e-9’
Python的语言类型
- Python是动态语言、强类型语言
- 静态编译语言
- 事先声明变量类型,类型不能再改变,用之前事先声明
- 编译时检查
- 动态编译语言
- 优:不用事先声明变量类型,随时可以赋值为其他类型,用的时候可以直接赋值
- 缺:编程时不知道是什么类型,很难推断
- 强类型语言
- 不同类型之间操作,必须先强制类型转换为同一类型。print(‘a’+1)
- 弱类型语言
- 不同类型间可以操作,自动隐式转换,JavaScript中console.log(1+‘a’)
原码、反码、补码,负数表示法
机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1
比如,十进制中的数 +4 ,转换成二进制就是 0000 0100,如果是 -4 ,就是 1000 0100
那么,这里的 0000 0100 和 1000 0100 就是机器数
真值
将带符号位的机器数对应的真正数值称为机器数的真值
例如:0000 0100 的真值 = +000 0001 = +1,1000 0100 的真值 = –000 0001 = –1
原码
符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
(0000 1111, 1000 1111)
即:
(15, -15)
原码是人脑最容易理解和计算的表示方式
反码
正数的反码与原码相同,负数的反码是在其原码的基础上, 符号位不变,其余按位取反
[+1] = [0000 0001]原 = [0000 0001]反
[-1] = [1000 0001]原 = [1111 1110]反
补码
正数的补码与原码相同,负数的补码在其原码的基础上,符号位不变,其余按位取反后+1
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
负数表示法
- 早期数字电路的CPU中的运算器实现了加法器,没有减法器,减法要转换成加法
- 负数在计算机中使用补码存储,-1 的补码为1111 1111
运算符
位运算符
- 按位与&:按位与是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位都为 1,则此位为 1,否则为 0
- 按位或 |:按位或是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位有一个为 1,则此位为 1,否则为 0
- 按位异或^:按位异或是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位不同,则此位为 1,相同为 0
- 按位取反~:按位取反也称作“按位取非”或“求非”或“取反”,是针对二进制数的操作,指将两个二进制数的每一二进位都进行取反操作,0 换成 1,1 换成 0
逻辑运算符:
- 与或非 and or not
短路运算符
- and 如果前面的表达式等价为False,后面就没有必要计算了,这个逻辑表达式一定等价位False
- 1 and ‘2’ and 0
- 0 and ‘abc’ and 1 - or 如果前面的表达式等价位True,后面就没有必要计算了,这个逻辑表达式一定等价为True
- 1 or False or None
真值表
对象/常量 | 值 |
---|---|
“” 空字符串 | 假 |
“string” | 真 |
0 | 假 |
>=1 | 真 |
<=-1 | 真 |
()空元组 | 假 |
[]空列表 | 假 |
{}空字典 | 假 |
None | 假 |
- False等价 布尔值,相当于bool(value)
-
空容器:
- 空集合set
- 空字典dict
- 空列表list
- 空元祖tuple
-
空字符串" "
-
None对象
-
0
-
成员运算符:in、not in
身份运算符:is、not is
运算符优先级
- 算数运算符 > 比较运算符 > 逻辑运算符
- 单目运算符 > 双目运算符
- 记不住,用括号
- 长表达式,多用括号,易读、易懂
表达式Expression
- 由数字、符号、括号、变量等的组合
- 算数表达式
- 逻辑表达式
- 赋值表达式
- Python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义
内存管理
内存碎片整理好,整理出大量的连续空间
- 变量无须事项声明,也不需要指定类型,这是动态语言的特性
- Python编程中一般无须关心变量的存亡,一般也不用关心内存的管理
- Python使用引用计数记录所有对象的引用数
- 当对象引用数变为 0,它就可以被垃圾回收GC(Garbage Collection)
- 计数增加:
- 赋值给其它变量就增加引用计数,例如 x = 3;y = z;z = [x, 1]
- 实参传参,如foo(y)
- 计数减少:
- 函数结束运行时,局部变量就会被自动销毁,对象引用计数减少
- 变量被赋值给其它对象,例如 x = 3,y = x,x = 4
- 有关性能的时候,就需要考虑变量的引用问题,但是该释放内存还是尽量不释放内存,看需求