Python 编程基础知识

python 基础

标签(空格分隔): python-基础


一、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

猜你喜欢

转载自www.cnblogs.com/jingru-QAQ/p/11357508.html