第2章 常量与变量
1.1 常量
常量是内存中用于保存固定值的单元,在程序中常量的值不能发生改变。
Python并没有命名常量,也就是说不能像C语言那样给常量起一个名字。
Python常量包括数字、字符串、布尔值和空值等。
数字
int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
32位计算机上,取值范围是-231到231-1;
64位计算机上,取值范围是-263到263-1。
长整数:取值范围很大的整数。长整数的取值范围仅与计算机支持的虚拟内存大小有关,超出整数范围的数就是长整数。
bool (布尔), 如 True。
float (浮点数), 如 1.23、3E-2。
包含小数点的浮点型数字。浮点数是用机器上浮点数的本机双精度(64 bit)表示的。提供大约17位的精度和范围从-308到308的指数。和C语言里面的double类型相同。Python不支持32bit的单精度浮点度数。如果程序需要精确控制区间和数字精度,可以考虑使用问numpy扩展库。
complex (复数), 如 1 + 2j、 1.1 + 2.2j。一个复数可以表示为一对数字(a,b)。
补充:
>>2.2 * 3 6.6000000000000005
小数以二进制形式表示时的有穷性导致的。这是实数的无限精度跟计算机的有限内存之间的矛盾。python中不建议直接将两个浮点数进行大小比较,或者做精确的计算。控制精度的方法可以使用round和decimal模块。
字符串
字符串常量使用单引号(’)或双引号(")括起来。
-
转义符号
当需要在字符串中使用特殊字符时,Python使用反斜杠(\)作为转义字符。
转义字符 具体描述 \n 换行 \r 回车 \’ ‘ \" " \ \ \ (在行尾时) 续行符 \a 响铃 \b 退格(Backspace) \000 空 \v 纵向制表符 \t 横向制表符 -
使用三引号(’’’ 或者 “”")
可以使用三引号指定多行字符串。例如:
‘’'多行字符串的例子。
第一行
第二行
可以在多行字符串里面使用’单引号’或"双引号"
‘’’
也可以在行尾使用转义字符(\)实现多行字符串。例如:
'多行字符串的例子。
第一行。
第二行。 ’代码续行:在遇到较长的语句时,可使用语句续行符号,将一条语句写在多行之中。Python有两种续行方式。
一种是使用“\”符号。(放在结尾)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RAo5yTgu-1619244666637)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20210424113458665.png)]
另一种特殊情况下的续行方式是在使用括号(包括圆括号()、方括号[]和大括号{}等)时,括号中的内容可分多行书写,括号中的空白和换行符都会被忽略。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wl5J3K3r-1619244666651)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20210424113432713.png)]
-
Unicode字符串
ASCII码不能表示世界上所有的语言,主要用于显示现代英语和其他西欧语言。
Unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码,如果要在程序中处理中文字符串,则需要使用Unicode字符串。**只要在字符串前面加上u或U前缀即可。**例如:u"我是Unicode字符串。"
-
布尔值
Python包含两个布尔值,包含True(逻辑真)和False(逻辑假)。
布尔值区分大小写,通常用来判断条件是否成立。
空值
空值常量None。与0和空字符串(“”)不同,None表示什么都没有。None与任何其他的数据类型比较永远都返回False。
1.2 变量
变量是内存中命名的存储位置,与常量不同的是变量的值可以动态变化。
标识符是指Python语言中允许作为变量名或其他对象名称的有效符号。
标识符命名规则:
标识符名字的第1个字符必须是字母或下划线。
标识符名字的第1个字符后面可以由字母、下划线或数字(0~9)组成。
对大小写敏感。
**数据类型:**Python是一种动态类型语言,这种类型语言确定变量的数据类型是在给变量赋值的时候。因此在Python中使用变量时不用像C语言先声明数据类型,可直接使用。
a = “这是一个常量”
b = 2
c = True
**变量与地址的关系:**Python变量改变值时,改变的并不是这块空间中保存的值,而是改变了变量指向的空间,使变量指向另一空间。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bHqcNEM6-1619244666654)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20210424114923109.png)]
str1 = "这是一个变量"
print("变量str1的值是:" + str1) #“+”为连接字符串
print("变量str1的地址是:%d" %(id(str1))) #“%”标记转换说明符的开始
str2 = str1
print("变量str2的值是:" + str2)
print("变量str2的地址是:%d" %(id(str2)))
str1 = "这是另一个变量"
print("变量str1的值是:" + str1)
print("变量str1的地址是:%d" %(id(str1)))
print("变量str2的值是:" + str2)
print("变量str2的地址是:%d" %(id(str2)))
#'''
变量str1的值是:这是一个变量
变量str1的地址是:2271523670704
变量str2的值是:这是一个变量
变量str2的地址是:2271523670704
变量str1的值是:这是另一个变量
变量str1的地址是:2271490074928
变量str2的值是:这是一个变量
变量str2的地址是:2271523670704
'''
1.3 常量与变量的数据类型转换
Python在定义变量时,不需要指定其数据类型,而是根据每次给变量所赋的值决定其数据类型。但也可以使用函数对常量和变量进行类型转换,以便对它们进行相应的操作。
-
转换为数字
将字符串常量或变量转换为数字。
(1)int(x, y) 。将数字或字符串转换为整数。
参数x是待转换的数字或字符串;参数y为可选参数,为参数x的进制,默认为10进制。
例题:
int(3.14) #3
int(100,2) #出错,y被赋值后函数只接收字符串
int(‘23’,16) #35
int(‘Pythontab’,8) #出错,Pythontab不是8进制数
int(‘36’,2)#出错,36不是2进制数
(2)long(x, y) 。将字符串转换为长整数。
参数的含义与int()函数相同。用法不知道啊!
(3)float()。将字符串或数字转换为浮点数。
参数x是待转换的字符串或数字。
float(20) #20.0
(4)eval(str) 。计算字符串中的有效Python表达式,并返回结果。
参数str是待计算的Python表达式字符串。
eval('2+3') #5
-
转换为字符串
(1)str(x) 。将数值转换为字符串。
参数x是待转换的数值。
(2)repr(obj) 。将对象转换为字符串显示。
参数obj是待转换的对象。
repr(5) #‘5’ repr('hello') #"'hello'"
(3)chr(整数) 。将一个整数转换为对应ASCII的字符。
chr(8) #'\x08'
(4)ord(字符) 。将一个字符转换为对应的ASCII。
ord('c') #99
(5)hex(整数) 。将一个整数转换为一个十六进制字符串。
hex(32) #'0x20'
(6)oct(整数) 。将一个整数转换为一个八进制字符串。
oct(16) #'0o20'
十六进制字符串以0x开头,八进制字符串以0o开头。
-
补充
(1)Python保留字
>>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
(2)行与缩进
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGxJoZ5Q-1619244666656)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20210424134344956.png)]
1.4 作业
- 用本节课的知识,编写程序,实现浮点数的精确计算。如已知x=3.5, y=2.7, 求 z = x y 的值。
from decimal import Decimal
x=Decimal('3.5')
y=Decimal('2.7')
print(x+y)
#6.2
#或者使用round模块,限制小数点后的位数。
- 课后思考:如何比较两个浮点数是否相等。
from decimal import Decimal
x=Decimal('3.5')
y=Decimal('2.7')
print(x==y)
#false