最近学习了一下Python,看了廖雪峰的教程,地址:
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
以下内容记录了学习过程中觉得比较重要的点,或者需要经常查阅的东西。
1. 官网下载地址
https://www.python.org/downloads/
2. 字符串
字符串可以用单引号或双引号括起来;
如果内容中又有单引号,也有双引号,可以使用转义(\);
如果字符串不需要转义,可以在字符串前面加上r,如r'\\\t\\';
多行字符串可以使用'''...''',同时前面也可以加上r。
replace()可替换字符。
关于字符串的编码看这里:
Python 3版本中字符串是以Unicode编码的(直接支持多语言),对于单个字符的编码,ord()函数可以获取字符的整数表示,chr()函数可以把编码转换成对应的字符。
字符串在网络上传输,或保存到硬盘上,需要把str变为以字节为单位的bytes。Python对bytes类型数据用b开头的带单引号或双引号表示。
str通过encode()方法可以编码为指定编码的bytes,反之可以通过decode()方法。
计算长度可以使用len()方法。
为了指定编码,通常在文件头有下面两行内容:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是告诉LInux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是告诉编译器,按照UTF-8编码读取源码。
格式化:%s - 字符串,%d - 整数,%f - 浮点数,%x - 十六进制整数。格式化整数和浮点数还可以指定是否补0和整数与小数的位数(与C语言类似)。
注:如果字符串中的%是普通字符串,使用%%来表示。
格式化使用方式:
print('I bought %d red pen(s) and %d blue pen(s) with %%50 off.' % (1, 2))
3. 布尔值
Python大小写敏感,对应的布尔值是True和False。运算是and,or和not。
4. 空值和变量赋值
Python中用None表示空值。
变量赋值支持多变量同时赋值,可方便实现交换参数的功能:
a, b = 1, 2
a, b = b, a
# a=2, b=1
5. 除法
Python中两种除法,一种是计算结果是浮点数(即使两个整数恰好整除),符号是(/);
另一种称为地板除,结果只取整数部分,符号是(//)。
6. 列表list
可以不同数据类型,表示方式:
['obj1', 'obj2', 3]
索引从0开始,负数表示倒数(如-1表示最后一个)。
len()可以获取大小。
append()追加元素到末尾。
insert()插入元素到指定位置。
pop()删除并返回末尾的元素,可带参数指定位置。
把某个位置元素替换,可带索引直接赋值,如:arr[1] = 'a'。
7. 元祖tuple
tuple与list非常类似,但是一旦初始化后就不能修改。表示方式:
('a', 'b', 3)
注意:只有一个元素的tuple需要加上一个逗号,避免引起歧义。
8. 条件判断
条件判断采用if...elif...else结构,后面跟上冒号,语句块使用缩进来表示。
9. 输入
使用input()可以获取输入,默认类型是str,可以通过int()转成整数。
可在input()中带上参数,运行时命令行上会打印出来,作为提示。
10. 循环
for...in循环,可以遍历list或tuple。
range()可以生成整数序列,默认从0开始,采用左闭右开。
list()可以将序列转为列表。
还有一种是while循环。
两种循环后面都要有冒号,代码块缩进表示。
11. 字典dict
在其他语言中也称为map,使用key-value存储。
定义方式:
{'a': 1, 'b':2}
也可以通过key赋值,由于一个key只能对应一个value,当重复时,后面的会把前面的覆盖掉。
当key不存在时,会报错。避免方法:通过in判断,或使用dict的get()返回None或指定的默认值。
dict的pop()可以删除key,返回对应的value。
dict是无序的。
dict的key必须是不可变对象。
12. 集合set
不重复的key的集合。
通过list可创建set,如下:
set([1, 2, 3])
通过add()可以添加元素。
通过remove()可以删除元素。
set是无序的。
set不可放入不可变对象。
set可以与另一个集合进行交集(&)、并集(|)等操作。
13. 函数
可通过help(xxx)查看xxx函数的说明。
Python内置了数据转换函数:int(),str(),float(),bool()。
函数名其实是指向一个函数对象的引用,可以进行赋值。
定义函数使用def语句,依次写出函数名、括号、括号中的参数和冒号,函数体缩进书写,返回值使用return。
如果要定义一个什么都不做的空函数,可以使用pass语句。pass可以用作占位符。
数据类型检查可以使用isinstance()实现,第二个参数是一个tuple。
函数可以一次返回多个值(其实是一个tuple,但括号可以省略)。
默认参数:必选参数在前,默认参数在后。定义时直接赋默认值。调用时可以不按顺序提供部分默认参数,此时需要制定参数名。默认参数必须指向不可变对象,避免埋坑!
def pow(x, n=2):
pass
可变参数:在参数前加上星号就变为可变参数,可传入任意参数(包括0个)。list或tuple可通过在前面加上星号,作为可变参数传进函数。
def calc(*numbers):
pass
关键字参数:在参数前加上两个星号就变为关键字参数,可传入任意个(包括0个)。dict可通过在前面加上两个星号,作为关键字参数传进函数。
def person(name, age, **kw):
pass
命名关键字参数:在关键字参数的基础上,限制传入的参数名字。参数使用一个星号分隔,星号后面的参数视为命名关键字参数。调用时需指定key。如果函数定义中已经有了一个可变参数,后面就不需要用星号分隔了。
def person(name, age, *, city, job):
pass
def person(name, age, *args, city, job):
pass
person('Jack', 25, city='beijing', job = 'engineer')
参数定义的顺序:必选参数,默认参数,可变参数,命名关键字参数,关键字参数。
def func(name, age=20, *args, city, **kw):
pass
*args和**kw是Python的习惯写法,任意函数都可以通过类似func(*args, **kw)的形式调用它。
14. 异常处理
格式:
try:
# 语句块
except Exception1 as e:
# 异常处理
except Exception2 as e:
# 异常处理
else:
# 没有发生异常时会执行,可选
finally:
# 不管是否异常都会执行,可选
Python的所有错误都是从BaseException类派生的,常见错误和继承关系:
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
raise语句可以将错误抛出。
15. 断言
写法类似:
assert n != 0, 'n is zero!'
运行时,如果断言失败,会抛出AssertionError。
在启动命令中添加-O参数,可以关闭禁言。
16. 日志
logging模块可以记录错误信息:
import logging
logging.basicConfig(level=logging.INFO)
logging.info('test')
17. 单元测试
18. 正则表达式
re模块:
re的match()方法判断是否匹配,匹配成功返回一个Match对象,失败返回None。
如果定义了分组,re的group()方法可以提取子串,其中group(0)是原始字符串。
正则匹配默认使用的是贪婪匹配,加上一个?可以转换为非贪婪匹配。
为提高效率,可以提前编译,多次使用。re的compile()方法实现了该功能,编译后生成Regular Expression对象(SRE_Pattern)。