4. Python基础速览

Python是一门简单易学且功能强大的编程语言,本章将简单浏览下Python的基础语法,详细可以看参考文档。

4.1. 注释

Python中单行注释以 # 开头,多行可以用多个 # 号,还有 '''""",例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 这是注释

'''
这也是注释
'''

"""
这还是注释
"""
print ("Hello!")

4.2. 缩进

python是使用缩进来表示代码块,缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数,否则会导致运行错误。实例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#for循环
for i in range(5):
    print("in")
print("out")

# 输出结果
in
in
in
in
in
out

4.3. 变量和数据类型

Python中的变量和变量类型不需要声明,是动态的,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建,而变量的类型由赋予它的值来决定。例如:

1
2
3
4
5
6
 a = 10             # 整型变量
 print(type(a))
 a = 10.0           # 浮点型变量
 print(type(a))
 a = "test"         # 字符串
 print(type(a))
1
2
3
4
 # 输出
 <class 'int'>
 <class 'float'>
 <class 'str'>

Python中常见几种标准数据类型: 不可变数据:Number(数字)、String(字符串)、Tuple(元组); 可变数据:List(列表)、Dictionary(字典)、Set(集合)。下面简单列举几种:

4.3.1. String(字符串)

Python中的字符串(无字符类型)用单引号 '' 或双引号 "" 括起来,一些特殊字符使用反斜杠 \ 转义。例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 #!/usr/bin/python3
 str0 = 'Python'

 '''
 字符串索引和截取
 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
   0   1   2   3   4   5   (从前面开始索引)
  -6  -5  -4  -3  -2  -1   (从后面开始索引)
 :   1   2   3   4   5   : (从前面开始截取)
 :  -5  -4  -3  -2  -1   : (从后面开始截取)
 '''
 print (str0)          # 输出整个str0字符串
 print (str0[0])       # 输出字符串第一个字符
 print (str0[-6])      # 输出字符串第一个字符
 print (str0[:])       # 整个str0字符串
 print (str0[2:])      # 输出从第三个开始后的所有字符
 print (str0[:-2])     # 输出从第一个到第四个所有字符
 print (str0 * 2)      # 输出字符串两次,也可以写成 print (2 * str0)
 print (str0 + "TEST") # 连接字符串

字符串可以被索引或者截取,但是索引是不可以修改,重新赋值等。

4.3.2. List(列表)

列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。 列表是写在方括号 [ ] 之间、用逗号分隔开的元素列表。与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 #!/usr/bin/python3

 list0 = [ 'python', "test", 10, 10.0 ]
 list1 = [ 123, 'Python' ]

 print (list0)            # 输出完整列表
 print (list0[0])         # 输出列表第一个元素
 print (list[1:3])        # 从第二个开始输出到第三个元素
 print (list[2:])         # 输出从第三个元素开始的所有元素
 print (tinylist * 2)     # 输出两次列表
 print (list0 + list1)    # 连接列表

4.3.3. Tuple(元组)

Python的元组与列表类似,不同之处在于元组的元素不能修改。 元组使用小括号 ( ),列表使用方括号 [ ]。 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

使用举例:

1
2
3
4
5
6
7
 #!/usr/bin/python3

 tup1 = ('Pyrhon', 'Test', 1997, 2000)
 tup2 = (1, 2, 3, 4, 5, 6, 7 )

 print ("tup1[0]: ", tup1[0])
 print ("tup2[1:4]: ", tup2[1:5])

4.4. 流程控制相关

4.4.1. 条件控制

Python条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 #!/usr/bin/python3

 # 数字猜谜游戏
 number = 20
 guess = 0
 print("数字猜谜游戏!")
 while guess != number:
     guess = int(input("请输入你猜的数字(0-100):"))

     if guess == number:
         print("恭喜,你猜对了!")
     elif guess < number:
         print("猜的数字小了...")
     elif guess > number:
         print("猜的数字大了...")

4.4.2. 循环语句

