> For the complete documentation index, see [llms.txt](https://molun.gitbook.io/byte-of-python-chinese/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://molun.gitbook.io/byte-of-python-chinese/19.what_next.md).

# 迈出下一步

如果到现在你已经阅读过本书并且编写了许多程序，那么你一定已经开始熟悉并且习惯 Python 了。或许你已经创建了一些 Python 程序来尝试完成一些工作，同时锻炼你自己的 Python 技能。如果你尚未至此，你也应该作出努力。现在我们面临的问题是“下一步该做什么？”。

我会建议你试图解决这个问题：

> 编写一款你自己的命令行*地址簿*程序，你可以用它浏览、添加、编辑、删除或搜索你的联系人，例如你的朋友、家人、同事，还有他们诸如邮件地址、电话号码等多种信息。这些详细信息必须被妥善储存以备稍后的检索。

如果你回想至今我们学过、讨论过、遇见过的所有东西，你会发现这其实非常简单。如果你仍想要有关如何进行的提示，这儿倒是有一些。

一旦你能够做到这件事，你便可以说自己是一名 Python 程序员了。现在，赶快\[写封邮件]\({{ book.contactUrl }})来感谢我写出了这么棒的一本书 ;-)。这一步并非强制但我仍建议如此。同时，请考虑\[购买本书的实体书]\({{ book.buyBookUrl }})来支持本书的后续改进。

如果你觉得上面的程序太容易了，这还有另一个：

