让Python遇上Office:从编程入门到自动化办公实践
上QQ阅读APP看书,第一时间看更新

1.5 简单交互

本节内容来介绍一些Python的简单交互方式。

1.5.1 注释

在正式开始写代码之前我先给你讲一个知识点,叫作“注释”,注释是指解释字句的文字。我们平时写的代码可能会很多、很杂或者很高深,如果不写点说明性的文字在上面,也许过段时间可能会看不懂,但是直接在代码里写的文本不就是代码了吗?但实际上注释是给我们自己看的,而不是需要执行的代码,所以我们要用一个“#”区分注释和普通代码,“#”就是注释符。所谓的注释就是给我们自己做备注用的,解释器在解释代码的时候遇到“#”就会自动略过它后面的全部代码。举一个例子吧,下面的代码看起来有三行,但解释器只会执行第二行和第三行的“print("hello world")”,因为“#”后面不管写了什么,Python解释器都不会关心。代码如下:

这行是注释,不会被执行
print("hello world")  # 111从这里开始是注释,不会被执行
print("hello world")  # 222从这里开始是注释,不会被执行

虽然注释符很简单,但我也建议尽量写得优雅一点。根据PEP8编程规范,“#”号注释的标准写法是:“#”距离左边代码2个空格,距离右边注释的内容1个空格。当然这只是一种规范不是规则,你不遵守也是可以的。

如果要把注释写在多行,那么一行一行加“#”似乎有点麻烦,所以一般IDE都会提供注释代码的快捷键,比如说pycharm和vscode的注释快捷键都是“Ctrl+/”。你可以同时选中多行代码按一次“Ctrl”键和“/”键,这样就能同时注释多行了,再按一次“Ctrl”键和“/”键则取消注释,这个操作你可以先自己练习一下,以后可能会经常用到。

1.5.2 输出

上面那行“print("hello world")”已经成为你的第一行代码了,它是什么意思呢?我们知道“print”是打印的意思,它的作用就像我们看到的那样,会把括号里的东西打印到控制台上。实际上,“print”是一个函数,括号里的是参数,注意这与数学课本上的函数不是一回事,现在你只需要记住这么用就可以了,关于函数的知识点我会在第3章讲到。

上面我们说了“print”的作用很简单,虽然简单,但开发过程中它的必要性也很明显的,我们可以通过它知道程序在运行过程中的某些信息,比如说执行到哪个函数、执行了哪个分支、处理了几个文档等,不然一个程序运行之后你啥也不知道就结束了,似乎不利于我们了解执行情况。

我们再回过头看一下“print”函数,括号内写的是一个用引号括起来的文本,这种用引号括起来的文本我们把它叫作字符串,字符串是Python六大数据类型之一,下一章我们会学习数据类型。我们试着打印数字类型,代码如下:

print(11, 22)  # 输出:11 22
print(1 + 2)  # 输出:3

从上面的代码可以看出,“print”除了可以打印字符串,也支持打印其他的数据类型,而且你可以传入多个输入值,每个输入值之间使用逗号(半角)隔开即可,打印结果是用空格隔开的每个输出值。

再来看下面的代码,如果同时打印多个值,它默认是使用空格来隔开每个值,我们可以通过sep参数把分隔符改为逗号,输出的结果就是用逗号连接每个值了。代码如下:

print("hello", "world", "!")  # 输出:hello world !
print("hello", "world", "!", sep=",")  # 输出:hello,world,!

再看下面的代码,print函数指定了一个控制结尾输出的end参数,它默认值是“\n”,“\n”表示换行,所以你看到每次print之后都会换行。这里我们将end参数值改为叹号,那么它打印结束后就不会换行而是用一个叹号结束。代码如下:

print("hello")
print("world")
print("hello", end="!")
print("world", end="!")

打印结果如下面代码所示,前两个打印完之后会换行,但后面两个不换行。

hello
world
hello!world!

“print”函数还有一个f i le参数可以把输出的结果保存为一个文件,但这个功能我们不怎么常用,如果你还记得的话,等后面学到文件操作的时候大家再回过头来用一下。

1.5.3 输入

