Python 日语 境外旅游攻略

0%

程序从编写、执行到返回结果经历了什么

解释器

先在Download Python 3.6.2下载安装 Python,一路回车(不要改安装目录)后就安装好了 Python,然后打开IDLE,界面如图

我们看到的这个界面就是我们和 Python 对话的窗口,我们给它输入命令执行,它处理后告诉我们结果(这个过程叫返回),这个东西叫作 shell,可以在顶部看到“Python 3.6.2rc1 shell”,光标前面的>>>符号叫作shell 提示符。

我们输入一个命令

1
print("我在学习 Python")

然后马上可以看到shell返回了一个结果显示在屏幕上

1
我在学习 Python

print() 是一个命令,这个命令可以把括号里你传入的东西显示在屏幕上,这个命令就是干这个的。因为我们输入的是一句话,所以把它用双引号括起来,这样的数据类型叫作字符串(string),字符串也可以用单引号括起来,返回的结果一样。

1
2
>>> print('我在学习 Python')
我在学习 Python

到这里我们知道了 print() 命令和字符串的概念,但是不管你用什么语言编写代码,都是要交给计算机执行的,而计算机是是不知道这些代码是什么意思的,那计算机是怎么执行的呢。其实我们一开始安装 Python 的同时安装了 Python 解释器,解释器相当于一个翻译,把一种语言的语法、规则等翻译成机器码让计算机执行。解释器好比计算机语言的生存环境,没有这个环境,用该语言编写的程序也无法执行,即使你有一段Python代码,如果那台计算机上没有安装Python解释器,那这段代码就运行不了。

一种计算机语言包含了各种语法、规则、语法规则的解释器、相关的文档等。人和人的交流也是如此困难,何况和计算机,所以你的命令一定要符合 Python 的语法规则,否则就会出错。假如你漏掉了一个引号就会出错