> 实现[替换命令](http://unixhelp.ed.ac.uk/CGI/man-cgi?replace)。这个命令能将一串字符串替换为另外提供的文件或列表中的另一串。

只要你想，替换命令可以或简单或复杂地实现，从简单的字符串替换到搜寻搭配的样式（正则表达式）。

## 下一个项目

如果你发现上面的程序都能很容易地编写出来，那么看看下面这个完整的项目列表，并尝试编写你自己的程序：<https://github.com/thekarangoel/Projects#numbers> (这一列表与 [Martyr2 的超级项目列表](http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/)相同)。

你还可以看看：

* [Exercises for Programmers: 57 Challenges to Develop Your Coding Skills](https://pragprog.com/book/bhwb/exercises-for-programmers)
* [Intermediate Python Projects](https://openhatch.org/wiki/Intermediate_Python_Workshop/Projects)

## 示例代码

学习一门编程语言的最好方式就是编写大量代码，并阅读大量代码：

* [Python Cookbook](http://code.activestate.com/recipes/langs/python/) 是一本极具价值的“烹饪法”与提示的集合，它介绍了如何通过 Python 解决某些特定类型的问题。
* [Python Module of the Week](http://pymotw.com/2/contents.html) 是另一本优秀的[标准库](https://github.com/LenKiMo/byte-of-python/blob/master/stdlib.md#stdlib)必读指南。

## 建议

* [The Hitchhiker's Guide to Python!](http://docs.python-guide.org/en/latest/)
* [The Elements of Python Style](https://github.com/amontalenti/elements-of-python-style)
* [Python Big Picture](http://slott-softwarearchitect.blogspot.ca/2013/06/python-big-picture-whats-roadmap.html)
* ["Writing Idiomatic Python" ebook](http://www.jeffknupp.com/writing-idiomatic-python-ebook/) （付费）

## 视频

* [Full Stack Web Development with Flask](https://github.com/realpython/discover-flask)
* [PyVideo](http://www.pyvideo.org)

## 问与答

* [Official Python Dos and Don'ts](http://docs.python.org/3/howto/doanddont.html)
* [Official Python FAQ](http://www.python.org/doc/faq/general/)
* [Norvig's list of Infrequently Asked Questions](http://norvig.com/python-iaq.html)
* [Python Interview Q & A](http://dev.fyicenter.com/Interview-Questions/Python/index.html)
* [StackOverflow questions tagged with python](http://stackoverflow.com/questions/tagged/python)

## 教程

* [Hidden features of Python](http://stackoverflow.com/q/101268/4869)
* [What's the one code snippet/python trick/etc did you wish you knew when you learned python?](http://www.reddit.com/r/Python/comments/19dir2/whats_the_one_code_snippetpython_tricketc_did_you/)
* [Awaretek's comprehensive list of Python tutorials](http://www.awaretek.com/tutorials.html)

## 讨论

如果你遇到了一个 Python 问题，但不知道该问谁，那么 [python-tutor list](http://mail.python.org/mailman/listinfo/tutor) 是你提问的最佳场所。

请确保你会自己做你的家庭作业，你会首先尝试自己解决问题，同时，还要会[问聪明的问题](http://catb.org/~esr/faqs/smart-questions.html)。

## 新闻

如果你希望了解 Python 世界的最新动态，那就跟随 [Official Python Planet](http://planet.python.org) 的脚步吧。

## 安装库

[Python 库索引](http://pypi.python.org/pypi)中包含了大量开源的库，你可以在你自己的程序中使用它们。

要想了解如何安装并使用这些库，你可以使用 [pip](http://www.pip-installer.org/en/latest/)。

## 创建一个网站

学习使用 [Flask](http://flask.pocoo.org) 来创建你自己的网站。下面这些资源有助于你开始学习：

* [Flask Official Quickstart](http://flask.pocoo.org/docs/quickstart/)
* [The Flask Mega-Tutorial](http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world)
* [Example Flask Projects](https://github.com/mitsuhiko/flask/tree/master/examples)

## 图形软件

假设你希望使用 Python 来创建你自己的图形程序。这可以通过采用一个 GUI（Graphical User Interface，图形用户界面）库和它们的 Python 绑定来实现。绑定是允许你用 Python 编写你自己的程序，然后使用它们在 C 或 C++ 或其它语言写编写的库。

使用 Python 的 GUI 有许多选择：

* Kivy
  * <http://kivy.org>
* PyGTK
  * 这是 GTK+ 工具包的 Python 绑定，它是构建 GNOME 的基础。GTK+ 有许多奇怪的用法，但是你一旦习惯了使用它，就能很快的创建出你的 GUI 应用。Glade 图形界面设计工具是不可或缺的。它的文档至今仍在不断改进。GTK+ 在 GNU/Linux 下能够良好工作，但是它针对 Windows 平台的移植工作尚未完成。你可以使用 GTK+ 创建免费或专有的软件。要想开始使用，请阅读 [PyGTK 教程](http://www.pygtk.org/tutorial.html)。
* PyQt    - 这是 Qt 工具包的 Python 绑定，它是构建 KDE 的基础。 受益于 Qt Designer 与令人惊讶的 Qt 文档，Qt 十分容易使用也十分强大。如果你希望创建一款开源（GPL）软件，你可以免费使用 PyQt，不过如果你想创建专有的闭源软件，你需要购买它。从 Qt 4.5 开始你可以使用它来创建不采用 GPL 授权的软件。要想开始使用，请阅读 [PySide](http://qt-project.org/wiki/PySide)。
* wxPython
  * 这是 wxWidgets 工具包的 Python 绑定。wxPython 有一个与之相关的学习曲线。不过，它非常便携，并且可以运行在 GNU/Linux、Windwos、Mac、甚至是嵌入式平台中。有许多 IDE 可以采用 wxPython，并且包含了 GUI 设计工具，例如 [SPE (Stani's Python Editor)](http://spe.pycs.net/) 还有 [wxGlade](http://wxglade.sourceforge.net/) GUI 构建工具。你可以使用 wxPython 来创建免费或专有的软件。要想开始使用，请阅读[wxPython 教程](http://zetcode.com/wxpython/)。

### GUI 工具总结

想要了解更多的选择，可以参阅 [GuiProgramming wiki page at the official python website](http://www.python.org/cgi-bin/moinmoin/GuiProgramming)。

不幸的是，Python 没有一款标准 GUI 工具。我建议你根据你的实际情况从上面列出的工具中进行挑选。第一个因素是你是否愿意为使用任何 GUI 工具付费。第二个因素是你希望你的程序只在 Windwos 上运行，还是在 Mac 和 GNU/Linux 上运行，还是在它们三者之上都能运行。第三个因素，如果 GNU/Linux 是目标平台，那你是要做 KDE 用户还是 GNOME 用户。

有关更详尽且更全面的分析，请参阅 ['The Python Papers, Volume 3, Issue 1' (PDF)](http://archive.pythonpapers.org/ThePythonPapersVolume3Issue1.pdf) 的第 26 页。

## 各种实现

编程语言主要有两部分——语言与软件。语言是你\_如何\_编写，软件是你\_怎样\_实际运行我们的程序。

我们一直在使用 *CPython* 软件来运行我们的程序。它被成为 CPython 是因为它是使用 C 语言编写的，同时它也是\_经典的（Classical） Python 解释器\_。

还有其他软件可以运行你的 Python 程序：

* [Jython](http://www.jython.org)
  * 在 Java 平台上运行的 Python 实现。这意味着你可以在 Python 语言中使用 Java 的库与类，反之亦然。
* [IronPython](http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython)
  * 在 .NET 平台上运行的 Python 实现。这意味着你可以在 Python 语言中使用 .NET 的库与类，反之亦然
* [PyPy](http://codespeak.net/pypy/dist/pypy/doc/home.html)
  * 用 Python 编写的 Python 实现！这是一项研究项目，旨在于使其能快速且方便的改进解释器，因为解释器本身就是用动态语言编写的了（而不是采用上述三种 C、Java、C# 等动态语言来编写）。

还有其它诸如 [CLPython](http://common-lisp.net/project/clpython/)——采用 Common Lisp 编写的 Python 实现，和[Brython](http://brython.info/) ，它在 JavaScript 解释器之上实现，意味着你可以使用 Python（而非 JavaScript）编写你的 Web 浏览器（“Ajax”）程序。

上述这些实现每一种都有其大有作为的专门领域。

## 函数式编程（面向高阶读者）{#functional-programming}

当你开始编写更加庞大的程序时，你应该清楚了解更多关于使用函数的方式来进行编程，而不是我们在[《面向对象编程》章节中](/byte-of-python-chinese/14.oop.md#oop)所学习的基于类的方式进行编程：

* [Functional Programming Howto by A.M. Kuchling](http://docs.python.org/3/howto/functional.html)
* [Functional programming chapter in 'Dive Into Python' book](http://www.diveintopython.net/functional_programming/index.html)
* [Functional Programming with Python presentation](http://ua.pycon.org/static/talks/kachayev/index.html)
* [Funcy library](https://github.com/Suor/funcy)
* [PyToolz library](http://toolz.readthedocs.org/en/latest/)

## 总结

现在我们已经行至本书末尾，不过，正如人们所说，这是*昭示着开始的终结*！你现在已经是一名狂热 Python 用户，毫无疑问，你已准备好通过 Python 来解决诸多问题了。你可以开始自动化你的电脑，去做任何你以前难以想象的事情，你可以开始编写你自己的游戏，开始做更多更多的事，远不仅此。来，让我们出发吧！

***

1. 创建一个类用来表示人的信息。使用一份字典来存储人物对象，将它们的名字当作键值。使用 pickle 模块来将对象长久地存储在硬盘上。使用字典的内置方法来添加、删除或编辑地址簿中的人物。——原书注
