变量
顾名思义,变量就是一个会变的量,用一个变量名表示,指向内存中一片区域,而指向的区域存的是什么,这个变量就是什么数据类型,和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=2 , id(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++的概念,可能不兴这么说,但好理解。
隐式类型转换
整数和浮点数做运算时,解释器将整数转换为浮点数;
布尔型和整型做运算时,将布尔型转换为整型;布尔型和浮点型做运算时,将布尔型转换为浮点型;
整型和布尔型与复数做运算时,被转换为浮点型;
两个整型做“/”运算时,无论是否除得尽,结果都为浮点型。
显式类型转换
(来自这里)
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数 | 描述 |
---|---|
将x转换为一个整数 |
|
将x转换到一个浮点数 |
|
创建一个复数 |
|
将对象 x 转换为字符串 |
|
将对象 x 转换为表达式字符串 |
|
用来计算在字符串中的有效Python表达式,并返回一个对象 Ps:eval()的一个应用——python 如何定义n个变量 (变量声明自动化) |
|
将序列 s 转换为一个元组 |
|
将序列 s 转换为一个列表 |
|
转换为可变集合 |
|
创建一个字典。d 必须是一个序列 (key,value)元组。 |
|
转换为不可变集合 |
|
将一个整数转换为一个字符 |
|
将一个字符转换为它的整数值 |
|
将一个整数转换为一个十六进制字符串 |
|
将一个整数转换为一个八进制字符串 |
|
将一个浮点数x四舍五入为一个整数,若有第二个参数,则四舍五入为y位浮点数 |
自定义数据类型
留坑