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 哲学

import this python 之禅


二、python2 和 python3 区别

区别点

python2

python3

语言函数化

print 关键字

print() 函数

整除

/ 整除

/ 自然除

input函数

raw_input

3.x 中的 raw_input 重命名为 input,不在使用 raw_input

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