Python 变量和数据类型
变量的定义与赋值
Python 是动态语言,我们不需要为变量指定数据类型,只需要输入变量名和值就行了。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
此外 Python 允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
你甚至可以在一行内将多个值赋值给多个变量,这个技巧用来交换两个数的值非常方便。
>>> a, b = b , a
>>> a
54
>>> b
45
这涉及到元组的知识,在赋值语句的右边我们创建了一个元组,我们称这为元组封装(tuple packing),赋值语句的左边我们则做的是元组拆封 (tuple unpacking)。
标准数据类型
Python3 中有六个标准的数据类型:
-
Number(数字)
- Python3 支持 int、float、bool、complex(复数)。在Python3 里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
- isinstance() 和 type() 函数可以用来判断变量所指的对象类型,不同的是:type()不会认为子类是一种父类类型,而isinstance()则会认为子类是一种父类类型。
# a为int类型则返回true isinstance(a, int) # 打印a的数据类型 print (type(a))
-
String(字符串)
- Python 中字符串用单引号或双引号括起来,使用反斜杠
\
转义特殊字符。使用三引号('''
或"""
)可以指定一个多行字符串,反斜杠\
也可以作为续行符(转义换行符,也适用于表达式和语句)。 - 在交互式解释器中,输出的字符串会用引号引起来,特殊字符会用反斜杠转义。如果字符串中只有单引号而没有双引号,就用双引号引用,否则用单引号引用。print() 函数生成可读性更好的输出, 它会省去引号并且打印出转义后的特殊字符。
- 如果你前面带有
\
的字符被当作特殊字符,你可以使用原始字符串,方法是在第一个引号前面加上一个r
。>>> print(r'C:\some\name') # note the r before the quote C:\some\name
但是原始字符串不能以反斜杠
\
结尾,最后的引号会被转义(bug?),让解释器不清楚是否应该结束该字符串。一个简单的解决办法是把反斜杠单独出来,写成r"str" "\\"
。- 支持索引,索引获得单个字符。字符串的第一个字符索引为 0 ,不过索引也可以是负数,这将导致从右边开始计算,-1 表示最后一个字符,-2 表示倒数第二个这样。
- 支持切片,切片获得一个子字符串。切片包含起始的字符,不包含末尾的字符。这使得
s[:i] + s[i:]
永远等于s
。切片的索引有非常有用的默认值,省略的第一个索引默认为零,省略的第二个索引默认为切片的字符串的大小。Python 能够优雅地处理那些没有意义的切片索引:一个过大的索引值(即下标值大于字符串实际长度)将被字符串实际长度所代替,当上边界比下边界大时(即切片左值大于右值)就返回空字符串。 - 内置函数
len(String str)
将会返回字符串的长度。 - 字符串可以由
+
操作符连接(粘到一起),可以由*
表示重复。 - 注意,Python 没有单独的字符类型,一个字符就是长度为1的字符串。
- 与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。
- Python 中字符串用单引号或双引号括起来,使用反斜杠
-
List(列表)
- 列表是写在方括号
[]
之间、用逗号分隔开的元素列表,支持+
连接。 - 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
- 和字符串一样,列表同样可以被索引和切片,列表被截取后返回一个包含所需元素的新列表(浅拷贝)。
- 与Python字符串不一样的是,列表中的元素是可以改变的,允许对索引和切片赋值。
- 对切片赋值会改变原列表的值或尺寸,但严格上来说这不是切片操作,只是形式一样而已。
- 列表是写在方括号
-
Tuple(元组)
- 元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号
()
里,元素之间用逗号隔开。 - 虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
- 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = () # 空元组 tup2 = (20,) # 一个元素,需要在元素后添加逗号
- string、list和tuple都属于sequence(序列)。
- 元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号
-
Sets(集合)
- 集合(set)是一个无序不重复元素的序列。
- 基本功能是进行成员关系测试和删除重复元素。
- 可以使用大括号
{ }
或者set()
函数创建集合,注意:创建一个空集合必须用set()
而不是{ }
,因为{ }
是用来创建一个空字典。
-
Dictionary(字典)
- 列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
- 字典是一种映射类型,字典用
{ }
标识,它是一个无序的键(key) : 值(value)对集合。 - 键(key)必须使用不可变类型,而且在同一个字典中,键(key)必须是唯一的。
类型转换
Python 是强类型语言,所以必要的时候需要手动进行类型转换。
类型转换函数 | 转换路径 |
---|---|
float(string) | 字符串 -> 浮点值 |
int(string) | 字符串 -> 整数值 |
str(integer) | 整数值 -> 字符串 |
str(float) | 浮点值 -> 字符串 |
complex(x) | 将x转换到一个复数,实数部分为 x,虚数部分为 0 |
complex(x, y) | 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式 |
参考资料
- Python tutorial3
- 菜鸟教程:Python3 教程
- Python 基础教程 (第二版)
- 实验楼:Python3 简明教程