桐花万里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 | queue
        SocketServer     |      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
  • 进制
    • 是一种计数的方式,数值的表示形式
    • 常用进制
      • 二进制 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)
posted @ 2018-01-03 10:05  zhujingxiu  阅读(165)  评论(0编辑  收藏  举报