您的位置:首页 > 编程语言 > Python开发

Python学习笔记——基础知识

2016-08-29 01:03 676 查看
最近学习了一下Python,看了廖雪峰的教程,地址:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

以下内容记录了学习过程中觉得比较重要的点,或者需要经常查阅的东西。

1. 官网下载地址

https://www.python.org/downloads/

2. 字符串

字符串可以用单引号或双引号括起来;

如果内容中又有单引号,也有双引号,可以使用转义(\);

如果字符串不需要转义,可以在字符串前面加上r,如r'\\\t\\';

多行字符串可以使用'''...''',同时前面也可以加上r。

replace()可替换字符。

关于字符串的编码看这里:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000

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. 单元测试

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191629979802b566644aa84656b50cd484ec4a7838000

18. 正则表达式

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193331387014ccd1040c814dee8b2164bb4f064cff000

re模块:

re的match()方法判断是否匹配,匹配成功返回一个Match对象,失败返回None。

如果定义了分组,re的group()方法可以提取子串,其中group(0)是原始字符串。

正则匹配默认使用的是贪婪匹配,加上一个?可以转换为非贪婪匹配。

为提高效率,可以提前编译,多次使用。re的compile()方法实现了该功能,编译后生成Regular Expression对象(SRE_Pattern)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python