从厂里离职快2个月了,一直想做个完整的Python回忆录,回顾一下这5年的Python生涯。我对Python印象,都是在于这个语言编写速度快上面,以前做过Java和C++的开发,在于开发速度上面,Python的确无与伦比(我从来不喜欢比较哪个语言好坏,用什么语言要看团队和个人的偏好),简洁的语法,丰富的第三方包模块,在开发上面提供非常大的助力。
1. 开发环境
讲具体内容前,先说明一下我的开发环境与开发习惯:
- 使用的系统: Debian 9(MacOS的PD或者VMWARE WORKSTATAION 11)
- 编辑器: Sublime text 3
- Python版本: 2.7.13
我喜欢在Linux环境下编写和调试程序,这和Windows上面使用IDE有什么区别呢?第一,调试的环境与外网服务器运行环境保持了一致,这样会避免很多系统兼容问题,现在大部分的服务器都是Linux的发行版本,主要以Debian系和RedHat系两种为主,我以前厂里使用Debian系,所以我也习惯使用Debian作为开发环境,当然新手可以用Ubuntu也一样,Ubuntu基于Debian上开发的。第二,在Linux环境下编写程序,思维会更习惯服务器上面的运行环境架构,就像学英语在非英语国家内也可以学,但真正要掌握英语和外国人去沟通,有条件当然是去到英语国家生活更好。由于现在大部分公司都要求Windows系统,所以使用这些系统可以用VMWare和
PD来安装,Vmware我用的是11,Mac的PD(Paralle desktop)用的哪个版本都差不多,目前我是用14。
选择Sublime text 3,而不用大名鼎鼎的Pycharm,第一点是因为Subl够简单,而Pycharm实在很笨重。第二点是Subl更专注于编写程序上面,更体现一个人的对这个语言的掌握吧,有Pycharm提示是比较方便,但Python语言本来就足够简单了,初学者可以考虑使用Subl来锻炼自己对Python的一个掌握。
然后是Python版本,我厂里一直都是用Python2.7,没升级到Python3,所以整篇回忆录都是基于Python2.7的,可能要问Python3好还是2.7好,我觉得当然是新的好,但有历史原因,历史原因是什么?就是以前很多程序都是用Python2.7来写的,升级上去的话,很多系统甚至脚本都需要调整,在业务繁忙的部门里面,这浩大的改造工程就只能等到不得不才进行。
最后这些软件的安装可以参考网上的文章,我就不展开来谈了。
2. 第一个例子:JSON格式化输出
先来一个入门例子,做个JSON格式化输出,输入的参数一个JSON文件的文件名,运行方式是在终端Terminal下执行命令python json_pretty.py json_file.json
,而json_pretty.py
是程序文件名,而json_file.json
是要格式化的json文件名,注意的是,这个程序并不会修改json_file.json
的内容,只是将它内容格式化输出到屏幕上。下面是执行的结果输出:
{
"name": "Tom",
"nums": [
1,
2,
3,
4,
5,
6,
7
]
}
json_pretty.py
的内容如下:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import json
def main():
# 从命令行中获取文件名参数,argv[0]是程序文件名
fname = sys.argv[1]
# f是文件描述符
f = open(fname, "r")
# 读取文件所有内容
content = f.read()
# 关闭文件描述符
f.close()
# 加载json,转换为python基本数据类型dict
content_dict = json.loads(content)
# 格式化输出,indent=4等于表示缩进4个空格
pretty_content = json.dumps(content_dict, indent=4)
# 打印
print(pretty_content)
if __name__ == '__main__':
main()
- 第1、2行是python的文件头,尽量所有python文件以两行开头,至于解决什么问题,后面再详细说。
- 第3、4行是导入依赖模块,导入了sys和json包,这样才可以使用到它们提供的方法。
- main是一个方法,if那个一行是如果识别到作为单独主文件来执行才会执行的main()方法。意思是当我们运行
python json_pretty.py json_file.json
就会判断到if为true,然后执行main方法,作为主文件执行时,__name__
值为__main__
,这些都是高级内容,有个简单了解就好。
json_file.json
的内容如下,它的
{"name":"Tom", "nums":[1,2,3,4,5,6,7]}
目录结构是:
├── json_file.json
└── json_pretty.py
手打代码是学习最好的方式,不去真实地运行一遍,永远都不会发现实际遇到的问题。这个程序其实python直接就有提供可以使用的工具,执行python -m json.tool json_file.json
命令,和上面输出的结果是一样的。
3. 第二个例子: Hello World的FlaskWeb应用
Flask是Python大名鼎鼎的Web框架,非常轻量而且功能强大,我厂的HTTP接口都是使用Flask开发的。先用Flask做一个简单的JSON接口,输出{"name": "hello world"}
。Flask需要安装包到Pyth
on目录里面,可以查阅文档看看怎么安装。安装了之后,编写文件
## 编辑文件hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '{"name": "hellow world"}'
if __name__ == '__main__':
app.run(port=8080)
##
# 终端下执行
python hello.py
# 在另一个终端,请求地址,也可以去到浏览器访问虚拟机上面的8080端口
curl "http://localhost:8080/"
上面的命令解释如下:
- 前两句是创建文件夹
flask_app
。 - 编辑文件hello.py,这是Flask的web程序启动入口文件。
- 文件内容是从Flask中的例子进行修改的,原来例子还要使用
flask run
命令进行启动,而修改后就可以随意更换端口运行了,比较接近真相。 -
@app.route
是接口地址的装饰符,表示"/"都路由到这个接口,Flask的路由非常强大而简单。
4. 小结
通过上面的两个入门例子,来展现一下Python的强大,用这么少的代码就可以写出一个可用的json工具和web例子,相对比其他静态语言是不可想象的。所以Python有句话:”人生苦短,我用Python“,用更少的时间完成更多的功能,这样我们的人生可以有更多时间陪伴家人,而不是每天都在无止境的加班中。
后视镜 20191014
网友评论