掌握基本语法是熟练使用Python语言进行自动化办公的必要前提。本文主要介绍要用到的Python编程基础知识,主要涉及Python的数据类型、变量、程序流程控制、函数、类、模块和包等内容。很多人为了图快,在学习Python语言时一上来就学习数据分析、机器学习。其实这些技术的基石是Python语言中最简单的基础知识。所以要老老实实打牢基础,这样才能看得懂那些深奥而复杂的源代码,在以后学习Python高级技术的过程中才会游刃有余。
计算机处理的都是数据,不同类型的数据有不同的处理方式。Python3中有6种数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)、Set(集合)。
Python中常见的数字类型包括整型(int)、浮点型(float)、布尔型(bool)。
整型(int),通俗来说就是整数,不带小数点,如1、2、3。
浮点型(float),通俗来说就是小数,浮点型由整数部分与小数部分组成,如3.14。
布尔型(bool),只有对(True)或错(False)两种状态。False等值于0,True等值于1,所以它也可以当作整数使用。
>>> True+1
2
尽管1.0和1相等,但是Python自动将1.0看作一个浮点数,将1看作整数。使用Python内置的type函数可以查看一个数据的具体类型。
>>> type(1),type(1.0),type(True)
(, , )
可以使用Python内置的int、float函数转换数据类型。例如,把浮点型转为整型,把整型转为浮点型。
>>> int(1.0), float(1)
(1, 1.0)
整型、浮点型数字可以做四则运算,在解释器里输入一个运算表达式,它将输出表达式的值。整型和浮点型数字在计算机内部存储的方式是不同的,整型数字运算永远是精确的,而浮点型数字运算则可能会有四舍五入的误差。
>>> 3 * 0.1
0.30000000000000004
>>> 5 / 2
2.5
在整数除法中,使用除法运算符/总是返回一个浮点型数字,如果只想得到整数结果,要丢弃可能的分数部分,可以使用整除运算符//。
>>> 5//2
2
整除不一定能得到整型数字,不同类型的数混合运算时会将整型数字转换为浮点型数字。
>>> 5.0//2
2.0
Python3中采用%表示取模运算,它返回除法的余数。
>>> 5%2
1
布尔型数字可以做and、or和not逻辑运算。and运算是与运算,只有所有表达式都为True,and运算结果才是True;or运算是或运算,只要其中有一个表达式为True,or运算结果就是True;not运算是非运算,它把True变成False,False变成True。
>>> 2 > 3 and 3 > 1
False
>>> 2 > 3 or 3 > 1
True
>>> not 3 > 1
False
2 > 3 and 3 > 1,既有关系运算又有逻辑运算。多个运算同时出现的时候,执行顺序是算术运算>关系运算>逻辑运算。2 > 3是关系运算,结果是False;3 > 1运算结果是True;False and True,运算结果就是False。
值得注意的是,我们这里说的都是十进制的数。除了十进制数之外,还有二进制数、八进制数、十六进制数等。十进制数是逢10进1,十六进制数是逢16进1。进制问题,读者可以自行查找资料阅读。
与数字对应的就是字符串,也就是一串字符,例如前面输出的“Hello,World!”,就是字符串类型(str)的数据。
>>> type('Hello,World!')
字符串的特点就是数据的外部由引号包围,可以是单引号'、双引号"、三引号'''。通常来说,字符串里面有单引号,就用双引号包围;字符串里面有双引号,就用单引号包围;既有单引号又有双引号就用三引号包围。
>>> print('''He said:"It's love!"''')
He said:"It's love!"
使用三引号还可以表示多行字符串。多行代码的录入方法是:在>>>后面录入第一行代码,敲击回车,出现“…”,在后面继续录入第二行代码。也可以把多行代码复制下来,在>>>处单击右键粘贴。
>>> print('''Beautiful is better than ugly.
... Explicit is better than implicit.
... Simple is better than complex.
... Complex is better than complicated.''')
输出结果如下。
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
一般来说,引号包围的字符都会原模原样地输出,但是也有例外,那就是转义字符\。当Python读到字符串中的\,它会将接下来的字符看作一个普通字符。
>>> print("He said:\"It's love!\"")
He said:"It's love!"
常见的转义字符用法见表2-1。
表2-1
转义字符 |
描述 |
转义字符 |
描述 |
\(不在行尾时) |
转义符 |
\(在行尾时) |
续行符 |
\' |
单引号 |
\\ |
反斜杠符号 |
\" |
双引号 |
\r |
Enter键 |
\t |
横向制表符 |
\n |
换行 |
例如,使用换行转义字符\n可以输出换行符。
>>> print('Flat is better than nested.\nSparse is better than\
... dense.\nReadability counts.')
Flat is better than nested.
Sparse is better than dense.
Readability counts.
上面这行代码太长,在行末输入转义字符“\”后按Enter键另起一行,Python会认为它们属于同一行。
下面是多个转义字符混合使用的效果。
>>> print('名单:\n\t\'小王\'\n\t\'小李\'\n\t\'小张\'')
名单:
'小王'
'小李'
'小张'
有时候我们看到以r开头的字符串,说明后面的字符都是普通的字符。也就是说,反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
>>> print(r'Flat is better than nested.\nSparse is better\
... than dense.\nReadability counts.')
Flat is better than nested.\nSparse is better\
than dense.\nReadability counts.
字符串前面有r,也就不会把\n当作换行符了。由于文件路径有反斜杠,所以我们常常在文件路径字符串前面加r。
有时候会在字符串里看到%s、%d,它们表示占位符。
>>> age=5
>>> print('小明已经%d岁了!' % age)
小明已经5岁了!
%d是占位符,它最终会被后面的age变量的值所替代。
使用占位符是为了格式化输出字符串,一个字符串可以使用多个占位符。不同数据类型的占位符不一样,如%s代表字符串,%d代表整型数字。
>>> name='小明';age=5;like='画画'
>>> print('%s已经%d岁了,他爱好%s。' % (name, age, like))
小明已经5岁了,他爱好画画。
不同的数据类型,做运算的方式是不一样的。两个字符串使用加法运算符+做加法运算,是将两个字符串连接起来,下面举例说明。
>>> print(1+2)
3
>>> print('1'+'2')
12
要注意的是,数字带上引号也可以变成字符串。
>>> print('1' * 10)
1111111111
字符串使用乘法运算符*做乘法运算的含义是复制,上面的代码的意思是将1复制10次。
字符串是一串字符,我们可以通过Python内置的len函数查看字符个数。
>>> len('Beautiful')
9
我们可以截取其中的某个字符。例如,获取Beautiful的第6个字符。
>>> 'Beautiful'[5]
'i'
注意,Python中的字符串有两种索引方式,从左往右以0开始,从右往左以−1开始。
下面截取Beautiful的前3个字符。
>>> 'Beautiful'[0:2]
'Bea'
下面截取Beautiful从第1个到倒数第3个的所有字符。
>>> 'Beautiful'[0:-2]
'Beautif'
可以使用count方法统计B出现的次数,什么是方法?后面学习了类,我们会详细解释。
>>> 'Beautiful'.count('B')
1
还可以使用replace方法替换字符串中的字符B。
>>> 'Beautiful'.replace('B','b')
'beautiful'
有些字符串非常长,例如一篇网页的源代码就是一个字符串。要从杂乱无章的代码中获取特定的内容,就需要用到正则表达式,后面会详细介绍。
我们先跳开数据类型这个话题,说一说变量。
在前面的例子中,需要多次用到字符串Beautiful,每次都写,就会显得很麻烦。特别是比较长的字符串,往往记不住又容易写错。
计算机的内存可以帮我们记住这些数据,给字符串Beautiful贴一个标签string_1,下次直接使用标签名即可。
>>> string_1='Beautiful'
>>> string_1[5]
'i'
string_1='Beautiful'的含义是什么?首先,Python会读取等式右边的数据,识别出数据类型为字符串,在内存中找一个足够容纳Beautiful的可用空间,把Beautiful放进去,并且以string_1这个名称指向它,string_1就是变量。要注意这里的=,它是“赋值、设置值”的意思,也就是把右边的值赋给左边的变量,而不是“等于”的意思。在Python中,要判断是否相等,要使用两个等号==。
有了变量,就可以更好地处理数据。例如,我们可以将两个字符串连接。
>>> string_1=string_1+' Girl!'
>>> print(string_1)
Beautiful Girl!
上例中,string_1同时出现在等号的左边和右边,意思是先计算等号右边的结果,然后将结果赋给左边的名称。
strin