[TOC]
## 交互式命令行写程序的弊端
在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。
所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。
现在,我们就把上次的```'hello, world'```程序用文本编辑器写出来,保存下来。
### 文本编辑器选择
那么问题来了:文本编辑器到底哪家强?
#### 推荐两款文本编辑器:
- 一个是[Sublime Text](http://www.sublimetext.com/),免费使用,但是不付费会弹出提示框:
![image](http://www.liaoxuefeng.com/files/attachments/0014316432749618f6c01e3df674e4db44799536ce37531000/l)
- 一个是[Notepad++](http://notepad-plus-plus.org/),免费使用,有中文界面:
![image](http://www.liaoxuefeng.com/files/attachments/0014316432852715b0ecf4b452c4648a60059f4cfa21059000/l)
#### 制书作者再补充一款
- [Visual Studio Code](https://code.visualstudio.com/),免费使用,开源(是 git 上成长非常快的项目,插件很多),轻量化(大文件都基本很快打开,无卡顿),支持大多数文件的编写,尤其是写 md 文件简直不要太舒服(可以导出 pdf html),最重要的是颜值高!
![image](http://on792ofrp.bkt.clouddn.com/17-3-29/89634822-file_1490770079321_3683.png)
#### 选择编辑器的注意事项
>[warning]请注意,用哪个都行,但是绝对不能用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。
### 使用编辑器
安装好文本编辑器后,输入以下代码:
```
print('hello, world')
```
注意print前面不要有任何空格。然后,选择一个目录,例如C:\work,把文件保存为hello.py,就可以打开命令行窗口,把当前目录切换到hello.py所在目录,就可以运行这个程序了:
```
C:\work>python hello.py
hello, world
```
也可以保存为别的名字,比如first.py,但是必须要以.py结尾,其他的都不行。此外,文件名只能是英文字母、数字和下划线的组合。
如果当前目录下没有hello.py这个文件,运行python hello.py就会报错:
```
C:\Users\IEUser>python hello.py
python: can't open file 'hello.py': [Errno 2] No such file or directory
```
报错的意思就是,无法打开hello.py这个文件,因为文件不存在。这个时候,就要检查一下当前目录下是否有这个文件了。如果hello.py存放在另外一个目录下,要首先用cd命令切换当前目录。
### 视频演示
[视频演示](http://asklxf.coding.me/liaoxuefeng/v/python/run-hello.py.mp4)(视频地址:http://asklxf.coding.me/liaoxuefeng/v/python/run-hello.py.mp4)
### 直接运行py文件
有同学问,能不能像.exe文件那样直接运行```.py```文件呢?在Windows上是不行的,但是,在Mac和Linux上是可以的,方法是在```.py```文件的第一行加上一个特殊的注释:
```
#!/usr/bin/env python3
print('hello, world')
```
然后,通过命令给hello.py以执行权限:
```
$ chmod a+x hello.py
```
就可以直接运行```hello.py```了,比如在Mac下运行:
![image](http://www.liaoxuefeng.com/files/attachments/001387104176573bc75768a559c474a8a69755828c1930a000/0)
### 小结
#### 文本编辑器写Python程序
用文本编辑器写Python程序,然后保存为后缀为```.py```的文件,就可以用Python直接运行这个程序了。
#### 交互模式和直接运行.py文件有什么区别
Python的交互模式和直接运行.py文件有什么区别呢?
#### 输入```python```启动解释器
直接输入```python```进入交互模式,相当于启动了Python解释器,但是等待你一行一行地输入源代码,每输入一行就执行一行。
#### 运行```.py```启动解释器
直接运行```.py```文件相当于启动了Python解释器,然后一次性把.py文件的源代码给执行了,你是没有机会以交互的方式输入源代码的。
#### 技巧
用Python开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证,事半功倍!前提是得有个27'的超大显示器!
### 参考源码:
#### hello.py
```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
print('Hello, world')
```
- Python教程
- Python简介
- 安装Python
- Python解释器
- 第一个 Python 程序
- 使用文本编辑器
- Python代码运行助手
- 输入和输出
- 源码
- learning.py
- Python基础
- 数据类型和变量
- 字符串和编码
- 使用list和tuple
- 条件判断
- 循环
- 使用dict和set
- 函数
- 调用函数
- 定义函数
- 函数的参数
- 递归函数
- 高级特性
- 切片
- 迭代
- 列表生成式
- 生成器
- 迭代器
- 函数式编程
- 高阶函数
- map/reduce
- filter
- sorted
- 返回函数
- 匿名函数
- 装饰器
- 偏函数
- Python函数式编程——偏函数(来自博客)
- 模块
- 使用模块
- 安装第三方模块
- 面向对象编程
- 类和实例
- 访问限制
- 继承和多态
- 获取对象信息
- 实例属性和类属性
- 面向对象高级编程
- 使用__slots__
- 使用@property
- 多重继承
- 定制类
- 使用枚举类
- 使用元类
- 错误、调试和测试
- 错误处理
- 调试
- 单元测试
- 文档测试
- IO编程
- 文件读写
- StringIO和BytesIO
- 操作文件和目录
- 序列化
- 进程和线程
- 多进程
- 多线程
- ThreadLocal
- 进程 vs. 线程
- 分布式进程
- 正则表达式
- 常用内建模块
- datetime
- collections
- base64
- struct
- hashlib
- itertools
- contextlib
- XML
- HTMLParser
- urllib
- 常用第三方模块
- PIL
- virtualenv
- 图形界面
- 网络编程
- TCP/IP简介
- TCP编程
- UDP编程
- 电子邮件
- SMTP发送邮件
- POP3收取邮件
- 访问数据库
- 使用SQLite
- 使用MySQL
- 使用SQLAlchemy
- Web开发
- HTTP协议简介
- HTML简介
- WSGI接口
- 使用Web框架
- 使用模板
- 异步IO
- 协程
- asyncio
- async/await
- aiohttp
- 实战
- Day 1 - 搭建开发环境
- Day 2 - 编写Web App骨架
- Day 3 - 编写ORM
- Day 4 - 编写Model
- Day 5 - 编写Web框架
- Day 6 - 编写配置文件
- Day 7 - 编写MVC
- Day 8 - 构建前端
- Day 9 - 编写API
- Day 10 - 用户注册和登录
- Day 11 - 编写日志创建页
- Day 12 - 编写日志列表页
- Day 13 - 提升开发效率
- Day 14 - 完成Web App
- Day 15 - 部署Web App
- Day 16 - 编写移动App
- FAQ
- 期末总结