桐花万里python路-基础篇-01-历史及进制
- 历史及版本
- 作者:吉多·范罗苏姆(龟叔)
- 时间:1989年
- 重要版本:
- 2.4 2004年 同年Django诞生
- 2.6 2008
- 3.0 2008
- 2.7 2010
- 3.6 2016.12 当前使用版本
- py2和py3
- 区别:统一、标准、去除重复代码
- 类库更改
Python2.x | Python3.x
_winreg | winreg
ConfigParser | configparser
copy_reg | copyreg
Queue | queueSocketServer | socketserver
markupbase | _markupbase
repr | reprlib
test.test_support | test.support - In summary : Python 2.x is legacy, Python 3.x is the present and future of the language
- Python解释器
- 种类
- CPython 官方
- IPython 交互增强的CPython
- Pypy JIT,非解释的动态编译
- JPython Java字节码
- IronPython .Net字节码
- 编译型和解释型
- 编译型:编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。C,C++,Go,Object-C,Swift,...
- 解释型:没有编译过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行。Ruby,PHP,Javascript,...
- 基于虚拟机的语言:通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。JAVA,C#,其实Python是基于虚拟机的混合型语言
- 特点:一般来说,解释型的语言开发效果高,易于维护、跨平台,编译型的语言运行效率较高
- 种类
- 执行脚本
- 交互器
- 指定解释器
#!/usr/bin/env python print("hello world!")
- 其他说明
- 编码 :py2默认编码为ASCII ,py3为UTF_8
# -*- coding: utf-8 -*-
- 注释:
# 单行注释 ''' 多行注释 多行注释 多行注释 ... ''' #或 """ 多行注释 多行注释 多行注释 ... """
- 空行
- 函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。 空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
- 分号
- 一般不用分号,如果单行需要写多个语句则需要。
- 缩进
- python非常注重缩进,2个空格或4个空格或1个Tab键。
- 多行语句
- 末尾使用斜杠 ( \ ) ,将一行分为多行
a = 5 b = 6 c = 7 d = a + \ b + \ c
- 末尾使用斜杠 ( \ ) ,将一行分为多行
- 编码 :py2默认编码为ASCII ,py3为UTF_8
- 进制
- 是一种计数的方式,数值的表示形式
- 常用进制
- 二进制 b
- 八进制 o
- 十进制
- 十六进制 hex
- 机器数
- 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
- 机器数是带符号的,用一个数的最高位存放符号, 正数为0, 负数为1
- 真值
- 将带符号位的机器数对应的真正数值称为机器数的真值
- 因为第一位是符号位,所以机器数的形式值就不等于真正的数值
- 原反补
- 数据在计算机内部是以补码的形式储存的
- 数据分为有符号数和无符号数,无符号数都为正数,由十进制直接转换到二进制直接存储(其实也是该十进制的补码)即可
- 正数的最高位是符号位0,其原码是由十进制数转换到的二进制数字;负数的最高位是 符号位1,其原码后面的位也为10进制数转换过去的二进制数字,都是用补码方式表示 有符号数的
- 原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
- 反码:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
- 补码:正数的补码是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
- 正数:三码合一
- 负数:反码 = 源码取反,补码 = 反码+1, 或者 补码 = 源码取反 + 1
1+(-1) = 0 00000000 00000000 00000000 00000001 1 源码 00000000 00000000 00000000 00000001 1 反码 00000000 00000000 00000000 00000001 1 补码 10000000 00000000000000000000000001 -1源码 11111111 11111111 11111111 11111110 -1反码 11111111 11111111 11111111 11111111 - 1补码 00000000 00000000 00000000 00000001 1的补码 11111111 11111111 11111111 11111111 + -1的补码 ---------------------------------------------------------------------------- 00000000 00000000 00000000 00000000 0 1(源码) + (-1)(源码) = -2 1(反码) + (-1)(反码) = -0 1(补码) + (-1)(补码) = 0
- 位运算
- & 按位与
- 同1为1,有0为0
- 只有对应的两个二进位均为1时,结果位才为1,否则为0
- 任何一个数和1进行&(按位与)得到任何一个数的二进制的最后一位
- | 按位或
- 有1则1
- 只要对应的二个二进位有一个为1时,结果位就为1,否则为0
- ^ 按位异或
- 同0非1
- 当对应的二进位相异(不相同)时,结果为1,否则为0
- ~ 取反
- 各二进位进行取反(0变1,1变0)
- 左移 <<
- 各二进位全部左移n位,高位丢弃,低位补0
- 左移可能会改变一个数的正负性
- 左移1位相当于乘以2的n次方
- 8<<3 等同于8*(2**3)
- 右移 >>
- 各二进位全部右移n位,保持符号位不变
- 所有二进制位向右移动n位,移出的位删掉,移进的位补符号位
- 右移不会改变一个数的符号
- 右移 n 位就相当于除以2的n次方
- 8>>3 等同于8/(2**3)
- & 按位与
- 是一种计数的方式,数值的表示形式