# book-language-python **Repository Path**: shouce/book-language-python ## Basic Information - **Project Name**: book-language-python - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-07-04 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python ![logo](images/Python_logo_and_wordmark.svg.png) 差不多,我是念的“拍审”。在我出身那年(1989)有个荷兰人发明了这门语言,据说名字来自作者非常喜欢的一部喜剧,这个单词有蟒蛇的意思,所以很多与 Python 有关的地方(比如说开发工具,书籍)都有蛇的形象。 Python 是一门开源的语言,能够运行所有主流平台上面,包括 Linux 发行版,Mac OS,Windows 等。 官方提供的版本是使用 C 语言编写的,一般被称之为 CPython,在 Java 和 .Net 平台下也有实现,分别叫做 Jython 和 IronPython,甚至还有一个使用 Python 开发的 Python 解释器,叫做 PyPy。 Python 和我接触过的其他语言(如 C/C++/Java/PHP/JavaScript)一个非常大的不同就是他没有使用花括号来表示语句块,相反,他使用的是强制缩进。 比如说定义一个函数,在 PHP 中是这样的: ```php function foo(){ do some thing } ``` 但是 Python 中是这样的: ```py def foo(): do some thing ``` 要我说出其他的巨大差异来是非常困难的,我一向对于编程语言持中立立场,并不认为有什么语言比其他语言更棒一些,对于一个项目而言,只有最适合的。比如说,我希望开发一个论坛网站,在进行最初的设计时就决定采用 Discuz 做二次开发,那当然项目就会使用 PHP 来进行开发。再比如说,如果想做一个资料采集程序(爬虫),Python 的很多网络模块十分方便,所以可以推荐你使用 Python 来实现你需要的功能。 别的等会儿再说,先将 Python 的运行环境搭建起来再说。 ## Python 的安装与配置 Python 可以在 Windows、Mac OS、类 Unix 操作系统等平台上运行。 注:类 Unix 操作系统包括所有基于 Linux 的发行版、FreeBSD,其实 Mac OS 也应该属于这一类。 如果你使用的较新版本的 Linux 发行版或 Mac OS 系统,很有可能已经安装好了 Python 操作系统。 1. 安装 2. 添加环境变量:path-to-python、path-to-python/Scripts 有些地方说要将 python 文件后缀“.py;.pym”补充到环境变量“PATHEXT”后面才能在命令行中直接运行 Python 文件,但是实际上,我没有设置这个环境变量也可以运行 Python。 文件,而且确定了“PATHEXT”中没有加入“.py;.pym”。 3. 安装包管理工具 > Python 下的包管理工作一般使用 pip 完成。 **pip 和 easy_install** pip : https://pypi.python.org/pypi/pip easy_install : https://pypi.python.org/pypi/easy_install https://pypi.python.org/packages/source/s/setuptools/setuptools-5.4.1.zip 可以从 https://bootstrap.pypa.io 上得到安装脚本。 ## Python 的特点 1. 大小写敏感 2. 同其他动态解析语言一样,变量是不需要事先声明/定义的。 3. 书写格式的强烈要求保证代码的整洁。使用空格,制表符的规范化使用避免了使用大括号,同时一行就是一个语句,不用分号隔开。 4. 注释采用井号表示单行注释。 5. 模块化。需要使用某些功能的时候就再导入相应的模块就是了。 ### Python 格言 在 Python 解释器中运行 `import this` 就会出现以下格言(或者说原则、哲学): ```txt The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! ``` 照我的理解,简单的翻译一下: 1. 以优美为荣,以丑陋为耻; 2. 以爽快为荣,以磨叽为耻; 3. 以简洁为荣,以复杂为耻。 4. 如果功能本身就很复杂,那就让他的实现清晰易懂。 5. 程序结构尽量扁平化,不要多层嵌套,到处调用。 6. 敲代码的时候适当地留白,这不会多浪费纸张。 7. 可读性很重要。 8. 特例是可以有的,不过还是要保持一定的原则, 9. 虽然我们强调实用性比代码的纯洁更重要。 10. 错误不应该被忽略 11. 当然在十分清楚代码逻辑的前提下,你还是可以 pass 那些可以可以 pass 的错误 12. 不清楚的东西千万不要自以为是怎么样 13. 做一件事的方法最好最有一个,最好的那个, 14. 可能要一开始就找到最棒的方法并不容易,谁让你不是我(Python 之父)! 15. 马上动手比陷入未知的等待中要好得多, 16. 不过马上动手会产生更多问题,所以要小心谨慎。 17. 如果一个方案很难解释清楚,那么这个方案有问题, 18. 如果一个方案很容易理解,那么这可能是个好方案。 19. 命名空间是个好东西! 有些东西总是前后矛盾,可能是理解不深,可能是这个 Dutch 觉得世界本身是矛盾的吧! 网上看来的“八荣八耻”: ```txt 以动手实践为荣 , 以只看不练为耻; 以打印日志为荣 , 以单步跟踪为耻; 以空格缩进为荣 , 以制表缩进为耻; 以单元测试为荣 , 以人工测试为耻; 以模块复用为荣 , 以复制粘贴为耻; 以多态应用为荣 , 以分支判断为耻; 以 Pythonic 为荣, 以冗余拖沓为耻; 以总结分享为荣 , 以跪求其解为耻; ``` 发现一篇文章[《Idiomatic Python》](http://www.dongwm.com/archives/idiomatic-python/),这才发现我写的代码竟不 Pythonic 到这个地步,因为我都完全不知道有这么些用法。 不过我细想想,这个真的这么重要么?我想,性能没有明显影响的情况下,还是写一些大家都能一眼看明白的代码比较重要吧! 整洁很重要,看明白更重要。如果团队中大家能取得一致,统一风格,都知道这些特性,自然很好。否则,还是不要刻意追求 Pythonic 为好。 ## 开发环境 我比较喜欢的是 PyCharm 社区版,除此之外,还有另一种选择:Eclipse + PyDev。 两种 IDE 网上都有足够的教程教你安装配置。 ~~其实 Notepad++ 也是我另一个使用频率非常高的开发工具。~~ VSCode 真香! ## 关于本文档 本手册最开始的来源是一些随手摘抄,或者零散的学习笔记,但是后来随着时间的推移,笔记越来越多,我将相同的部分做了一些整理归纳,发现内容基本上可以覆盖自己所使用的所有 Python 知识了,遂决定干脆将其串联起来当做一本入门手册,一来系统性地复习一下所学知识,另一方面可以方便新入行的朋友做个参考。 水平有限,实在是不敢说“有经验的 Python 程序员也能从中受益”这种话,加之表述能力也不强,如果哪里有技术性错误,或者写得牛头不对马嘴,恭请指出,以便改进,本人由衷感谢!