【Python】基础知识

Python 作为一门高级脚本语言,其最大优点就是上手快,系统库和第三库丰富,应用场景很广泛,很适合日常工作中实现一些工具。

环境

配置环境变量

Python 是一门很高级的脚本语言,不用编译,解释运行。Python 使用简单,有很多封装好的库,但运行效率很慢。Python 主要应用于网站后台,游戏后台,还有很多系统工具,Python 是程序员日常开发自动化工具首选的脚本语言。

Python 目前有两个大版本,Python2.x 和 Python3.x,这两个版本的差别挺大的,本系列文章基于 Python3

安装 Python 很简单,从官网下载之后安装,把安装根目录添加到环境变量 path,就可以在命令行直接运行 Python 命令。

安装完 Python 还需要安装一个 Python 的自动包管理工具 pip。从 这个地址 下载 pip 的官方安装脚本 get-pip.py,然后打开命令行,输入 Python get-pip.py,这个过程会自动下载并安装,除了 pip 还会自动下载并安装 setuptools 和 wheel 这两个包。pip 安装完成之后会在 Python 的安装目录下创建一个 Scripts 文件夹,pip 和其它安装的包都在这个目录下,把 Scripts 这个路径添加到环境变量,就可以直接在命令行运行 pip 命令或其它命令。

配置开发环境

开发环境因人而异,比较流行的 Python IDE 是 Pycharm,但我不想装太多 IDE,所以想用文本编辑器来做开发。我个人比较喜欢 Visual Studio Code,它像其它编辑器一样轻量,又可以通过不同的插件来实现 IDE 一样的功能,代码提示和断点调试。首先装一个 Python 的调试插件,在扩展工具那里搜 Python,安装第一项即可,这是微软官方提供的一个插件,也可以通过 这个地址 下载。

接下来通过 pip 工具安装三个常用的包,

  • pip install pylint 安装 pylint 工具,这个工具用于检查源代码中的错误和不符合规范的地方;
  • pip install flake8 安装 flake8 插件,也用于检查代码中的错误或不规范的地方。要开启或关闭这个插件,只需要在用户配置或工作区配置中进行设置即可;输入 ctrl+shift+p 打开 vs code 的命令窗口,然后输入 workspace settings 可以打开工作区设置,输入 user settings 可以打开用户设置,工作区设置只针对当前的工作区(打开的文件夹),用户设置针对所有工作区,这几个设置的优先级是工作区设置会覆盖用户设置,用户设置覆盖默认设置。打开工作区设置或用户设置之后,添加 "python.linting.flake8Enabled": true 就可以开启 flake8,如果要关闭改为 false 即可,或者删掉(因为默认设置就是关闭的);
  • pip install yapf 安装 yapf 插件,用于格式化代码,安装完 yapf 并启用之后,就可以使用 vs code 默认的快捷键 alt+shift+f 来格式化代码。打开工作区设置或用户设置,添加 "python.formatting.provider": "yapf" 就可以启用 yapf,要关闭则改为 none 或者其它的格式化插件。

Python 解释器

Python 解释器用于解释执行 Python 源代码,在命令行中输入 Python xx.py 就可以解释执行某个 Python 源文件,这个 Python.exe 就是 Python 的解释器。Python 安装完之后默认会有一个 GUI 工具 Python IDLE 和一个命令行工具 Python Comand Line,运行 GUI 工具或者命令行工具,或者在 cmd 中输入 Python 命令,都可以打开 Python 解释器的交互环境。解释器交互环境以 >>> 为标志,在交互环境下每输入一条语句都会被立即解释执行,每条语句如果有返回结果都会输出,可以将 Python 解释器当作一个简单的计算器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> print "hello world"
hello world
>>> 3 * 5
15
>>> 4 & 5 | 10
14
>>> a = 1024 * 1024
>>> print a
1048576
>>> a + 1
1048577
>>> import math
>>> math.pow(2, 10)
1024.0

退出 Python 交互环境使用 exit 函数即可,输入 exit() 即可返回到命令行或者关闭 Python IDLE 或 Python Command Line。

输入与输出

输出 print

和大多数语言一样,Python 使用 print 作为输出的关键字,在 2.x 中 print 只是一个关键字,但到了 3.x print 是一个函数了,所以 2.x 的 print 的用法是 print message,而 3.x 的用法是 print(message),当然 2.x 加上括号也可以,但这个括号不是函数调用的意思,只是单纯的把一个表达式括起来而已,但 3.x 必须有括号,这个括号表示这是一个函数调用。

基本输出

print 可直接输出字符串、数字、布尔值、列表、字典等所有数据类型,也可以在参数里写上表达式,print 会输出表达式计算后的结果。

1
2
3
4
5
6
7
8
9
10
11
12
#output all datatype
print("hello world")
print(500)
print(True)
print((1, 2, 3))
print(['x', 'y', 'z'])
print({'a': 10, 'b': 20})

# output expression
print(16 * 16)
print(100 == '100')
print(100 == 100)

运行结果:

1
2
3
4
5
6
7
8
9
hello world
500
True
(1, 2, 3)
['x', 'y', 'z']
{'a': 10, 'b': 20}
256
False
True

输出参数

print 可以一次性输出多个数据,用逗号隔开即可,如 print(1, 2);print 输出多个数据时默认用空格隔开,也可以使用 sep 自定义间隔符,如 print(1, 2, sep = '-');print 默认以回车为结束符,即打印完数据之后都会换行,可以使用 end 参数自定义结束符,如 print(1, end = '')

1
2
3
# output param
print('a', 'b', end=' | ')
print(True, False, sep='->')

运行结果:

1
a b | True->False

格式化输出

