python - 数据类型

 数据类型和变量

  数据类型

    计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:
      整数
        Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
        计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
      浮点数
        浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
      字符串
        字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。

      布尔值
        布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来
布尔值可以用and、or和not运算。
        or运算是或运算,只要其中有一个为True,or运算结果就是True:

        ot运算是非运算,它是一个单目运算符,把True变成False,False变成True:

      空值
        空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
        此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到。
      变量
        变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
        变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头
      常量
        所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量


    Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。
  

  注意:Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,
  例如Java对32位整数的范围限制在-2147483648-2147483647。
  Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。

 

  核心数据类型

        数字:int,long ,float,complex,bool
        字符:str,Unicode
        列表:list   
        字典:dict    
        元祖:tuple    
        文件:file    
        其他类型:

        集合(set)

        frozenset,

        类类型,

        None
 
      其他文件类工具:
        pipes
        fifos

  类型转换

    str(),repr()或format() 将非字符数据转换为字符
    int() 转化为整数
    float()
    list():将子串转为列表
    tuple() 将字串转为元祖
    set() 将字串转为集合
    dict()创建字典,其d必须是(key,value) 的元祖序列
 
    chr(x) 将整数转为字符
    ord(x)将字符转为整数值
    hex(x)将整数值转为16进制字符
    bin(x)转为2进制
    oct(x)转为8进制

 

python 使用5中数字类型:
布尔型
整型
长整型
浮点型
复数
所有数字类型均为不可变
True : 1

False: 0

 

 

序列类型
    字符类型
            字符串自变量:
                把文本放入单引号、双引号或三引号中
                '' , "", '''  '''
            如果要使用unicode 编码,则在字符之前使用字符u进行标识,如u"nihao"
            文档字串:
                模块、类或函数的第一条语句是一个字符的话,该字符串就成为文档字符串,可以使用_doc_属性引用
 
            运算符:
                索引运算:[i]
                切片运算:[i:j]
                扩展切片:[i:j:stride]

 支持运算
                索引、切片、min()、max()、len()等
            
            支持操作
                对象的自有的方法
        
        列表:
            容器类型
                任意对象的有序列集合,通过索引访问其中的元素,可变对象,长度可变,异构,任意嵌套.
            支持在原处修改
                修改制定的索引元素,修改制定的分片,删除语句,内置方法
 
            l1 + l2 :合并两个列表,返回一个新的列表,不会修改原列表
            l1 * N :把l1 重复 N次,返回一个新列表

in :成员关系判断字符,用法obj in container
            not in :obj not in contaner
            
            列表解析:
                []
            列表复制方式:
                l1  = [1,2,3,4]
                l2 = l1
                import copy 
                l2 = copy.deepcopy(l1)
                l2 = l1[:]
-----------------------------------------------------------------
元组:

表达式符号()
容器类型
        任意对象的有序集合,通过索引访问其中的元素,不可变对象,长度固定
        异构,嵌套
常见操作
    ()
    (1,)
    (1,2)
 
    t1 + t2 :
    t1 * N
in
    not in 
    
    虽然元组本身不可变,但如果元组内嵌套了可变类型元素,那么此类元素的修改不会返回新元组.
 
序列类型支持的操作符:

 


容器、类型、对象
1、
2、所有对象都有引用计数
3、列表和字典都支持两种类型的复制操作:
    浅复制和深复制;
    深复制可以使用copy模块中的deepcopy()实现。
4、python中的所有对象都是‘第一类的’这意味着使用标识符命名的所有对象都具有相同状态,于是,能够命名所有对象都可以直接当做数据进行处理。
5、所有序列都支持迭代。
6、所有序列都支持的操作和方法:
s[i]
s[i:j]
s[i:j:stride]
len(s)
min(s)
max(s)
sum(s)
all(s)
any(s)
s1 + s2 :连接
s1 * N :重复
obj in s1 :成员关系判断
obj not in s1:成员关系判断
 
7、可变序列的操作:
 s1[index] = value :元素赋值
s1[i:j] = t  :切片赋值
del s1[i:j]
del s1[i:j:stride]
 
python 的表达式和语句:
表达式
语句

python 中常用表达式操作符:
            x + y ; x -y;
            x * y ; x / y ; x // y , x % y;
            逻辑运算:
            x or y ; x and y ; not x 
            成员关系运算:
            x in y , x not in y 
            对象实例测试:
            x is y , x not is y 
            比较运算:
            x < y , x > y, x ! y
            位运算:
            x | y , x & y , x ^ y , x << y ,x >> y
            一元运算:
            -x , +x , ~x
            幂运算:
            x ** y
            索引和分片
            x[i],x[i:j],x[i:j:stride]
            调用:
            x(...)
            取属性:
            x.attribute
            
            元组:(...)
            序列:[...]
            字典:{...}
 
            三元表达式:    x if y else z
            匿名函数:        lambda args : expression
            生成器函数发送协议: yield x
 
    运算优先级:
        (...),【...】,{...}
        s[i],s[i:j]
        s.attribute
        s(...)
        +x,-x,~x
        x**y
        *,/,//,%
        <<,>>
        &
        ^
         |
        <,<=,>,>=,=,!=
        is,not is
        in ,not in
        not
        and
        or
        lambda
        
    语句:
           赋值语句
           调用
           print : 打印对象
           if/elif/else: 条件判断
           while/else:普通循环
           pass:占位符
            
            break:
            continue
            def
            return
            yield
            global :命名空间
            raise    : 触发异常
            import
            from    模块属性访问
            class    类
            try/except/finally  捕捉异常
            del 删除引用
            assert 调试检查
            with/as 环境管理器。
 
            赋值语句:
                隐式赋值:
                    import,from,def,class,for 函数参数
                元组和列表分解赋值:
                    当赋值符号= 的左侧为元组或列表时,python会按照位置把右边的对象和左边的目标自左而右逐一进行匹配。
                多重目标赋值:
                增强赋值: +,-,*,/,

 

引用VS拷贝           

    顶层复制
            深层复制
        比较、相等性和真值
            ‘==’操作符测试值的相等性
            ‘is’表达式测试对象的一致性
                
python 中不同类型比较方法:
    1.数字通过相对大小进行比较
    2.字符串是按照字典顺序,一个字符接一个字符的对比进行比较(‘abc’<'ac')
    3.列表和元组从左到右对每部分的内容进行比较
    4.字典通过排序之后(键,值)列表进行比较。字典的相对大小比较在python3.0中不支持,但是,他们在python2.6及更早的版本中有效,就像比较排序的(键,值)列表一样。
    5.数字混合类型比较(例如,1<''spam'')在python3中是错误的,python2中允许这样叫,但是使用一种固定但任意的排序规则。通过代理,这也适用于排序,它在内部使用比较,非数字的混合类型集合不能在python3中排序。
 
python中的其他类型:
    1. 赋值生产引用,而不是拷贝
    2.重复能够增加层次深度
    3.留意循环数据结构
    4.不可变类型不可以在原处修改

posted @ 2019-01-02 10:57  Anec  阅读(189)  评论(0编辑  收藏  举报