如何学习Python
学好python最重要的是坚持,只有坚持可以是王道
Now is better than never,
Although never is often better than right now.
这是“Python之禅”中的一句话,意思是做也许好过不做,但不假思索就动手,还不如不做。的确,在开始学习Python之前,初学者需要先了解一些关于这门编程语言的背景知识,并在计算机上做好准备工作。
关于Python,很多教科书都把它定义为动态的、强类型的编程语言。作为初学者,大可不必深究什么是动态语言,什么是强类型语言,但必须知道的是,Python是支持面向对象编程的脚本语言,同时也原生支持面向过程式编程的范式。
这里,我绝非有意搬出面向对象和面向过程式编程的概念来给初学者一个下马威,而是因为这两个概念对于程序员来说非常重要,即便是新手也要有所了解。所谓面向过程式编程,就是根据解决问题所需要的步骤,用函数一步一步实现,最后依次调用这些函数。面向过程式编程符合人类的思维特点,容易理解,而面向对象编程就要比它抽象复杂得多。如果初学者理解面向对象编程有困难,也不用急于求成。很多概念都是在长期的编程实践中逐步建立起来的,一切都是自然而然的。
此外,初学者还需要知道,Python是脚本语言。与脚本语言相对的是编译型语言,如C语言和C++语言都属于编译型语言。编译型语言需要经过编译器编译连接之后才能运行,而脚本语言的运行则需要一个解释器而非编译器。我们常说在计算机上安装了某一个版本的Python,指的就是Python的解释器。初学者往往搞不清楚解释器和编译器分别是什么,甚至把集成开发工具理解为解释器或编译器。请务必记住,Python解释器就是一个可执行程序,运行Python代码就是在运行Python解释器,这个解释器将逐行解释、执行代码。
Python哲学
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(间隔胜于紧凑)
……
这是1989年Python创始人吉多·范罗苏姆(龟叔)开立山门之时,暗藏在内置模块this中的一首诗歌,表明了他赋予Python的哲学理念。
编码规范
说起编码规范,大多数人都会提到PEP8。PEP是Python Enhancement Proposal(Python 增强建议书)的简写。PEP8整个文档引用了很多其他的标准,很难在实践中付诸行动。好在龟叔说过,“A Foolish Consistency is the Hobgoblin of Little Minds(尽信书,不如无书)”,文档只要保持一致性、可读性,就是一个好的规范。
在Linux平台上,一个规范的Python源码文件应该包含以下部分:解释器声明、编码格式声明、模块注释(文档字符串)、模块导入、常量和全局变量定义、函数或类定义、当前脚本代码执行等7项。在Windows平台上,可以省略第一项。下面这个Python源码文件清晰展示了这7项,各项之间使用一个或两个空行进行分隔。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""通常这里是关于本文档的说明(docstring),需要以半角的句号、问号或叹号结尾!
本行之前应当空一行,继续完成关于本文档的说明
如果文档说明可以在一行内结束,结尾的三个双引号不需要换行;否则,就要像下面这样
"""
import os, time
import datetime
BASE_PATH = r»d:\YouthGit»
LOG_FILE = u»运行日志.txt"
class GameRoom(object):
"""对局室"""
def __init__(self, name, limit=100, **kwds):
"""构造函数!
name 对局室名字
limit 人数上限
kwds 参数字典
"""
pass
def craete_and_start():
"""创建并启动对局室"""
pass
if __name__ == '__main__':
# 开启游戏服务
create_and_start()
命名规范
命名规范对于提高代码的可读性非常重要。好的变量、函数或类名几乎可以代替注释。对于模块、类、函数、变量、常量的命名,建议遵循如下原则。
- 名字要尽可能精准表达所代表的对象的含义。
- 名字不要和已有的模块、类、函数或变量名重复。
- 模块名字使用小写字母命名,或首字母小写,不要用下划线。
- 类名使用驼峰(CamelCase)命名风格,首字母大写。
- 类的成员名小写,私有成员以两个下划线开头,保护成员以一个下划线开头。
- 函数名小写,如有多个单词,以下划线分隔。
- 变量名小写,如有多个单词,以下划线分隔。
- 常量名大写,如有多个单词,以下划线分隔。
缩进
强烈建议使用4个空格进行缩进,不要使用Tab键进行缩进,更不要将Tab键和空格混用。对于行连接的情况,建议使用4个空格的悬挂式缩进。
forms = {
"account": "xufive",
"redirect_uri": "download.html",
"datatime": "2020-05-18 15:00:00",
"token": "3e119d5ee907c3c1a3c22eca3c7cbfa8"
}
snow_list = [
([(0,0), (0.5,0.8660254), (1,0)], 5),
([(1.1,0.4), (1.35,0.8330127), (1.6,0.4)], 4),
([(1.1,-0.1), (1.25,0.15980761), (1.4,-0.1)], 3)
]
注释
注释是代码不可或缺的一部分,准确精练的注释是提高代码可读性的重要手段。对于代码注释,建议遵循如下原则。
- 行末注释至少使用一个空格和代码语句分开。
- #号和注释内容之间保留一个空格。
- 使用#号注释多行时,中间的空行同样需要使用#号。
- 重要的注释段,使用多个等号隔开可以更加醒目。
- 谨慎使用三引号(无论是单引号还是双引号)注释多行代码。
引号
Python语言支持单引号、双引号,以及三引号(单引号或双引号)。考虑到引号存在嵌套可能性,编码规范对引号使用几乎没有限制,但是建议遵循如下原则。
- 机器标识符(作为名字的有效字符串集合)使用单引号。
- 自然语言使用双引号。
- 正则表达式使用双引号。
- 文档字符串(DocString)使用三重双引号。
空行和空格
合理地使用空行和空格,会让代码产生节奏感,可以显著提高代码的可读性。不用担心额外的空格和空行会给解释器带来负担,解释器会自动忽略多余的空行和空格。对于空行和空格的使用,建议遵循如下原则。
- 编码格式声明、模块导入、常量和全局变量声明、顶级定义和执行代码之间空两行。
- 顶级定义之间空两行,方法定义之间空一行。
- 在函数或方法内部必要的地方可以空一行以增强节奏感,但应避免连续空行。
- 在二元运算符两边各空一格,算术操作符两边的空格可灵活使用,但两侧务必要保持一致。
- 不要在逗号、分号、冒号前面加空格,但应该在它们后面加(除非在行尾)。
- 函数的参数列表中,逗号之后要有空格。
- 函数的参数列表中,默认值等号两边不要添加空格。
- 左括号之后和右括号之前不要添加空格。
- 参数列表、索引或切片的左括号前不应加空格。
## 分享以下十点: 1)学好python的第一步,就是马上到www.python.org网站上下载一个python版本。我建议初学者,不要下载具有IDE功能的集成开发环境,比如Eclipse插件等。
2)下载完毕后,就可以开始学习了。学习过程中,我建议可以下载一些python的学习文档,比如《dive into python》,《OReilly - Learning Python》等等。通过学习语法,掌握python中的关键字语法,函数语法,数学表达式等等
3)学完了基本语法后,就可以进行互动式学习了。python具备很好的交互学习模式,对于书本上的例子我们可以通过交互平台进行操练,通过练习加深印象,达到学习掌握的目的。
4)通过以上三个步骤的学习后,我们大致掌握了python的常用方法、关键字用法以及函数语法等。接下去的学习上,我们就可以着手学习常用模块的使用, 比如os,os.path,sys,string模块等。我们可以在交互环境中先熟悉使用其中的函数,如果遇到函数的使用上的问题,可以参考python 安装后的自带chm帮助文件。
5)为了更好得掌握python,我们的学习不能只是停留在学习一些语法或者api阶段。在此阶段中,我们可以尝试用python解决我们项目中遇到的一 些问题,如果项目不是用python开发的,那我们可以想想能不能用python制作一些项目组可以使用的一些工具(utility),通过这些工具简化 项目组成员的任务,提高我们的工作效率。如果没有项目,我们也可以自己找些题目来自己练习练习。
6)经过以上锻炼后,我们的python知识水平肯定是越来越高。接下去的学习,我们就要更上一层楼。为了学以致用,真正能应用于项目开发或产品开发,我 们还必须学习企业应用开发中必须要掌握的网络和数据库知识。在此的学习就不光是python语言本身的学习了,如果之前没有学习和掌握很网络和数据库知 识,在此阶段我们可以借此机会补习一把。
7)在此,我想我们对python的使用以及信手拈来了,即使忘了api的用法,我们也可以在短时间内通过查看文档来使用api。那么接下去,我们要学习 什么呢?那就是设计能力,在学习设计能力的过程中,如果对类等面向对象的概念不清楚的,在此阶段也可以学习或加以巩固。就像飞机设计师设计飞机通过学习模 型来设计一样,我们也可以通过学习书上的经典例子来学习设计。等有了设计的基本概念后,我们就可以着手设计我们的程序了。在此阶段中,我们重要的是学习抽 象的思想,通过隔离变化点来设计我们的模块。
8)到此阶段,我们已经是真正入门了。在接下去的工作中,就是要快速地通过我们的所学来服务项目了。在此阶段,我们除了掌握python自带的模块外,我 们最好在掌握一些业界广泛使用的开源框架,比如twisted、peak、django、xml等。通过熟练使用它们,达到闪电开发,大大节省项目宝贵时 间。
9)你已经是个python行家了,在此阶段,我们在工作中会遇到一些深层次的、具体的困难问题。面对这些问题,我们已经有自己的思考方向和思路了。我们 时常会上网观看python的最新发展动态,最新python技术和开源项目,我们可以参与python论坛并结交社区中一些python道友。
10)你已经是个python专家,在此阶段你应该是个python技术传播者。时不时在组织中开坛讲座,并在博客上传播你的python见解。你会上论 坛帮助同行们解决他们提出的问题,你会给www.python.org网站提出你的宝贵建议,并为python语言发展献计献策。
总结
任何知识的学习无止境,python的学习也不另外。在掌握python的用法、api和框架后,我们更要学习设计模式、开发方法论等