Python 的 print 不像 c 语言中的 printf 一样死板,而是像 c++ 中的 cout 一样智能,无论什么数据类型的数据都可以直接输出;但 Python 的 print 也可以像 c 语言中的 printf 一样格式化输出,用法基本与 c 语言一样,只是写法不大一样,Python 格式化输出的变量必须放在 %() 里面,如 print("%d %d" %(var1, var2))

1
2
3
4
5
6
# format output
var = 0x101
print("%d, %i, %u, %o, %x, %X, %f, %F, %g, %G, %e, %E" %
(var, var, var, var, var, var, var, var, var, var, var, var))
var = 3.14
print("%-10.3f,%010.5f" % (var, var))

%d、%i 以有符号十进制数输出,%u 以无符号十进制数输出,%o 以八进制数输出,%x(X) 以十六进制输出,%f(F) 以浮点数输出,%e(E) 以科学计数法输出浮点数,%g(G) 为自动格式判断。以浮点数输出时,%m.nf 的格式表示输出宽度为 m 位,保留 n 位小数,如果数据长度不足 m 位,则默认在前面补上空格;使用 %0m.nf 可修改补位符为 ‘0’,也可以修改成其它补位符;默认为右对齐,即补位符加在数据的前面,使用 %-m.nf 可修改为左对齐。运行结果如下:

1
2
257, 257, 257, 401, 101, 101, 257.000000, 257.000000, 257, 257, 2.570000e+02, 2.570000E+02
3.140 ,0003.14000

print("%d %d" %(var1, var2)) 这是 2.x 的写法,3.x 兼容了这种写法,也提供了一种更好的写法,使用格式化输出函数 format() 将输出数据括起来,然后参数占位符使用和 c# 类似的 {0},当然也可以使用上面的这些格式,如 {0:%f}

1
2
3
4
VAR = 3.1414926
print("{0:0.3f},{1:0.4f}".format(VAR, VAR))
print("{0},{1}".format("hello", "world"))
print("{0[0]},{0[1]},{1}".format(["hello", "world"], "!"))

占位符使用 {下标},如果要有格式则使用 {下标:格式},后面使用 .format(数据),记住不能少了这个点。运行结果如下:

1
2
3
3.141,3.1415
hello,world
hello,world,!

输入 input

Python2.x 中有两个函数用于接收用户收入,raw_input 和 input;raw_input 将所有输入都当作字符串处理,因此任何输入它都能全盘接收,而 input 希望读取到一个合法的表达式,所以字符串要加上引号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> raw_input("raw_input:")
raw_input:hello
'hello'
>>> raw_input("raw_input:")
raw_input:100
'100'
>>> input("input:")
input:100
100
>>> input("input:")
input:'hello'
'hello'
>>> input("input:")
input:hello
NameError: name 'hello' is not defined
>>> hello = 'hello'
>>> input("input:")
input:hello
'hello'

可以看到,raw_input 无论接收到的输入是字符串还是数字,都会保存为字符串;而 input 则根据输入的数据的类型来保存,所以输入数字得到的结果就是数字,而输入字符串时要加上引号,不加引号 input 会将其识别为表达式,在这里的 hello 也就是被识别成变量名了。input 其实是对 raw_input 的二次封装,它可以输入一个表达式,结果是表达式计算后的结果;官方的建议是除非有特别的需求,否则不要使用 input,而是要使用 raw_input,因此到了 3.x 就把 input 去掉了,只保留了 raw_input 并改名为 input,也就是说 3.x 的 input 其实就是 2.x 的 raw_input。

1
2
3
4
5
>>> input("please input a string:")
please input a string:hello
'hello'
>>> raw_input()
NameError: name 'raw_input' is not defined

其它

行与缩进

Python 的每条语句独占一行,不需要分号或其它标点符号作为结束符,如果想在同一行写多条语句,就需要用分号将每条语句隔开;虽然将多条语句写成一行不会有语法错误,但很不规范,最好不要这么写。

1
2
#print("hello") print(" world") #wrong
print("hello", end=''); print(" world", end='')

有时候一条语句太长写在一行太难看,可以分成几行来写,使用反斜杠 \ 就可以实现。

1
2
3
total = 10 + \
11 + \
12

在 () [] {} 中的多行语句,则不需要 \。

1
2
t = {"apple", "pear", 
"banana", "orange"}

Python 不使用花括号 {} 或者 end 等关键字来定义代码块,而是使用缩进,所以 Python 里面的缩进不仅是为了代码整洁好看,而是有语法要求的,缩进不正确是会报语法错误的。

1
2
3
4
#if True:
#print("done") #error
if True:
print("done")

注释与字符串

  • 单行注释使用 #,多行注释使用三引号 ‘’’ 或 “””,单行注释的规范是 # 后面要空一格;
  • 字符串可以使用单引号、双引号和三引号,三引号用于多行字符串,多行注释其实就是一个字符串;
  • Python 字符串变量的值不能修改,操作字符串会创建一个新的字符串;
  • 在字符串前面加 r 或 R,表示这是一个原始(raw)字符串,即不解析转义字符;
  • 在字符串前面加 u 或 U,表示这是一个 Unicon 字符串。
1
2
3
4
5
6
7
8
9
10
#string
str1 = 'word'
str2 = "this is a word"
str3 = """this is a very
very very long word"""
'''
raw string
'''
print("hello\nworld")
print(r"hello\nworld")

首行规则

一个 py 文件首行必须指明使用的编码,如果是 Unix 类系统,py 文件是可以直接运行的,跟 Shell 脚本一样,所以首行指明 Python 的安装路径,第二行才是编码。

1
2
#!/user/bin/env python3
# -*- coding:utf-8 -*-