• 01Python变量的数据类型 Jil



    为何变量值要区分类型呢?
    ''' 
       变量值是用来记录事物状态的,而事物的
    状态是各种各样的,所以对应着就应该用不同
    类型的值去记录这些状态
    '''
    
    

    一、 变量的使用:

    #1、变量基本使用
    # 原则:先定义,后引用
    name = 'egon'  # 定义-》存
    print(name)  # 引用-》取
    
    age = 18
    print(age)
    
    # 2、内存管理:垃圾回收机制
    # 垃圾:当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到,称之为垃圾
    # 引用计数增加
    x = 10  # 10的引用计数为1
    y = x  # 10的引用计数为2
    z = x  # 10的引用计数为3
    
    # 引用计数减少
    del x  # 解除变量名x与值10的绑定关系,10的引用计数变为2
    print(y)
    del y  # 10的引用计数变为1
    print(z)
    z = 12345  # # 10的引用计数变为0
    print(z)
    
    # 4、变量名的命名风格
    # 4.1 纯小写加下划线的方式(在python中,关于变量名的命名推荐使用这种方式)
    age_of_alex = 73
    # print(age_of_alex)
    # 4.2 驼峰体
    AgeOfAlex = 73
    # print(AgeOfAlex)
    
    
    # 5、变量值三个重要的特征
    name='egon'
    # id:反映的是变量值的内存地址,内存地址不同id则不同
    print(id(name))
    # type:不同类型的值用来表示记录不同的状态
    print(type(name))
    # value:值本身
    print(name)

     二、变量的类型

    1、字符串类型

    #作用:记录描述性质的状态
    #定义:在''、""、''''''、""""""中包含一串字符
    #单行字符串''、""
      msg = "hello world"
      name = 'jil'
    #多行字符串''''''、""""""
      msg_n = """aaa
      bbb
      ccc
      """
    #外层用单引号,内层就用双引号
      info = 'my name is "jil"'
    其他使用:
    # 字符串的嵌套,注意:外层用单引号,内存应该用双引号,反之亦然
    # print("my name is 'egon'")
    # print('my name is \'egon\'')
    
    # 字符串之间可以相加,但仅限于str与str之间进行,
    # 代表字符串的拼接,了解即可,不推荐使用,因为str之间的
    # 相加效率极低
    # print('my name is '+'egon')
    # print('='*20)
    # print('hello world')
    # print('='*20)

    2、整型

    # 作用:年龄、号码
    # 定义方式:
      age = 18
      age ="d"
      print(age)
    小整数池概念:
    #小整数池(python内置):
    #从python解释器启动那一刻开始,就会在内存中事先申请一系列内存空间存放好常用的整数
    #Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收
    '''
    >>> x = 15      
    >>> y = 15      
    >>> z = 15      
    >>> id(x)
    140713836857440
    >>> id(y)
    140713836857440
    >>> id(z)
    140713836857440
    '''
    #字符串的复用机制(python内置):
    #intern机制处理空格。一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了。
    '''
    >>> a = "abc"
    >>> b = "abc"
    >>> id(a)
    2286173418736
    >>> id(b)
    2286173418736
    >>>
    '''
    # id不同的情况下,值有可能相同,即两块不同的内存空间里可以存相同的值
    # 若有空格,则使用新的内存空间
    # 若超过小整数池范围,则使用新的内存空间
    '''
    
    

    3、浮点型

    # 作用:记录身高、薪资、体重
    # 定义方式:
      salary = 3.1
      height = 1.75
    
    
    数字类型的其他使用:
    level = 1
    level=level + 1
    print(level)
    print(10 *3)
    
    print(10 + 3.3) # int与float之间可以相加
    age = 19
    print(age > 18)


    4、列表(存多个值,索引对应值,索引代表的是位置)

    #作用:按照顺序存放多个值,并且可以按照顺序取出指定位置的值
    # 定义:在[]内,用逗号分隔开多个任意类型的值
      l = ['AAA', 10, 11.2, ['bbb', 'ccc']]

    列表的取值方式:
    #索引从0开始
      print(l[0]) #相当于print(['AAA', 10, 11.2, ['bbb', 'ccc']][0])
    #反向取:
      print(l[-1])
    #嵌套取值
      print(l[3][1])
    列表类型应用案例:
    #记录班级人员的姓名
      school_name =["李三","张大牛","李亮"]
      print(school_name[1])
    
    

    5、字典类型(存多个值,key对应值,通常情况下key对值具有描述性功能,key通常是字符串类型)

    #定义:{},逗号分隔开多个key:value的元素
      dic = {'xxx':111, 'yyy':222}
      print(dic['xxx'])
      print(dic['yyy'])
    字典类型应用案例:
    info = {"name":'jil',
            'age':18,
            "sex":"male",
            "salary":1.75}
    print(info['name'])

     字典类型的错误使用及避免措施:

    #此处要注意,key应唯一,若重复,将保留后一个,前一个被覆盖。
    # 若字典取值,使用中括号方式,括号中的key不存在,则报错
      dic1 = {'name':"jil", "name":"fishball"}
      print(dic1)
      print(dic1["name"])
    
    # 若字典取值,使用中括号方式,括号中的key不存在,则报错。
    # 若不想报错,则使用dic.get(key)函数,若不存在会返回NONE
      #print(dic1["p"])     #结果:报错
      print(dic.get("sex"))   #结果:NONE
    #不过.get()函数只用于取值,并不能用于运算、赋值

    6、布尔类型

    # 6.1 作用
    # 用来记录真假这两种状态
    
    
    # 6.2 定义
    is_ok = True
    is_ok = False
    print(type(is_ok))
    
    x=1
    y=0
    
    #除了0,None,空 为False,其他状态均为True

    三、不可变与可变数据类型

    1、可变不可变类型

    可变类型:值改变,id不变,证明改的是原值,证明原值是可以被改变的
    (有整型int、浮点型float、字符串型string和元组tuple)

    不可变类型:值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的
    (有列表list和字典dict)
    python中,只要是赋值,就会产生新的内存空间与变量名绑定。

    2、代码验证

    # 2.1 int是不可变类型
    x=10
    print(id(x))            #140720528082880
    x=11                    # 产生新值
    print(id(x))            #140720528082912
    
    """
    >>> x = 777
    >>> print(id(x))
    2717233150800
    >>> x = 777
    >>> print(id(x))
    2717233150928
    >>> x = 777
    >>> print(id(x))
    2717233150864
    >>> x = 777
    >>> print(id(x))
    2717233150800
    >>> x = 777
    >>> print(id(x))
    2717233150928
    >>> x = 777
    >>> print(id(x))
    2717233150864
    
    每次赋值都会有一个新的内存地址绑定给变量x
    不过python自带的优化会将重复使用的值标记,沿用之前的路径,这是一种内存优化机制,涉及底层。
    """
    
    # 2.2 float是不可变类型
    x=3.1
    print(id(x))            #1411254741008
    x=3.2
    print(id(x))            #1411225256944
    
    # 2.3 str是不可变类型
    x="abc"
    print(id(x))            #1411254415024
    x='gggg'
    print(id(x))            #1411254640752
    
    # 小结:int、float、str都被设计成了不可分割的整体,不能够被改变
    # python中,只要是赋值,就会产生新的内存空间与变量名绑定。
    
    # 2.4 list是可变类型
    l=['aaa','bbb','ccc']
    print(id(l))            #1411225025408
    l=['aaa','bbb','ccc']   # python中,只要是赋值,就会产生新的内存空间与变量名绑定
    print(id(l))            #1411254651136
    
    l[0]='AAA'              # 修改间接引用的值,不会改变原列表类型的id
    print(l)                #['AAA', 'bbb', 'ccc']
    print(id(l))            #1411254651136
    l.append("ddd")         # 增加列表元素,也不会改变原列表类型的id
    print(l)                #['AAA', 'bbb', 'ccc', 'ddd']
    print(id(l))            #1411254651136
    
    
    # 2.5 dict是可变类型
    dic={'k1':111,'k2':222}
    print(id(dic))          #1411254589824
    dic={'k1':111,'k2':222} # python中,只要是赋值,就会产生新的内存空间与变量名绑定。
    print(id(dic))          #1411254590208
    dic['k1']=3333333333    # 修改间接引用的值,不会改变原容器类型的id
    # print(dic)
    print(id(dic))          #1411254590208
    dic["k3"] = 333         #增加字典元素也不会改变原字典类型的id
    print(dic)              #{'k1': 3333333333, 'k2': 222, 'k3': 333}
    print(id(dic))          #1411254590208
    
    
    #2.6 bool不可变
    
    '''
     关于字典补充:
     定义:{}内用逗号分隔开多key:value,
               其中value可以是任意类型
               但是key必须是不可变类型
    '''
    # dic={[1,2,3]:33333333}    错误!
  • 相关阅读:
    Mysql索引类型
    Linux 查看进程
    Element is not clickable at point error in chrome
    org.apache.commons.lang.StringUtils 中 Join 函数
    接口测试之webservice介绍
    Java 中正确使用 hashCode 和 equals 方法
    HTTP协议基础
    使用Groovy处理SoapUI中Json response
    SoapUI中读取法文字符
    SoapUI中XML解析
  • 原文地址:https://www.cnblogs.com/zhubincheng/p/12330207.html
Copyright © 2020-2023  润新知