一、安装Python 3.6
目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的,因为现在Python正在朝着3.x版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行,所以,目前有许多第三方库还暂时无法在3.x上使用。另外在CentOS 6系统上Python的版本默认是2.6,但是在CentOS 7或Debian 8系统上默认的版本是Python 2.7。所以如果你是在CentOS 6上运行Python 2.7编写的程序可以选择编译安装Python 2.7;如果你是在CentOS 7上运行Python 3.6编写的程序可以选择编译安装Python 3.6,强烈推荐使用Python 3.x系列,很多新特性更方便编程。Python 2.x版本到2020年就不再维护了。
编译安装Python 3.6(本机所带的Python不要卸载系统依赖)安装依赖
yum install readline-devel gcc openssl-devel
安装Python
$ tar xf Python-3.6.4.tar.xz $ cd Python-3.6.4 $ ./configure $ make $ make install
默认安装到了/usr/local/bin目录下,所以一般就可以直接使用了。
$ python3 Python 3.6.4 (default, Apr 23 2018, 12:05:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
安装**IPython**编译安装的Python版本会默认安装pip包管理工具。所以,我们可以直接使用pip安装ipython。
pip3 install ipython
安装后会在/usr/local/bin/下产生一个程序ipython3。
二、Python程序的运行环境
交互式在Python的交互式命令行写程序好处是一下就能得到结果;坏处是没法保存下次还想运行的时候还得再敲一遍,代码如下:
>>> print("Hello world!") Hello world!
文本模式使用文本编辑器来写代码,写完保存为一个文件后缀为.py的这样一个程序就可以反复运行了,代码如下:
$ cat test.py #/usr/bin/env python # -*- coding: utf-8 -*- print('Hello world!')
运行程序
$ python test.py
PS: windows下绝对不能用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。
交互式与文本模式的区别1)直接输入python
进入交互模式,相当于启动了Python解释器,但是等待你一行一行地输入源代码,每输入一行就执行一行。2)直接运行.py
文件相当于启动了Python解释器,然后一次性把.py
文件的源代码给执行了,你是没有机会输入源代码的。3)用Python开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证,事半功倍。
三、Python标识符
所谓的标识符就是对变量、常量、函数、类等对象起的名字。首先必须说明的是,Python语言在任何场景都严格区分大小写!
在Python里,标识符有字母、数字、下划线组成。在Python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
Python中的标识符以下划线开头的标识符是有特殊意义的。以单下划线开头 “_foo” 代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用from xxx import * 而导入;以双下划线开头的 “foo” 代表类的私有成员;以双下划线开头和结尾的 “foo” 代表Python里特殊方法专用的标识,如 init__()代表类的构造函数。
还有一些非强制,但大家默认的代码规范,比如:
-
变量名用小写、常量名用大写。
-
函数和方法名用小写加下划线。
-
类名用大写驼峰。
-
模块和包的名字用小写。
-
变量的命名不要用关键字和内置函数的名字。
四、Python注释信息
我们写的程序里,不光有代码,还要有很多注释。注释有说明性质的、帮助性质的,它们在代码执行过程中相当于不存在,透明的,不参与任何工作。但在代码维护、解释、测试等等方面,发挥着不可或缺的重要作用。每一位程序员都要尽量写出高质量的注释。具体的注释专题,有大量的高水平文章和论述,请自行搜索并学习。这里,我们只讨论Python中注释的方法。
Python中单行注释采用#开头,可以从一行的任何地方开始。
#!/usr/bin/python # -*- coding: UTF-8 -*- # 第一个注释 print("Hello, Python!";) # 第二个注释
Python中多行注释,其实Python没有真正意义上的多行注释(块注释)语法,你只能在每行的开头打上#号,然后假装自己是个多行注释。
# 第一行注释 # 第二行注释 # 第三行注释 def func(): print("Hello, Python")
Python中的文档注释,在某些特定的位置,用三引号包括起来的部分,也被当做注释。但是,这种注释有专门的作用,用于为doc提供文档内容,这些内容可以通过现成的工具,自动收集起来,形成帮助文档。比如,函数和类的说明文档。
#!/usr/bin/python # -*- coding: UTF-8 -*- def fun(a, b): """ 这个是函数的说明文档。 :param a: 加数 :param b: 加数 :return: 和 """ return a + b
然后就可以使用fun.doc打印帮助文档说明了。
五、Python代码块
学习Python与其他语言最大的区别就是,Python的代码块不使用大括号{}来控制类,函数以及其他逻辑判断。Python最具特色的就是用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行,否则会造成语法错误。
PEP8(Python官方的代码规范):建议使用四个空格作为缩进!在文本编辑器中,需要设置把Tab自动转换为4个空格,确保不混用Tab和空格。在Pycharm中:tab键被自动转换成4个空格的缩进。linux环境中,如vim编辑器,请一定使用空格,不要使用tab键,tab不等于空格;或者通过配置把tab转换为空格!
以下代码由于缩进不统一将会执行错误:
#!/usr/bin/python # -*- coding: UTF-8 -*- if True: print("Answer") print("True") else: print("Answer") print("False") # 没有严格缩进,在执行时会报错;
执行以上代码,会出现如下错误提醒:
$ python test.py File "test.py", line 5 if True: ^ IndentationError: unexpected indent
IndentationError: unexpected indent错误是Python编译器是在告诉你“Hi,老兄,你的文件里格式不对了,可能是tab和空格没对齐的问题”,所有python对格式要求非常严格。如果是IndentationError: unindent does not match any outer indentation level错误表明,你使用的缩进方式不一致,有的是tab键缩进,有的是空格缩进,改为一致即可。
因此,在Python的代码块中必须使用相同数目的行首缩进空格数。建议你在每个缩进层次使用 单个制表符 或 两个空格 或 四个空格 , 切记不能混用。
六、Python语句
Python一行通常就是一条语句,一条语句通常也不会超过一行。其实,从语法层面,Python并没有完全禁止在一行中使用多条语句,也可以使用分号实现多条语句在一行,比如:
>>> import os; os.name 'posix'
上面这一行其实包含2条语句,用分号分隔了,但是强烈建议不要这么做,这样会导致代码阅读困难、维护耗时,容易出错,老老实实地用两行来表示。
前面是多条语句在一行,但如果一条语句实在太长,也是可以占用多行的,可以使用反斜杠()来实现多行语句:
string = "Hello, \ World!"
在 [], {}, 或 () 中的多行语句,可以不需要使用反斜杠(),直接回车,接着写。例如:
conn = MySQLdb.connect( host = '127.0.0.1', port = 3306, user = 'root', passwd = '', db = 'test' )
PEP8建议:每一行的字符不超过79个。
七、pass语句
pass语句是占位语句,它什么都不做,只是为了保证语法的正确性而写。以下场景中,可以使用pass语句:
-
当你不知道后面的代码怎么写的时候
-
当你不需要写代码细节的时候
-
当语法必须,又没有实际内容可写的时候
-
其它的一些你觉得需要的场景
举个例子:
def fun(a,b,c): pass
当不知道这个函数该怎么写的时候就可以用pass,如果函数体内什么都没有又会报错。一般在类继承时用的较多。
八、空白字符与空白行
空白行、空白字符与代码缩进不同,并不是Python语法的一部分。空行或者空白字符会被当做空气一样的忽略。连续的空行或空白字符和单独的空白行几字符没有区别。书写时不插入空白行或空白字符,Python解释器运行也不会出错。但是空白的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
PEP8对于空行留白有专门的建议。
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
变量赋值的时候等号左右各给一个空白。逗号后面跟一个空白。
看下面的代码,作为标准的代码规范,在规定的地方留有规定的空白行和空白字符。
#!/usr/bin/env python # -*- coding:utf-8 -*- class Foo: pass def fun(a, b): pass if __name__ == '__main__': pass
九、字符串的表现形式
字符串,表示一段连续的字符,可以是有意义的单词、词组、语句,也可是无意义的字符组合。不在于它内部是由什么组成的,而在于它是否被引号引起来的。
比如, abc
可能是个变量,但是"abc"
肯定是个字符串!(强调,代码的世界没有中文标点,所有的符号类型都是英文半角!千万不要搞错了!)
在Python中可以使用引号( ‘ )、双引号( ” )、三引号( ”’ 或 “”” ) 来表示字符串,引号的开始与结束必须的相同类型的。其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。
word = 'word' sentence = "这是一个句子." paragraph = """这是一个段落. 包含了多个语句"""
Python中单引号和双引号的作用完全相同。但是注意:在其它语言中双引号引起来的才是字符串,单引号引起来的是字符!例如C,例如Json!所以很多同学在做Json格式转换时,经常发生使用单引号,导致转换失败的问题。
十、转义与非转义字符
编程语言里,有很多特殊字符,它们起着各种各样的作用。有些特殊字符没有办法用普通字符表示,需要进行转义。Python用反斜杠()转义字符。如下表:
转义字符 | 描述 |
---|---|
\(在行尾时) |
续行符 |
\\ |
反斜杠符号 |
\' |
单引号 |
\" |
双引号 |
\a |
响铃 |
\b |
退格(Backspace) |
\e |
转义 |
\000 |
空 |
\n |
换行 |
\v |
纵向制表符 |
\t |
横向制表符 |
\r |
回车 |
\f |
换页 |
\oyy |
八进制数,yy代表的字符,例如:\o12 代表换行 |
\xyy |
十六进制数,yy代表的字符,例如:\x0a 代表换行 |
\033 |
颜色控制 |
如:
>>> print('I\'m sorry') I'm sorry
上面说了Python中转义是如何使用,当然也就有对应的非转义使用方式了。
rr'' #不转义;
如:
>>> print(r'\\\t\\') \\\t\\
十一、Python 程序基本组成结构
#/user/bin/python (起始行) "python module standard" (模块文档) import sys (模块导入) import os debug = True (全局定义变量) class TClass(object): (类定义) '''class description''' pass def Test(): (变量定义) '''function description''' foo=TClass() if debug: print("Test condition") if __name__ == '__main': (主程序) Test()
- 起始行:是用来执行脚本,无需直接调用 python 解释器。
- 模块文档:是简要介绍模块的功能及全局变量的含义。
- 模块导入:是导入已提供的内置模块或安装的第三方模块。
- 变量定义:这里定义的变量时全局变量所有函数可以直接使用的。
- 类定义语句:所有的类都需要在这里导入。但模块被导入时 class 语句会被执行、也就会被定义。
- 函数语句定义:定义函数当模块被导入时 def 语句会被执行。
- 主程序:无论这个模块是被别的模块导入还是作为脚本直接执行、都会执行这部分代码。通常这里不会有太多功能性代码。而是根据执行的模式调用不同的函数。
当 Python 解析器读取一个源文件时,它会执行所有的代码。在执行代码前,会定义一些特殊的变量。例如,如果解析器运行的模块(源文件)作为主程序,它将会把 name 变量设置成”main”,如果只是引入其他的模块,name 变量将会设置成模块的名字。
当设置完特殊变量,它就会执行 import 语句并且加载这些模块,当遇到 def 代码段的时候,它就会创建一个函数对象并创建函数名称变量指向函数对象。接下来会读取 if 语句并检查 name 是不是等于”main”,如果是的话他就会执行这个代码段。
这么做的原因是有时你需要你写的模块既可以直接的执行,还可以被当做模块导入到其他模块中去。通过检查是不是主函数,可以让你的代码只在它作为主程序运行时执行,而当其他人调用你的模块中的函数的时候不必执行。
十二、Python编程风格
1)注释:既不能缺少注释、亦要避免过度注释。
2)文档:Python允许通过 doc动态获得文档字串。
3)缩进:统一缩进4个字串。
4)标示符名称:见名知义。
5)每行长度:最多80个字符。
6)语句:一行一个避免使用;号。
十三、Python保留字符
下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。所有Python的关键字只包含小写字母。
and | exec | not |
---|---|---|
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |