在本篇博客中我们将较为详细地介绍Python中有关数据类型与运算符的问题,实际上经过C语言的学习,这些基础知识往往都是约定俗成,只需要注意Python中特有的几点便可。
目录
保留字与标识符
1、保留字的定义,基本可以等效于C语言中的关键字,他们是在Python语言中默认具有特殊意义的单词,不能直接作为我们定义的变量等的名称。
Python中的保留字有:'False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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'
共计35个,我们无需特别记忆,只要养成一些命名时的习惯即可。
值得注意的是,False 和 True 是保留字,而首字母小写的false 和 true则不是的,进一步讲,保留字对于大小写是严格区分的。
以下提供一段查询保留字的程序(原理尚待学习):
import keyword
print(keyword.kwlist)
print(len(keyword.kwlist))
2、对于标识符,实际上可以理解为“名字”,列如我们定义变量时的变量名。
Python中的标识符命名需要遵守如下规则:
①标识符可以是字符(包括英文、中文)、下划线“_”、数字,但第一个字符不能是数字。
②不能使用保留字作标识符。
③标识符严格区分大小写(这里的意思是有大小写差别的标识符不是等同的,不指代同一变量)。
④一般情况下避免使用以下划线开头的标识符。
⑤标识符可以是中文,但不建议(这并不规范,也可能不与其他工具、语言等兼容)
变量与常量
1、变量是我们定义的可变量,常量则是不可变的,变量的概念与C语言中的并无区别。定义变量的格式:name = value
特别与C语言不同地,在Python中定义一个变量,就是以上面的格式而无需规定类型,可以直接写 a=1,b='abc'。Python能动态修改变量的数据类型,通过赋不同类型的值就可以直接修改。
Python允许多个变量指向相同的值,而这些变量的“地址”实际也是相同的(地址即数据在内存中国储存的位置),我们可以通过 id() 函数查看对象的地址。
a=100
b=100
print(id(a)) # 140727111734808
print(id(b)) # 140727111734808
变量的命名需要遵守如下规则:
①变量名须是有效的标识符。
②谨慎使用小写的i和大写的O,容易混淆。
③最好采用有意义的单词作变量名,有助于代码的可读性。
2、常量,定义之后不能再修改。我们规定常量全部使用大写字母和下划线命名,列如 MY_AGE=18,即定义了一个常量,我们不能重新赋值MY_AGE=19(程序会报出警告,但并不会报错,实际还是可以修改的)
数值类型
若具有C语言的基础,这方面的定义十分好理解。
1、整数类型。包括正整数、负整数和0,表示方法有十进制、二进制(引导符为0b或0B)、八进制(引导符为0o或0O)和十六进制(引导符为0x或0X)
2、浮点数类型。带有小数点的数值。两个浮点数运算的时候,可能在结果后面产生一些不确定的尾数(这是由于Python使用IEEE 754标准来表示浮点数。有关浮点数在内存中的存储问题,可见我的博客C语言:数据在内存中的存储简介-CSDN博客)
值得一提的是,Python中对于复数的表示与数学中的复数形式一致,实部用.real ,虚部用.imag。虚数单位用j来表示,定义复数 x=123+456j ,此时x.real为123 x.imag为456。
补充:可以使用type()函数来获取变量的数据类型。
round()函数可以规定浮点数运算的小数位数,如round(0.1+0.2,1)就是保留一位小数。
字符串类型
字符串类型是连续的字符序列,可以包含能识别的所有字符。
有关符号
界定符:单引号' ' 、双引号'' ''、三引号''' ''' 用这几种符号括起来的内容都将成为字符串。
转义字符:此处概念与C语言的相同,只做简单说明。
\n:换行符。不过print函数默认是会换一行的。
\t:水平制表符,横向跳到下一个制表位。一个\t制表符是8个字符,如 hello\t 会在后面补3个空格。
\":双引号,防止与界定符相冲突
\':单引号,同上
\\:一个反斜杠
原字符:使转义字符失效的字符,r或R。使用原字符,即在字符串引号前面加上r或R,此时字符串中的转义字符会被视作字符而输出。
索引和切片
字符串又被称为有序的字符序列,对其中某个字符的检索称为索引。
类似于在C语言中数组通过下标来索引元素,字符串中的每个字符也有对应的下标,有两种排序,分别是正向递增序号:0、1、2、... 和反向递减序号:...、-2、-1。所以对于一个含有n个字符的字符串,第一个元素序号为0,最后一个为n-1,或者最后一个序号为-1,第一个为-n。通过序号来索引的符号与C语言相同,用 [ ] 。
如果是对某个子串或者说区间的检索,称为切片。对应的语法结构是: 字符串/字符串变量[N:M]
由此索引出下标为N到M的序列,且不包括M。
N的位置可以不填,默认从0开始,M的位置若不填,默认切到结尾。
字符串操作
连接操作:x+y 将字符串x和y直接连接起来;
复制:x*n或n*x 将字符串x复制n次;
判断:x in s 若x为s的子串,结果为True,否则结果为False。
在之后的学习中还会提到有关字符串的其他概念与操作。
布尔类型
布尔类型是用来表示“真”值和“假”值的数据类型,布尔类型的值有True和False两个,而True表示整数1,False表示整数0(形象一点说,转变为int类型后值为1或0)。
我们可以使用bool()函数测试对象的bool值。常见的bool值为False的对象有:数值0、浮点数0.0等、虚数0和空的序列。
数据类型之间的转换
如标题,转化数据的类型,又分为隐式转换和显示转换。
隐式转换如定义x=True ,这时计算x+10,那么x将自动转换为整数类型,结果为11。
显示转换则涉及函数:
int(x) float(x) str(x) chr(x) 分别是将x转换为整数、浮点数、字符串、字符
ord(x) 将一个字符x转换成对应的整数值
hex(x) 将一个整数x转换为一个十六进制字符串
oct(x) 将一个整数x转换为一个八进制字符串
bin(x) 将一个整数x转换为一个二进制字符串
eval函数
eval函数时Python中的一个内置函数,作用为去掉字符串最外侧的引号,并按Python语句方式执行去掉引号后的字符串。它常与input()函数一起使用。
语法结构:变量 = eval(字符串)
更简单地理解,这个函数就是将一个字符串转化为语句。以下为实例:
num='1+2'
print(num, type(num)) # 1+2 <class'str'>
x=eval(num)
print(x, type(x)) # 3 <class'float'>
age=eval(input('请输入:')) # 相当于int(age)
print(age, type(age))
运算符
算术运算符
+、-、*、/ 加减乘除,与C语言的除法不同,Python的除法会自动保留小数,比如10/2结果是5.0。
// 整除,相当于C语言的除法,10/3结果为3。
% 取余数。
** 幂运算,列如2**3结果为8。
优先级:幂运算>乘除取模>加减
赋值运算符
=、+=、-=、*=、/=、%=、**=、//= 其概念与C语言中的相同
Python支持链式赋值、系列解包赋值。可以通过“,”分隔同时多个赋值,如 a,b=1,2
乃至可以通过 a,b=b,a 直接实现交换两个变量的值。
比较运算符
> < == != >= <=
逻辑运算符
and 逻辑与 从左到右 全为True结果为True
or 逻辑或 从左到右 有True为True(这两个都是连接两个语句,判断bool类型)
not 逻辑非 从右到左 True为False,False为True
位运算符
这些运算符与C语言中的完全相同,都是通过二进制序列来处理
按位与 & 都是1结果为1
按位或 | 有1结果为1
按位异或 ^ 相同为0,相异为1
按位取反 ~ 0变为1,1变为0
左移位 << 二进制左移,左边(高位端)丢弃,右边补0
右移位 >> 二进制右移,低位丢弃,左边如果最高位为0(正数),补0;是1(负数),补1