python 基础
标签(空格分隔): python-基础
目录
- python 基础
- 一、python 概述
- 二、python2 和 python3 区别
- 三、python 基础
- 3.1 体系架构
- 3.1.1 图灵机
- 3.1.2 冯诺依曼体系
- 3.2 语言体系
- 3.2.1 计算机语言
- 3.2.2 高级语言的发展
- 3.2.4 低级语言和高级语言
- 3.2.5 编译语言和解释语言
- 3.3 程序 Program
- 3.4 Python 基础语法
- 3.4.1 基础语法
- 3.4.2 python的语言类型
- 3.4.3 原码、反码、补码,负数表示法
- 3.5 Python 解释器
- 3.6 内存管理
- 3.7 python程序控制
- 3.7.1 概念
- 3.7.2 真值表
- 3.7.3 分支
- 3.7.3.1 单分支结构
- 3.7.3.2 多分支结构
- 3.7.3.3 分支嵌套
- 3.7.3.4 循环
一、python 概述
目录 | 含义 |
创始人 | 荷兰人(Guido van Rossum) |
创始时间 | 1989年 |
Python 哲学 |
|
二、python2 和 python3 区别
区别点 | python2 | python3 |
语言函数化 | print 关键字 | print() 函数 |
整除 | / 整除 | / 自然除 |
input函数 | raw_input | 3.x 中的 |
round函数 | ||
字符串 | 统一使用unicode 字符 | |
语法 | 异常捕获、抛出的语法改变 |
三、python 基础
3.1 体系架构
3.1.1 图灵机
- 程序
- 一组能让计算机识别和执行的指令
- 电子计算机
- 能够执行程序的机器
- 现代计算机
- 图灵机,为现代计算机的逻辑工作方式奠定了基础
- 冯诺依曼体系
3.1.2 冯诺依曼体系
- 计算机的五大部件
- 运算器: 完成各种计算
- 控制器: 控制程序执行
- 存储器: 用来记忆程序和数据, 例如内存(掉电即失)
- 输入设备: 将数据或者程序输入到计算机中
- 输出设备: 将输出或者程序处理的结果展示给用户; 磁盘
特别说明:
1、CPU 由运算器和控制器(中央处理器)
2、CPU 中还有寄存器和多级缓存 (Cache)
3、所有的数据, 都是先加载到内存, 再交给 cpu 处理, 因此 cpu 并不直接跟磁盘做交互; 同时 CPU 也不直接使用内存中的数据, 必须使用寄存器,先加载到寄存器再计算,计算完成后再从寄存器移动到内存中
3.2 语言体系
3.2.1 计算机语言
- 人与计算机之间交互的语言
- 低级语言:
- 机器语言
- 一定位数组成二进制的 0 和 1 的序列, 称为机器指令。机器指令的集合就是机器语言
- 汇编语言
- 用一些助记符 替代 机器指令, 称为汇编语言。
-汇编语言写号的程序需要汇编程序转换为机器指令
不同的机器不能通用,不同的机器需要不同的机器指令或者汇编程序
- 高级语言
- 接近自然语言和数学语言的计算机语言
3.2.2 高级语言的发展
- 非结构化语言
- GOTO, 子程序可以有多个入口和出口
- 有分支、循环
- 结构化语言
- 任何基本结构只允许是唯一入口和唯一出口
- 顺序、分支、循环,废除GOTO
- 面向对象语言
- 更加接近人类认知世界的方式, 万事万物抽象成对象,对象将关系抽象成类和对象
- 封装、继承、多态
- 函数式语言
- 古老的编程范式,应用在数学计算、并行处理的场景;
- 函数是"一等公民", 高阶函数
大数据时代的到来, 大量的数据计算, 因此代码越接近于数学公式, 则越精简; 因此再次被引入到了很多现代高级语言中
3.2.4 低级语言和高级语言
- 语言越高级,越接近人类的自然语言和数学语言
- 语言越低级,越能让机器理解
- 高级语言和低级语言之间需要一个转换的工具, 编译器、解释器
1、C, C++ 等语言的源代码需要本地编译(跟操作系统类型和CPU指令集紧密相关的, 因此在不同的操作系统下, 都需要重新编译)
2、Java, Python, C# 的源代码需要被解释器编译成中间代码(Bytecode, 字节码), 在虚拟机上运行
3.2.5 编译语言和解释语言
- 编译语言, 把源代码转换为目标机器的CPU指令
- 解释语言, 解释后转换为字节码, 运行在虚拟机上, 解释器执行中间代码
虚拟机, 一次编译, 到处运行, 相当于 不同的操作系统和CPU指令集等相关的东西, 都有虚拟机来完成, 只要能够安装部署虚拟机, 就可以运行字节码程序
3.3 程序 Program
- 程序:
- 算法 + 数据结构=程序
- 数据是一切程序的核心
- 数据结构是数据在计算机中的类型和组织方式
- 算法是处理数据的方式,算法有优劣之分
3.4 Python 基础语法
3.4.1 基础语法
- 注释: #
- 数字:
- 整数, 不区分 long 和 int
- 0xa (16进制), 0O10 (八进制), 0b10 (二进制)
- bool (True, False)
- 浮点数
- 只能对某些数据做近似表达; 无限不循环, 无理数等
- 复数
- 字符串
- 单引号, 双引号, 三引号
- 转义字符
| \\ | 转义\ |
| \t | 转义 Tab 键 |
| \r | 转义 回车 |
| \n | 转义 换行 |
| \' | 转义 单引号 |
| \" | 转义 双引号 |
> 前缀r, 把里面的所有字符当普通字符对待
- 缩进
- 约定使用 4 个空格缩进
- 续行
- 在 行尾使用 , 然后直接回车换行
- 标识符
- 只能由数字、字母、下划线, 且不能由数字开头, 不能使用关键字
- 在 python 中是大小写敏感的
- 约定:
- 不允许使用中文
- 不允许使用歧义单词
- 在python中不要随便使用下划线开头
- 常量
- python 中无法定义常量
- 字面常量
- 一个单独的量
- 变量
- 赋值后,可以改变值的标识符
- 运算符 Operator
- 算数运算符
运算符 | 含义 |
/ | 自然除 |
// | 整除 |
% | 取余 |
+ | 加法 |
- | 减法 |
* | 乘法 |
* | 平方 |
> `1/0` 除零异常
- 位运算符
运算符 | 含义 |
竖 | 位或 |
| 位于 |
| 按位取反 |
| 异或 |
| 左移位 |
| 右移位 |
3.4.2 python的语言类型
- python 是动态语言、强类型语言
- 动态编译语言和静态编译语言
- 动态编译语言
- 不用事先声明类型, 随时可以赋值为其他类型
- 编程时不知道是什么类型, 很难推断
- 静态编译语言
- 实现声明变量类型, 类型不能改变
- 编译是检查
- 强类型语言和弱类型语言 (相对概念)
- 强类型语言
- 不同类型之间操作, 必须先强制类型转换为同一类型。
- 弱类型语言
- 不同类型间可以操作, 自动隐式转换; javascript
如果字符串加数字报错, 则为强类型语言; 反之, 如果不抛错, 则为弱类型语言
3.4.3 原码、反码、补码,负数表示法
- 位运算符
运算符 | 含义 |
竖 | 位或 |
| 位于 |
| 按位取反 |
| 异或 |
| 左移位 |
| 右移位 |
- 原码、反码、补码,负数表示法
- 原码
- bin(-1) 5 ---> 0b0101,-1---> -0b1
- 反码
- 正数的反码和源码相同, 负数的反码符号位不变其它按位取反
- 补码
- 正数的补码与源码相同, 负数的补码符号位不变,其余按位取反后 +1;
- 补码的补码, 就是源码
计算机中的所有数据, 都是补码
- 负数表示法
- 数字电路的CPU中的运算器实现了加法器, 但没有实现减法器, 减法是转换成加法
- 负数在计算机中使用补码存储, -1的补码为 `0b1111 1111`
- 实例
- `5-(-1)`
> 推理过程:
直觉上是 `0b101 - 0b1`
但计算机中是: 0b101 + 0b11111111
, 溢出位舍弃
- `~12` 为什么是 `-13`?
> 推理过程:
====== `~12` (12取反)
`0000 1100` --->12的补码
`1111 0011` --->取反后, 是补码, 最高位为 1, 因此为负数
`1000 1101` --->补码的补码就是原码, 因此取反 +1; 因此为 `-13`
- `10^9`等于? `10^-9`等于?为什么?
推理过程:
待补充
3.5 Python 解释器
- 官方 CPython
- C语言开发, 最广泛的Python解释器
- IPython
- 一个交互式,功能增强的Cpython
- PyPy
- Python语言开发写的Python解释器, JIT技术(just in time, 动态编译Python代码)
- Jython
- Python 的源代码编译成Java的字节码, 跑在 JVM 上(Java虚拟机)
- IronPython
- 与Jython类型, 运行在 .Net 平台上的解释器, Python代码被编译成 .Net 的字节码
3.6 内存管理
- 变量无须实现声明,也不需要指定类型
- 动态语言的特性
- 编程中一般无需关心变量的存亡, 也不用关心内存的管理
- python使用引用计数记录所有对象的引用数
- 当对象引用数变为 0, 它就可以被垃圾回收(GC)
- 计数增加: 赋值给其它变量就增加引用计数
- 计数减少:
- 函数运行结束时, 局部变量就会被自动销毁, 对象引用计数减少
- 变量被赋值给其它对象
- 术语:
- 内存空洞, 引用计数, 内存整理
3.7 python程序控制
3.7.1 概念
- 顺序
- 顺序执行
- 分支
- 根据不同的情况判断, 条件满足执行该条件下的语言
- 循环
- 条件满足反复执行, 条件不满足则跳过
3.7.2 真值表
- 空字符串, 空字典, 空元组, 空列表, None对象, 0 都等价于 False
3.7.3 分支
3.7.3.1 单分支结构
if 语句
if condition:
代码块
condition 必须是一个bool类型, 这个地方有一个隐式转换bool(condition)
3.7.3.2 多分支结构
if condition:
pass
elif condition:
pass
else:
pass
分支结构, 无论满足多少分支条件,都只能进一个分支(先进入前面的分支)
3.7.3.3 分支嵌套
# 分支嵌套语法结构
if condition:
pass
else:
if condition:
pass
elif condition:
pass
else:
pass
嵌套结构, 可以是分支、循环的嵌套
可以互相嵌套多层
3.7.3.4 循环
while 循环
while condition:
block
当条件满足即condition为 True, 进入循环体, 执行 block
for 循环
for element in iteratable:
block
当可迭代对象中有元素可以迭代, 进入循环体, 执行 block
break 语句
- 终止当前循环
continue 语句
- 结束本次循环
循环 continue, break 语句
1、continue 和 break 是循环的控制语句, 只影响当前循环, 包括while, for循环
2、如果循环嵌套, continue和break也至影响语句所在的那一层循环
3、continue和break 不是跳出语句块, 所以 if condition: break 不是跳出 if , 而是终止if外的break 所在的循环
循环 else 子句
如果循环正常的执行结束, 就会执行else, 如果被break打断, 则不执行 else