1
2
>>> print("我在学习 Python)
SyntaxError: EOL while scanning string literal

凡是不能让解释器顺利翻译,导致出错的情况都叫 bug,找出错误叫 debug,学习任意一种计算机语言这两个词都将伴随你。

数据类型

前面提到了字符串的概念,以及如何表示字符串。字符串是一种数据类型(Data Type),其他基本的数据类型还有整型(整数),浮点型(小数),这也是人类语言的基本组成,是计算机语言的共性,因为计算机语言是为人类服务的嘛。先作一个简单的数学运算

输入 2+2 回车让Python 计算一下

1
2
>>>2 + 2
4

2+2 叫做表达式(_expression_),是Python语言最基本的指令,表达式由值(value)和操作符(operator)组成,比如上例中数字2和加号分别是值,操作符。值(value)的类型可以是整型、浮点型、字符串等。表达式可以只有一个值,这意味着Python中,在哪儿都可以使用值,可以只输入一个值,然后返回

1
2
>>>2
2

这样没有问题。

操作符有很多,和数学运算有关的有

操作符 操作 举例 举例结果
+ 加法 2 + 2 4
_ 减法 6 - 3 3
* 乘法 3*5 15
除法 8 / 4 2
** 求平方 2 ** 4 16
% 求余数 11 % 3 2

值可以是任一种数据类型,可以是整型、浮点型、字符串型等,可以把整型、浮点型看作数字值,字符串型看作文本值。如

1
2
>>> print('我在'+'学习' + 'Python')
我在学习Python

该例中的+操作符不是加号,它的功能就是把字符串连起来。操作符是一个广义的概念,包括但不限于数学运算符。

值(包含整型、浮点数、字符串这些数据类型,)和操作符是解释器能够识别的最小单元

变量与赋值

先看实例

1
2
3
>>> name = "上野树里"
>>> name
'上野树里'

这里=这个符号叫赋值符号不是等于号,name 叫变量,可以看到,name 的值变成了字符串上野树里。变量的值可以改变,即我们可以重新给它赋值

1
2
3
>>> name = '新垣结衣'
>>> name
'新垣结衣'

给name重新赋值后,name 的值变成了字符串新垣结衣

前面的举例都是在shell里进行,只能一行一行地执行,没法保存,我们的程序不可能只有一行代码,所以我们在文本编辑器里编写代码,Ctrl+N 新建一个文件就打开了Python自带的文本编辑器,输入下面代码

1
2
3
print("what's your name")
myName = input()
print("My name is " + myName)

保存后,点击 Run- Run Module F5 ,可以执行这一段程序,然后在shell 里显示执行结果。这三行代码分别表示

  1. 第一行在屏幕上显示“what’s your name”,询问你的名字
  2. 第二行接收键盘的输入,从键盘输入你的名字
  3. 第三行在屏幕显示你的名字

input()、 print() 是两个最基本的函数(命令)一个从键盘接收命令,一个返回执行的结果。连接字符串的 +操作符就是在这样的情况下使用的。

Python 自带的编辑器比较简陋,功能少。我们还可以选择其他的编辑器,比如 Sublime Text 编辑器 , 这些编辑器有“自动补全”、语法检查等功能,是编程的好助手。

试试把上面那三行代码复制到 Sublime Text 编辑器里保存到C:\Users\Administrator\ 目录下,命名为test.py 。选择Python模式,保存时不需要指定后缀名。Python文件的后缀是py 。

那怎么运行保存好的代码呢?按win + R 输入cmd 后打开Windows系统命令行输入

1
python test.py

可以看到执行结果。

为什么会这样呢?在安装python时,安装程序会自动把 python shell 添加到 Windows 的系统变量(计算机-属性-高级系统设置-环境变量-系统变量-Path 查看),在Windows命令行中输入 python后,系统会调用python shell 运行 test.py 程序,然后返回运行结果。

如果只输入 Python就会进入python shell 这时候看到了>>> 这个提示符。

如果代码文件在你的home 目录下(我以Administrator账户登录,所以home 目录就是C:\Users\Administrator\),那么可以不指定文件位置,如果不在home 目录下就需要指定文件位置。复制test.py 到D盘根目录下,要执行的话需要指定文件路径

注意文件路径是两个\,因为反斜杠 在python里是有定义的,表示“转义

1
2
3
>>> a = 'what\'s'
>>> a
"what's"

因为字符串可以用单引号或双引号表示,如果字符串里含有单引号的话可以用反斜杠\来“转义”,代表它是一个单引号,而不是表示字符串。

文件操作

读取文件

写程序就是进行各种数据交换的过程,就会涉及文件的打开、读取、写入、关闭等操作。

经过上一步在D盘下有test.py这个文件 ,我们可以直接通过编写程序查看文档内容。

1
2
3
4
>>> f = open(r'D:\test.py', 'r')
>>> f.read()
'print("what\'s your name")\n\nmyName = input()\n\nprint("My name is " + myName)\n'
>>>f.close()
  1. 用open() 函数打开文件,文件路径用字符串表示,因为字符串里含有反斜杠,所以在前面加一个r,这样就不会有歧义,后面的r表示以“只读”方式打开,属于open() 函数的一个参数。
  2. 用read() 函数读取文件内容,返回后的内容是一个字符串类型
  3. 用f.close()函数关闭文件

如果文件不存在会报错,打开的文件一定要关闭,因为文件操作非常频繁,所以设计了更方便的方式

with open() as f:

的方式

1
2
3
4
>>> with open(r'D:\test.py', 'r') as f:
f.read()

'print("what\'s your name")\n\nmyName = input()\n\nprint("My name is " + myName)\n'

我们可以看到读取的内容以字符串的形式返回,字符串里还有\n,表示换行,我们的test.py文件里确实有换行。这个过程发生了什么,想一下。

我们再看一下,直接输入python

1
2
3
4
5
>>> python
Traceback (most recent call last):
File "<pyshell#66>", line 1, in <module>
python
NameError: name 'python' is not defined

提示python未定义,输入'python'再看一下

1
2
>>> 'python'
'python'

没有问题。只输入python虽然人类认识,但python解释器不认识,解释器只认识经过定义的东西,也就是说代码里所有的内容都要符合python的规则。加上引号'python'说明传入的是一个字符串。

写入文件

类似读文件,写文件要经历打开、写入、关闭三个过程

1
2
3
4
>>> f = open(r'D:\test.txt','w')
>>> f.write('Python 有意思 ')
11
>>> f.close()

如果文件不存在会自动创建,记得关闭文件。现在手动打开test.txt文件,查看一下内容,“Python 有意思”被写入。

再执行下面代码

1
2
3
4
>>>f = open(r'D:\test.txt','w')
>>> f.write('Python is interesting')
21
>>> f.close()

test.txt内容变成了“Python is interesting”,原来的内容被覆盖了。如果你想接着前面的内容写入怎么办,比如你在网上下载小说,小说是一章一章的,你想把第二章放在第一章内容的后面。这种情况需要改变文件打开模式。

1
2
3
4
>>> f = open(r'D:\test.txt','a')
>>> f.write('\nPython 有意思 ')
13
>>> f.close()

w 模式会覆盖原来的内容,a 模式可以直接在已有的内容后面写入,保留原来的内容。还有其他的模式,如果你以后需要用到就得自己查了。不管哪本教材都只能涉及最常用的,不代表全部,所以要勤于搜索,勤于查文档。

\n 表,示换行。

类似读文件,也可以用

with open() as f:

的方式

1
2
3
4
>>> with open(r'D:\test.txt', 'w') as f:
f.write('Hello, world!')

13

编码 解码

在我们打开文件关闭文件的同时其实经过了计算机解码、编码,机器不认识人类的语言,所以写入文件的时候需要编码便于机器保存,读取文件时要解码给人看。牢记这句话

解码给人看,编码给机器处理

通用的编码/解码方式是UTF-8,也是默认的编码方式。我们前面写文件读文件没有感觉到编码解码的存在是因为处理的是默认uft-8编码的纯文本。假如打开一个用二进制保存的图片或者word文档就能感觉到编码了。

总结

编程不是难在语言本身,而是难在和周边各种各样的交流,交流就要涉及数据交换,交换数据又牵扯到数据格式转换等。我们先把人类语言转换成python语言(python 的数据类型)让python解释器认识,解释器又运行在操作系统上,解释器还需要和操作系统交流,比如前面提到的文件路径、系统环境变量、编码/解码这些问题,难的是这些知识。

坚持原创分享,您的支持将鼓励我继续创作!