第二章:Python基础使用

第二章:Python基础使用

一、安装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()
  1. 起始行:是用来执行脚本,无需直接调用 python 解释器。
  2. 模块文档:是简要介绍模块的功能及全局变量的含义。
  3. 模块导入:是导入已提供的内置模块或安装的第三方模块。
  4. 变量定义:这里定义的变量时全局变量所有函数可以直接使用的。
  5. 类定义语句:所有的类都需要在这里导入。但模块被导入时 class 语句会被执行、也就会被定义。
  6. 函数语句定义:定义函数当模块被导入时 def 语句会被执行。
  7. 主程序:无论这个模块是被别的模块导入还是作为脚本直接执行、都会执行这部分代码。通常这里不会有太多功能性代码。而是根据执行的模式调用不同的函数。

当 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 print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

猜你喜欢

转载自www.cnblogs.com/zhang789/p/9136808.html