Python数据类型简介

在本章中,您将了解可以在Python程序中使用的不同类型的数据。 您还将学习如何使用变量来保存程序中的数据。

运行myFistPythonProgram.py的时候发生了什么

运行文件myFistPythonProgram.py时,后缀名.py表示该文件是Python程序。 然后,您的编辑器通过Python解释器运行该文件,该解释器通读程序并确定程序中每个单词的含义。 例如,当解释器看到单词print后跟括号时,它会将括号内的任何内容打印到屏幕上。

变量

让我们尝试在myFistPythonProgram.py中使用一个变量。 修改其代码为如下所示:

message = "This is my first python program!"
print(message)

运行这个程序您应该会看到与之前看到的相同的输出:

This is my first python program!

我们添加了一个名为message的变量。 每个变量都对应着一个值,该值是与该变量相关联的信息。 在前面的例子中,该值为文本"This is my first python program!"

添加一个变量可以让Python解释器做更多的工作。 当它处理第一行时,它将变量message与文本"This is my first python program!"相关联。 当它到达第二行时,它将与message关联的值打印到屏幕上。

变量命名规范

在Python中使用变量时,需要遵守一些规则和准则。违反其中一些规则会导致错误;请务必牢记以下变量规则:

  • 变量名只能包含字母、数字和下划线。它们可以以字母或下划线开头,但不能以数字开头。例如,您可以变量名sutdent1但不能1student
  • 变量名中不允许有空格,但可以使用下划线分隔变量名中的单词。例如greeting_sutdent有效,但是greeting sutdent会导致错误。
  • 避免使用Python关键字和函数名作为变量名;也就是说,不要使用Python为特定程序目的保留的词,例如词print
  • 变量名称应简短但具有描述性。例如,name优于nstudent_name优于s_nname_length优于length_of_persons_name
  • 使用小写字母l和大写字母O时要小心,因为它们可能与数字10混淆。

使用del语句删除变量的定义

>>> message = "This is my first python program!"
>>> del message
>>> print(message)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'message' is not defined

数据类型

变量只不过是为了存储值的保留内存位置。这意味着当你创建一个变量时,系统会在内存中为变量保留一些空间。

根据变量的数据类型,解释器为变量分配内存并决定可以在保留的内存中存储什么。 因此,通过为变量分配不同的数据类型,您可以在这些变量中存储整数、小数或字符串。

Python变量不需要显式声明。当您为变量赋值时,声明会自动发生。等号(=)用于为变量赋值。等号左侧的操作数是变量的名称,等号右侧的操作数是存储在变量中的值。 例如

quantity = 248          # 整型变量
meter   = 13.4          # 浮点型变量
name    = "Lily"        # 字符串型变量

print(quantity)
print(meter)
print(name)

此处,分别为变量quantitymetername分配值24813.4“Lily”。 上面的代码将产生以下的输出:

248
13.4
Lily

Python的内置数据类型

存储在内存中的数据可以有多种类型。 例如,一个人的年龄存储为数值,而他或她的地址存储为字符串。 Python有各种标准数据类型,用于定义可能对它们进行的操作以及每种数据类型的存储方法。

Python有五种标准数据类型

  • Numbers
    • int
    • float
    • complex
  • String
  • List
  • Tuple
  • Dictionary

使用函数type()获得变量的类型

quantity = 248          # 整型变量
meter   = 13.4          # 浮点型变量
name    = "Lily"        # 字符串型变量

print(type(quantity))
print(type(meter))
print(type(name))

执行上面的程序,将输入以下结果:

<class 'int'>
<class 'float'>
<class 'str'>

实际上所有对象都可以比较相等性、测试真值并转换为字符串(使用repr()函数或稍微不同的str()函数)。 后一个函数print()函数输出对象时隐式使用。

测试真值

任何对象都可以测试真值,用于ifwhile条件或作为下面布尔运算的操作数时实际上都进行了测试真值。

默认情况下,一个对象都会被认为是真,除非它的类定义了一个返回 False__bool__()方法或一个返回0__len__()方法。

以下是被认为是假的内置对象:

  • 常量:NoneFalse
  • 数值类型的零:0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 空序列和集合:'', (), [], {}, set(), range(0)

布尔运算——and, or, not

真值测试的结果为假时总是返回0False,为真时返回1True。布尔运算也要进行真值测试但它总是返回其操作数之一。

操作 结果 备注
x or y 如果x为假,则结果为y,否则为x 这是一个短路运算符,因此它仅在第一个参数为假时才计算第二个参数。
x and y 如果x为假,则结果为x,否则为y 这是一个短路运算符,因此它仅在第一个参数为真时才计算第二个参数。
not x 如果x为假,则结果为True,否则为False not的优先级低于非布尔运算符,因此 not a == b 被解释为 not (a == b),而 a == not b是语法错误