上面演示了如何把打印结果输出到控制台方便我们查看信息,有很多时候我们还需要输入数据,我们可以使用“input”函数获取输入的文本。当你运行代码的时候,它会一直卡在等待输入状态,直到你输入完并按下回车键,代码才会继续往下执行。代码如下:

input()

如果只有上面那行代码,我们按完回车键之后就结束了,那么我们输入的值怎么被接收呢?而且如果只是一个输入光标在闪,用户也不清楚需要输入什么呀,是不是给点提示文字会更好?我们把代码改成这样下面会更好;

num = input("请输入你的学号:")
print("你输入的学号是:", num)
# 执行结果如下
# 请输入你的学号:5
# 你输入的学号是:5

上面代码的意思是把用户输入的内容保存到一个叫作“num”的变量中,相当于给用户输入的文本内容起了一个名字叫作“num”,名字而已,你也可以叫其他名,但是你要遵守一定的命名规则,Python的命令规则有哪些呢?请伸个懒腰然后继续往下阅读。

1.5.4 变量

变量就是一个可以改变的量。运行程序的过程中所有的数据都会占用内存,即在内存中开辟一块空间进行存储,每块内存空间都会有一个内存地址,但地址很长。Python是一门高级语言,在我们写代码的时候都用地址去访问数据显然不太友好,所以我们给数据取一个名字,就像我们生活中与人交流,我们会用名字指代他而不是念他家地址,这个名字就是变量名。变量名是不能乱取的,要遵守以下规则:

· 只能由字母、数字或下画线组成,例如“give_me_5”合法,“they_&”非法。

· 不能以数字开头,例如“name1”合法,“2b”非法。

· 区分大小写,例如pan、PAN、Pan都不是同一个变量。

· 不能与系统关键字一样,例如if、when等,这些都是关键字,不能用作变量名。

上面的是命名规则,既然是规则,就是必须要遵守的,不遵守规则程序就会罢工不干。

下面还有一些规范,可不遵守,但为了代码可读性,建议遵守:

· 普通变量全部小写,固定数值的变量全部大写。

· 多个单词用下画线分隔,例如“is_general”,也可以使用驼峰式命名,例如“isGeneral”。

· 变量名尽量顾名思义,例如“input_age”就比“abc”容易阅读。

· 当变量过长时可以适当缩写,例如“image_expire_time”可以写成“img_exp_time”。

知道了变量的意义和规则之后,我们来看看怎么使用变量。好吧,其实上面已经用过变量了,没错,就是使用一个“=”,注意这个等号与数学中的等号意义完全不一样,在编程语言中我们把等号叫作赋值号,作用是把等号右边的值赋值给左边的变量,即给右边的数据取了一个名字。另外根据规范,赋值号左右两边应该各有一个空格。我们可以用图1-37简单表示数据在内存中与变量名的关系(实际上更复杂)。

图1-37  Python的变量与内存关系

假设图1-37表示的是内存中的某一块区域,上面有很多数据,并且每个数据都有对应的内存地址,除此之外还有变量名指向数据,比如说将“9527”这个数据取名为“course_id”,将“Python”这个数据取名为course_name和select_curse,没错,一个数据可以起多个变量名,就像一个人可以有多个名字一样。我们把图1-37用代码表示:

course_id = 9527
course_name = "Python"
select_name = "Python"
# 起多个变量名也可以连写, select_name = course_name = "Python"
print(id(course_id))  # 打印:1914990655408
print(id(course_name), id(select_name))  # 打印:2348198622768
2348198622768

我们可以使用id()这个函数获取某个变量的内存地址,分别打印出这三个变量的地址,不难发现,“course_name”和“select_name”的地址是一样的,证明这两个变量实际上是同一个。提示一下,由于Python底层设计的原因,用id()函数获取到的并非真实的内存地址,而是经过一些处理之后得到的值,不过如果你没有获取真实地址的需求,用它表示内存地址也没什么问题。

补充一个知识点,Python的变量是弱类型,你不需要指定该变量是字符串还是数字类型,后期也可以随意更改类型。有些语言,例如Java的变量是强类型,在使用前就要声明变量类型,后期变量也只能被赋值该类型的变量值,例如Java中代码写法“private int age= 18;”,用Python写就是“age = 18”, 是不是感觉Python的语法简洁明了多了?