Python中的循环语句有 for和while。例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 #!/usr/bin/env python3

 # 使用while求和
 n = 100
 sum = 0
 counter = 1
 while counter <= n:
     sum = sum + counter
     counter += 1

 print("1 到 %d 之和为: %d" % (n,sum))

 # 内置range()函数。它会生成数列
 for i in range(4):
     print(i)

4.4.3. 迭代

迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

例如:

1
2
3
4
5
6
 #!/usr/bin/python3

 list=[1,2,3,4]
 it = iter(list)    # 创建迭代器对象,for语句进行遍历
 for x in it:
     print (x, end=" ")

4.5. 函数

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print(),也可以用户自定义函数。

在Python中,使用 def 关键字定义函数,一般格式如下:

def 函数名(参数列表):

函数体

使用举例:

1
2
3
4
5
6
7
 #!/usr/bin/python3
 # 定义函数my_function
 def my_function(test):
     print("Hello!"+ test)

 # 使用函数my_function
 my_function(' Python')

4.6. 模块和包

4.6.1. 模块

Python提供了一个方法可以从文件中获取定义,在脚本或者解释器的一个交互式实例中使用。这样的文件被称为模块;模块中的定义可以导入到另一个模块或主模块中,使用import语句导入。

例如:

1
2
3
4
5
6
7
8
 #!/usr/bin/python3

 # 使用python标准模块: sys,使用import语句
 import sys
 print('\nPython 环境路径:', sys.path)

 #使用from … import 语句
 from periphery import I2C

4.6.2.

包是一种管理Python模块命名空间的形式,采用”点模块名称”。

比如一个模块的名称是A.B,那么他表示一个包A中的子模块B。 就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。

包的安装下载可以参考下前面 安装python 章节。

4.7. 虚拟环境

Python应用程序通常会使用不属于标准库包和模块,有时会需要特定版本的包或者模块,因为应用程序可能需要修复特定错误,或者应用程序使用的库接口是以前版本。 例如:如果应用程序A需要模块的版本1.0,而应用程序B需要版本2.0,则这些需求发生冲突,安装版本1.0或2.0将导致一个应用程序无法运行,这个问题可以通过创建一个虚拟环境来解决。

虚拟环境会创建一个自包含的目录树,其中包含用于特定版本Python的Python安装,以及许多附加包。不同的应用程序可以使用不同的虚拟环境,安装不同版本的包和模块。

Python 从3.3版本开始,自带了一个虚拟环境venv,安装venv使用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 # 安装虚拟环境
 cat@lubancat:~$ sudo apt-get install python3-venv

 # 创建并进入project-test目录,然后创建一个独立的Python运行环境:test_env
 cat@lubancat:~$ mkdir project-test && cd project-test
 cat@lubancat:~/project-test$ python3 -m venv .test_env

 cat@lubancat:~/project-test$ ls -al
 total 12
 drwxr-xr-x  3 cat cat 4096 Dec  7 10:38 .
 drwxr-xr-x 17 cat cat 4096 Dec  7 10:38 ..
 drwxr-xr-x  6 cat cat 4096 Dec  7 10:38 .test_env
 cat@lubancat:~/project-test$

 # 激活进入环境
 cat@lubancat:~/project-test$ source .test_env/bin/activate
 (.test_env) cat@lubancat:~/project-test$
 (.test_env) cat@lubancat:~/project-test$ pip list
 Package       Version
 ------------- -------
 pip           18.1
 pkg-resources 0.0.0
 setuptools    40.8.0
 (.test_env) cat@lubancat:~/project-test$

 # 导出当前虚拟环境的包和模块版本号
 (.test_env) cat@lubancat:~/project-test$ pip3 freeze > requirements.txt
 # 安装需求的包和模块版本号
 (.test_env) cat@lubancat:~/project-test$ pip3 install -r requirements.txt

 # 退出环境
 (.test_env) cat@lubancat:~/project-test$ deactivate
 cat@lubancat:~/project-test$

更多虚拟环境相关知识,可以搜索下virtualenv, venv和pipenv关键字。