Python学习笔记 (2)变量、常量和数据类型

变量

  顾名思义,变量就是一个会变的量,用一个变量名表示,指向内存中一片区域,而指向的区域存的是什么,这个变量就是什么数据类型,和C/C++挺不一样的。变量数据类型可以通过赋值变来变去(这就叫动态语言,区别于静态语言)。

  创建和赋值

    python中创建变量时只需给变量赋一个值,像这样 a = 1 ,然后变量名就指向存着那个值(1)的一片区域(表述不太对,应该是引用而不是指向)。用 id() 可以查看该变量的地址。

    还可以像这样赋值 a, b = 1, 2 (a=1,b=2),或是这样 a=b=1 。

    “可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。”

    举个例子,我们给a赋值为1, a=1,就相当于创建了变量a,于是解释器在内存地址XXX中创建一个Number对象1,然后把a和XXX中的对象1关联起来。调用 id(a) ,能得到内存地址XXX。

    然后我们给a加上1 a=a+1 或是给a赋值为2 a=2 ,就会再次创建一个在内存地址YYY中的Number对象2,然后a就被关联到了对象2上,至于对象1,也不知道是留着还是回收了,这里先留坑。

    再调用 id(a) ,就会得到内存地址YYY,然后 b=2id(b) ,得到的还是内存地址YYY(官方解释器倒是这样的,不过其他解释器就不一定了),这时a和b引用同一片内存区域了,于是 a is b会返回True(is用来判断两个变量是否引用同一片内存区域)。还有一种情况,a和b的值都为1,但引用的是不同的对象(所在内存区域不同),这时 a is b 会返回False,而 a == b 会返回True(==用来判断两个变量所引用对象的值是否相等)

    还有一件重要的事,变量名,规则和C/C++差不多——数字,字母,下划线, 任意组合,数字不能开头,对大小写敏感,python的关键字不能用,变量名尽量有意义(Python中变量的命名规范)。

    查看自己版本python中的关键字可以使用命令help("keywords")

  删除

    del可以删除变量,但不同于C/C++中的free和delete()(别刮开我会说我不会用C/C++在堆区创建变量吗),python中的del不会删除内存中的数据,而是把变量删了(更高端一点的说法是把变量对对象的引用删了)。

    使用方法 del a 或 del a,b,c 

    举个例子,建立变量a a=1,内存地址XXX就创建了对象1,于是a指向了XXX,建立变量b b=1 ,于是b也指向了XXX,然后 del(a) ,调用 id(b) 可以看到,这时b仍然指向XXX,但调用 id(a) 会报错,说变量a未定义。

    此外,Python还有垃圾回收机制,留坑。

  全局变量和局部变量

    留坑到学函数时

常量

  习惯用全部大写的变量名表示常量,其实电脑觉得它还是个变量,Python里没有C语言里类似const的东西,换句话说,把变量当成常量用就好。此外,Python还有6个内置常量。

  Python的内置常量

    True、False、None、NotImplemented、Ellipsis、__debug__(注意有些首字母大写)

    一些关于内置常量的更具体的信息

数据类型

  标准数据类型

    Number(数字)

    String(字符串)

    List(列表)

    Tuple(元组)

    Set(集合)

    Dictionary(字典)

    一些补充说明

      以上6种数据类型分类

按照存储数据个数区分 标量/原子类型(值能存放一个值) 数字,字符串
容器类型(存放多个值) 列表,元组,字典

按照可变不可变区分

//可变类型指的是在同一块内存地址之上可以将值替换掉(使用id()函数查看变量的内存地址)

可变 列表,字典,集合
不可变 数字,字符串,元组
按照访问顺序区分 直接访问(不可拆分) 数字
顺序访问(有下标的) 字符串,元组,列表
key值访问(映射类型) 字典

      内置的type()函数可以用来查询变量所指的对象类型。此外还可以用 isinstance()来判断。使用方法

      Python数据类型转换

        这里借用C/C++的概念,可能不兴这么说,但好理解。

        隐式类型转换

          整数和浮点数做运算时,解释器将整数转换为浮点数;

          布尔型和整型做运算时,将布尔型转换为整型;布尔型和浮点型做运算时,将布尔型转换为浮点型;

          整型和布尔型与复数做运算时,被转换为浮点型;

          两个整型做“/”运算时,无论是否除得尽,结果都为浮点型。

        显式类型转换

          (来自这里)

          有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

          以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

          

函数 描述

int(x [,base])

将x转换为一个整数

float(x)

将x转换到一个浮点数

complex(real [,imag])

创建一个复数

str(x)

将对象 x 转换为字符串

repr(x)

将对象 x 转换为表达式字符串

eval(str)

用来计算在字符串中的有效Python表达式,并返回一个对象

Ps:eval()的一个应用——python 如何定义n个变量 (变量声明自动化)

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个序列 (key,value)元组。

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为一个字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串

round(x[,y])

将一个浮点数x四舍五入为一个整数,若有第二个参数,则四舍五入为y位浮点数

 

  自定义数据类型

    留坑

上一篇:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(42)-工作流设计01


下一篇:洛谷 P1002 过河卒