第一篇 变量及数据类型

第一篇 变量及数据类型

# 1、变量

1 什么是变量

  • 变量是描述世间万物变化的状态
  • 内存就是变量,变量是用来临时存储数据的
  • 形象的理解:变量至关于有名字的容器,该容器用于装载不一样类型的数据
  • 在程序执行过程当中,值能够改变的量称为变量。变量能够经过变量名访问
  • 计算机如何去模拟现实,首先它须要记录现实世界中各类事物的特征,而记录这些特征所须要的容器便是变量

2 为何须要变量

  • 程序所用到的数据都会保存在内存中,程序员须要一种机制来访问或修改内存中的数据,而这种机制就是变量(领会便可)
  • 每个变量都表明了一小块内存,而变量是有名字的,程序对变量赋值,其实就是把数据装入该变量所表明的内存区的过程
  • 一样道理,程序读取变量的值,实际上就是从该变量所表明的内存区取值的过程

3 如何定义变量

  • name = 'king' #python中单引号和双引号均可以定义字符串
      age = 20 #int 整数类型
      gender = "female"
      weight = 62.5 #float 浮点型
      msg = '''
      竹杖芒鞋轻胜马
      一蓑烟雨任生平
      ''' #多行字符串必须用三对单引号
  • 变量的组成:变量名、赋值符号、变量值python

  • 变量名:用来引用变量值,但凡须要用变量值,都要经过变量名程序员

  • 赋值符号:赋值数组

  • 变量值:存放数据,用来记录现实世界中的某种状态dom

  • 命名规范:用英文,必须是字母或数字或下划线(它们的任意组合皆可),关键字不能声明为变量名,关键字好比: 'and','as','assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'等等性能

  • 单行注释用井号,多行注释用三对双引号(经过下图,其实多行注释和定义多行字符串有不小渊源,编译器为pycharm)优化

# 2、 内存管理及小整数池

1 引用计数

  • 变量值被引用的次数
  • 当对象被建立并(将其引用)赋值给变量时,该对象的引用计数被设置为1。例如 x = 2,则 2 这个值的引用计数为1
  • 当再编写一个变量名并指向该对象(以上述变量x为例子)的值(2)或者该对象的变量名 x 时,引用计数加 1。即 y = 2 或 y = x,则 2 这个值的引用计数为2
  • 当指向该对象的变量名赋上另外一个值时,原对象的引用计数减 1 ,可是新的值的引用计数加 1。即 x = 5y任然等于2,此时2这个值的引用计数为1,5这个值的引用计数也为1
  • del y,则此时2这个值引用计数为0,触发 python的垃圾回收机制,python 清理2所占用的内存空间

垃圾回收机制:当变量值的引用计数为0时,python会收回该变量值的内存占用code

2 del语句

  • 格式:
del 删除对象
  • 在Python语言中, del语句操做某个对象的时候, 并非直接将该对象在内存中删除, 而是将该对象的引用计数-1

3 小整数池

  • 对于引用计数,须要注意的是:Python实现int的时候有个小整数池。为了不因建立相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时建立出小整数池,范围是==(-5,256)==,该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被回收。
  • 在pycharm中运行python程序时,pycharm出于对性能的考虑,会扩大小整数池的范围,其余的字符串等不可变类型也都包含在内以便采用相同的方式处理了,咱们只须要记住这是一种优化机制,至于范围到底多大,无需细究。

4 关于可变数据类型和不可变数据类型

  • 可变数据类型,是指对象中的一块内容(value)是能够被改变的,但它的地址不会再发生改变:对对象操做的时候,不须要再在其余地方申请内存,只须要在此对象后面连续申请“要求”便可,也就是它的地址会保持不变,但总的区域会变长或者变短(也就是说它里面的元素的地址会发生改变)
    • 对可变类型操做,至关于直接去修改变量的值。就算两个变量的值相同,所在的内存地址也不一样。若是想要把让两个可变类型的内存地址相同可使用赋值的语句。可是两个内存地址相同的可变类型,改变了其中一个的值,另外一个也会跟着被改变
      总结:对于可变数据类型变量自己,==一、==若是它的值从新赋值,就算它的值和以前同样,它的地址也会改变;若是只是它里面的元素改变了值,那么它自己的地址则不会发生任何变化;==二、==若是有一个和它同类型的新变量由它赋值而来(如:list_b = list_a),则它们的地址相同,并且他们之间若是其中一个改变它里面元素的值,另外一个也会发生一样的改变;==三、==若是俩个变量是各自经过赋相同的值而来(如:a = [1] b =[1]),则它们的地址不一样
  • 不可变数据类型是值变地址也会变:在对对象自己操做的时候,必须在内存中从新申请一块区域,而后将这块新的内存区域贴上原对象的变量名,原对象的引用计数减一
    • 对不可变类型操做,至关于重新定义了一个新的变量。只是名字相同罢了,可是内存地址不一样。因为pycharm的不断优化,对于整型、字符串、元组这些不可变数据类型,它的值相同,则地址也相同(最大范围须要查资料,略)
    • 不可变类型有什么好处?若是数据是不可变类型,当咱们把数据传给一个不了解的API时,能够确保咱们的数据不会被修改
      总结:对于不可变数据类型,只要它们的值相同,则地址必定相同

