第2章 Python基本计算
2.1 值、类型、对象
2.1.1 值和类型
程序的数据是以值的形式体现的,而值有相应的数据类型。例如,2是一个整数,3.14是一个浮点实数,hello, world是一个字符串。用Python的内置函数type()可以查询一个值的数据类型。例如:
>>>type(2) int >>>type('hello, world') str >>>type(3.14) float
可以看出,和其他编程语言一样,每个值都有确定的数据类型,以用于说明这种数据类型的值的内容是什么样的,占用多大的内存空间,取值范围是多少,能进行哪些运算(操作)。例如,int类型的值可以是任意大的整数,只要计算机内存足够大,而其他编程语言,如C语言规定的int类型的值总是占用固定大小的内存(如4字节)。再如,Python的float类型表示的浮点实数最多可以精确到15位小数。对于int或float类型的值可以用+、-、*、/、%、// 等运算符进行加、减、乘、除、求余数、整数除运算,但是整数除运算对于float类型的值则是转为整数类型进行的。例如:
print(5+2) #加 print(2-5) #减 print(5*2) #乘 print(5/2) #除,产生的是一个浮点数 print(5//2) #运算符//表示整数除 print(5 ** 3) #指数运算,计算5的3次方 print(3.14//2.5) #整数除 print(3.14%2) #求余数 print((50-5*6)/ 4)
输出:
7 -3 10 2.5 2 125 1.0 1.1400000000000001 5.0
对字符串对象可以用+(加法运算),但其含义是“拼接”的意思。例如:
print("hello, " + "world")
输出:
hello, world
但对字符串对象不能进行减法、除法等运算。也就是说,不同类型的数据能够进行的运算不同。
print("hello, " - "world") print("hello, " * "world") print("hello, " / "world")
产生TypeError(类型错误):
---------------------------------------------------------------------- TypeError : Traceback(most recent call last) <ipython-input-4-bb555d5919b3> in <module>() ----> 1 print("hello, " - "world") 2 print("hello, " * "world") 3 print("hello, " / "world") TypeError: unsupported operand type(s)for -: 'str' and 'str'
编译器提示:不能对两个字符串(str)类型的值进行-、/、*运算,但1个字符串可以和1个整数相乘,其结果是1个重复复制这个字符串的新字符串。例如:
print(3*"world") print("world"*3)
输出:
worldworldworld worldworldworld
注意
一个数据类型的值的表示形式并不完全和日常生活中的该类型的值的表示形式完全一致。例如日常生活中,整数1000经常也写成“1,000”,但在Python中不能用这种形式表示整数。执行下面语句:
>>>print(1,000)
输出的结果是:
1 0
这里的1,000在Python不是表示整数1000,而是用逗号隔开的两个int类型整数,因此输出的是两个值。
2.1.2 对象
1.对象
每个值都有具体内容和类型,要在计算机中表示这个值,就要给这个值分配一块单独的存储空间。因此,在Python中要用对象来刻画有独立内存空间和数据类型的值。也就是说,在Python中,程序中的数据都是以对象的形式存在的。
一个对象包含一个具体数据的三个特征,值、数据类型和 id。每个对象都有唯一的id(相当于一个人的身份证号码)作为该对象的内存地址。可以用Python的内置函数id()来查询一个对象的id。例如:
print(id(2)) print(id(3.14)) print(id('hello, world'))
输出:
1854893568 1775344243768 1775345251504
可以看出,这三个对象都有自己唯一的id(各自独立的存储空间)。
2.空值(None)
Python有一个特殊的值None,称为“空值”(None),用于表示一个没有值的对象。
除这些表示数据的值对象外,本书后续将介绍的函数、类等在Python中都是对象,即Python的一切都是对象。
总结
● 每个值都有对应的数据类型,如3是一个int(整型)类型的值,3.14是一个float(浮点型)类型的值,hello world是一个str类型(字符串类型)的值。
● 数据类型规定了这种类型的值的内容是什么、能进行什么样的操作(运算)、占用多大的内存空间,取值范围是多少。
● 值都是以对象的形式存在的,一个对象包含值、数据类型和id。id实际上就是对象的内存地址。可以用内置函数type()和id()查询一个对象的数据类型和id。
● None是一个没有值的空值对象。