Python中的变量与内置数据类型
本文只是我在慕课网学习《Python入门》这门课程时,摘录、整理的一些对自己比较重要的语法与提示。九成以上的内容以及所有代码示例,均摘抄自慕课网。由于我本人有一定C/C++语言基础,而本文主要供我自己复习使用,所以我偏向于摘录一些Python和C/C++之间的差异之处,可能造成本文语义上不一定连贯,建议有学习需求的读者直接前往慕课网学习该课程(链接:http://www.imooc.com/learn/177)或是查看该门课程授课教师廖雪峰先生官方网站所给出的Python教程(链接:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000)
1.变量
变量名构成:英文字母、阿拉伯数字、下划线,其中阿拉伯数字不能作为开头【和C一样嘛!】
同一个变量可以反复赋值,而且可以是不同类型的变量,这种变量本身类型不固定的语言称之为动态语言【与之对应的是静态语言(C、Java等),在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错】。例如:
a = 123 # a是整数 print a a = 'imooc' # a变为字符串 print a
2.字符串类型
字符串可以用单引号或者双引号括起来表示。字符串本身包含单引号,则可用双引号括起来表示(例1);字符串本身包含双引号,则可用单引号括起来表示(例2);字符串本身同时包含单引号与双引号,则必须转义(例3)。Python字符串用\进行转义,转义字符 \ 不计入字符串的内容中。
在字符串前面加r前缀,可以标志一个raw字符串(例4)。raw字符串里面的字符无需转义,适用于转义字符过多,且本身不含单双引号的情况。
用三个单引号可以把多行字符串括起来(例5)。
在字符串前面加u前缀,可以标志一个Unicode字符串(例6)。Unicode字符串内部使用unicode编码,适用于处理中文等非ASCII字符。 Unicode字符串除了多了一个 u 之外,与普通字符串没啥区别,转义字符和多行表示法仍然有效(例7)。
raw字符串、多行字符串、Unicode字符串是不同维度的概念,可以交叉使用(例8)。
# 例1.字符串本身包含单引号,可用双引号括起来表示 print "I'm OK" # 例2.字符串本身包含双引号,可用单引号括起来表示 print 'Learn "Python" in imooc' # 例3.字符串本身同时包含单双引号,必须用反斜杆转义 print 'Bob said \"I\'m OK\".' # 例4.用r前缀标志一个raw字符串 print r'\(~_~)/ \(~_~)/' # 例5.用三个单引号括起一个多行字符串 print '''Python is created by Guido. It is free and easy to learn.''' # 等效于 print 'Python is created by Guido.\nIt is free and easy to learn.' # 例6.用u前缀标志一个Unicode字符串 print u'中文' # 例7.转义、Unicode、多行同时应用 print u'中文\n日文\n韩文' # 例8.raw、Unicode、多行同时应用 print ur'''Python的Unicode字符串支持"中文", "日文", "韩文"等多种语言'''
如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题.可以在第一行添加注释:
# -*- coding: utf-8 -*-
目的是告诉Python解释器,用UTF-8编码读取源代码.然后用编辑器另存为... 并选择UTF-8格式保存。
3.布尔类型
在Python中,布尔类型只有True和False两种值,并把0、空字符串‘‘和None看成 False,其他数值和非空字符串都看成 True。
布尔类型还可以与其他数据类型做 and、or和not运算,但运算的结果可能不是布尔类型(例1)。例如:
# 例1 布尔类型与其他数据类型做逻辑运算,结果不为布尔类型 a = True print a and 'a=T' or 'a=F' # 打印结果是:a=T
这是因为,Python中的 and 和 or 运算有一条重要法则---短路计算:
- 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
- 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
因此,在上述例子中,True and ‘a=T‘ 计算结果是 ‘a=T‘,继续计算 ‘a=T‘ or ‘a=F‘ 计算结果还是 ‘a=T‘。【短路计算并不稀奇,C++其实也有,不同的只是,C++会先把非布尔类型转成布尔类型再进行运算,所以逻辑运算结果一定是布尔类型】
4.列表类型
4.1 list
list,是一种有序的列表。和其他语言不同,在Python中,它是一种内置的数据类型。list是数学意义上的有序集合。
构造list非常简单,直接用方括号 [ ]
把list的所有元素都括起来,就是一个list对象(例1);通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list;一个元素也没有的list,就是空list(例2)。【挺像C++ STL中的vector】
由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种不同类型的数据(例3)。【这点和vector差异较大】
可以通过索引来获取list中的指定元素。需要特别注意的是,索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推(例4)。使用索引时,千万注意不要越界。【一定程度上,索引可以类比为C语言中的数组下标】
比较稀奇的是,在Python中还可以通过索引来倒序访问list中的指定元素!索引使用一个 -号来表示自己是倒序的,例如,我们可以用 -1 这个索引来表示最后一个元素,类似的,倒数第二用 -2 表示,倒数第三用 -3 表示…以此类推(例4)。
list 有两种方法可以添加新元素,其中:append()方法总是把新的元素添加到 list 的尾部;insert()方法接受两个参数,第一个参数是索引号num,第二个参数是待添加的新元素。使用insert()方法插入新元素后,list里面原先索引号为num及num以后的元素,依次后移一位。(例5)
list 使用pop()方法删除指定元素,该方法可以不要参数,则默认将list尾部的元素删掉;也可以接收一个索引号num,则将list索引为0的元素删掉。每次调用pop()方法后会自动打印出被删除的元素。(例6)
替换list 中指定元素,直接使用索引(正序逆序皆可)访问并赋新值即可。(例7)
# 例1 用[]把元素括起来就是list L = ['Michael', 'Bob', 'Tracy'] # 例2 元素数据类型不完全相同的list mix_list = ['Adam', 95.5, 'Lisa', 85, 'Bart', 59] # 例3 空list empty_list = [] # 例4 用索引获取list中的指定元素 print L[0] # 用正序索引访问第一个元素 print L[-3] # 用逆序索引访问第一个元素(倒数第3个元素) # 例5 添加新元素 L.append('Tom') # 将Tom添加到例1所示list的尾部 print L # 显示:['Michael', 'Bob', 'Tracy', 'Tom'] L.insert(0, 'Alice') # 将Alice添加到例1所示list中索引为0的位置 print L # 显示:['Alice', 'Michael', 'Bob', 'Tracy', 'Tom'] # 例6 删除元素 L.pop() # 无参,默认将list尾部的元素删掉,显示:'Tom' print L # 显示:['Alice', 'Michael', 'Bob', 'Tracy'] L.pop(0) # 参数为索引,将list索引为0的元素删掉,显示:'Alice' print L # 显示:['Michael', 'Bob', 'Tracy'] # 例6 替换元素 L[0] = 'Alice' L[-1] = 'Tom' print L
4.2 tuple
tuple也是一种有序列表类型,一般译为“元组”。和list不同的是,tuple一旦创建完毕,就不能修改了。所以,tuple就没有append、insert、pop等方法,也不能通过索引重新赋值。
不同于list,创建tuple需要使用圆括号 ( )将所有元素括起来,而非方括号 [ ] (例1)。因为圆括号同时可以表示运算时的优先级,所以创建单元素tuple时必须在元素后面加一个逗号(例2)!
除以上几点以外,tuple的使用和list是类似的。(例3-5)
tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向‘a‘,就不能改成指向‘b‘;如果指向一个list,就不能改成指向其他对象。但是,指向的这个list本身是可变的(例3)!所以,要创建一个内容也不变的tuple就必须保证tuple的每一个元素本身也不能变。
# 例1 用()把元素括起来就是tuple T = ('Michael', 'Bob', 'Tracy') # 例2 创建单元素tuple single_tuple = ('Bob',) single_tuple = (10,) # 例3 元素数据类型不完全相同的tuple mix_tuple = ('Adam', 95.5, 'Lisa', 85, 'Bart', 59) # 例4 空tuple empty_tuple = () # 例5 用索引获取tuple中的指定元素 print T[0] # 用正序索引访问第一个元素 print T[-3] # 用逆序索引访问第一个元素(倒数第3个元素) # 例6 "可变的"tuple T = ('a', 'b', ['A', 'B']) L = T[2] L[0] = 'X' L[1] = 'Y' print T #显示:('a', 'b', ['X', 'Y'])