# 3、关于定义变量的三个特征

1 变量有哪三个特征

  • 值、地址id()、数据类型type()

2 变量值的比较

  • 判断变量值是否相等
  • ==注意==:当咱们在 python 中用print(a is b)时,表示是比较ab的地址对象

3 变量id是否相等

  • 判断变量地址是否相等blog

# 4、数据类型

1 简介数据类型

  • 为了合理利用内存空间而将变量所能存储的数据的大小等特征固定下来的一种声明
  • 变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将表明这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。全部变量都具备数据类型,以决定可以存储哪一种数据

2 数字类型

  • 整数类型:int 。在python中整型直接能够写出 a = 666
  • 浮点数类型:float。在python中整型直接能够写出 b = 6.66
  • 后面再详细介绍

3 字符串类型

  • 字符串只能 相加、相乘和逻辑比较
  • ==字符串只能和数字相乘==
  • 字符串的==拼接,即从新申请一个小空间把两个字符串都拷贝一份后再拼接==。而不是把一个小空间内的变量值复制到另外一个变量的小空间内拼接

4 列表类型

  • 当咱们须要存储多个不相关的字符时,若是用字符串类型则很差取出,因此咱们利用列表就很容易
  • 列表有点相似与C中的数组,可是C中的数组若是取出来须要用到循环
  • 格式:例如 title_list = ['Journey to the West', 'The Romance of the Three Kingdoms','The Story of the Stone','Water Margins']
  • 能够直接取出:print(title_list)
  • 也能够单独一个一个的取出:print(title_list[0])
  • 和数组类似,列表也能够有多维的:例如taste_list = ['read','swim',['delicacy',20,'sweet-smelling'],'walk'],假如当咱们须要取出里面的20(美食价格20元)时,咱们只须要print(taste_list[2][1])

5 字典类型

  • 能经过列表取值的时候,是基于咱们已经知道了列表内部全部的元素。当咱们不知道数据的大小或者数据很是庞大时,咱们该如何存取索引

  • 所以咱们是否是能够给列表内的每个元素都添加一个描述信息呢?不然若是不是存个人信息,而是用列表存取了成千上万个值,那么咱们怎么经过索引精准取值呢?这样看起来好像是不可能的,所以可使用新的数据类型——字典

    1.做用:用来存取多个值,按照==key:value==的方式存值,取的时候能够经过key而非索引去取值,key对value具备描述性的做用。存放数据的种类各类各样而且数据较多的时候可使用字典

    2.定义:在{}内用逗号分隔开多个元素,每个元素都是key: value的格式,其中==value是任意格式的数据类型==,key因为具备描述性的做用,因此==key一般是字符串类型==

  • 字典举例:user_info = {'name':'king','gender':'male','age':26,'height':175} print(user_info['name']) 结果是 king

  • 字典嵌套字典举例:user_info = {'name':'king','age':26,'school_info':{'s_name':'oldboy','s_address':'shanghai','s_area':1000},'gender':'male'} print(user_info['school_info']['s_address']) 结果是shanghai

  • 字典嵌套列表举例:user_info = {'name':'king','age':26,'school_info':['oldboy','shanghai'],'gender':'male'} print(user_info['school_info'][1]) 结果是shanghai

  • 列表嵌套字典举例:students = [{'name':'king','weight':62.5},{'name':'queen','age':24}] print(students[1]['age']) 结果是24

6 布尔类型

  • 用于判断条件结果,一般状况不会直接引用,须要使用逻辑运算获得结果
  • Python中全部数据类型的值==自带布尔值==,数据类型中只须要记住==只有0、None、空、False的布尔值为False==,其他的为True
  • print(type(True)) 结果是<class 'bool'>
  • print(True) 结果是True
  • print(bool(0)) 结果是False
  • print(bool('king')) 结果是True
相关文章
相关标签/搜索