Python 变量和数据类型

时间:2021-06-15 03:29:21

变量的定义与赋值

Python 是动态语言,我们不需要为变量指定数据类型,只需要输入变量名和值就行了。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

此外 Python 允许你同时为多个变量赋值。例如:

a = b = c = 1

以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。

你甚至可以在一行内将多个值赋值给多个变量,这个技巧用来交换两个数的值非常方便。

>>> a, b = b , a
>>> a
54
>>> b
45

这涉及到元组的知识,在赋值语句的右边我们创建了一个元组,我们称这为元组封装(tuple packing),赋值语句的左边我们则做的是元组拆封 (tuple unpacking)。

标准数据类型

Python3 中有六个标准的数据类型:

  1. Number(数字)

    • Python3 支持 int、float、bool、complex(复数)。在Python3 里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
    • isinstance() 和 type() 函数可以用来判断变量所指的对象类型,不同的是:type()不会认为子类是一种父类类型,而isinstance()则会认为子类是一种父类类型。
    # a为int类型则返回true
    isinstance(a, int)
    # 打印a的数据类型
    print (type(a))
  2. 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'会导致错误。
  3. List(列表)

    • 列表是写在方括号 [] 之间、用逗号分隔开的元素列表,支持+连接。
    • 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
    • 和字符串一样,列表同样可以被索引切片,列表被截取后返回一个包含所需元素的列表(浅拷贝)。
    • 与Python字符串不一样的是,列表中的元素是可以改变的,允许对索引和切片赋值。
    • 对切片赋值会改变原列表的值或尺寸,但严格上来说这不是切片操作,只是形式一样而已。
  4. Tuple(元组)

    • 元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
    • 虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
    • 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
      tup1 = ()    # 空元组
      tup2 = (20,) # 一个元素,需要在元素后添加逗号
    • string、list和tuple都属于sequence(序列)
  5. Sets(集合)

    • 集合(set)是一个无序不重复元素的序列。
    • 基本功能是进行成员关系测试和删除重复元素。
    • 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
  6. 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 是数字表达式

参考资料