python学习基础知识_Python学习(一)基础知识

参考资料:https://github.com/lijin-THU/notes-python(相应实体书为:《自学Python——编程基础、科学计算及数据分析》)

python学习基础知识_Python学习(一)基础知识_第1张图片

python学习基础知识_Python学习(一)基础知识_第2张图片

1. Python之禅:import this

Python的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:import keyword + keyword.kwlist

2. iPython使用

%lsmagic  //查看所有magic命令;line magic % 作用于一行,cell magic %% 作用于整个cell

%pylab  //导入numpy和matplotlib两个包

%matplotlib inline  //页面内嵌画图,非弹窗 + import matplotlib + import matplotlib.pyplot as plt

?  //使用 ? 查看函数的帮助,如sum?

??  //使用 ?? 查看函数帮助和函数源代码,sum??

!ping baidu.com  //使用 ! 来执行一些系统命令

_  // _ 上个cell的输出结果

%run、%timeit、%%writefile、%precision

3. Python支持链式比较:x = 2; 1 < x <= 3  输出True

4. list.append():每次只添加一个元素,并不会因为这个元素是序列而将其展开(不展开)

5. list.extend(lst):将序列lst的元素依次添加到列表list的最后,相当于list += lst

6. 数据类型

不可变类型:基本类型(整型、长整型、浮点数等)+ 复数 + 元组 + 字符串 +不可变集合(frozen set);

可变类型:列表 + 字典 + 集合 + numpy数组 + 用户自定义类型;

7. 赋值机制(02.13 how-python-assignment-works)

(1)对于简单类型而言,python会为每个出现的对象进行赋值(分配内存),哪怕它们的值是一样的;不过,为了提高内存利用效率,对于一些简单的对象,如一些数值较小的int对象,python采用了重用对象内存的办法;  //可以使用 id() 函数查看内存地址,如id(x)返回变量x的内存地址;或者使用is 来判断是不是指向同一个事物(内存地址),如 x is y 返回True或False

(2)对于容器类型而言,python给新对象赋值时,仅仅是指向同一块内存空间(不分配新内存),如 x = [500, 501, 502]; y = x;  //改变列表数据时,会分配新的内存空间给新值,而旧值则会python自动调用垃圾处理机制回收

8. 生成随机数函数:range(), xrange()  //xrange效果与range函数相同,但是xrange并不会一次性的产生所有的数据,可以节省时间和内存消耗

%timeit for i in xrange(1000000): i = i  //运行时间较快

%timeit for i in range(1000000): i = i  //运行时间较慢,一次性产生所有数据

9. 列表推导式 x = range(1000000)

%timeit total = sum([i**2 for i in x])  //运行时间较慢,python会一次性生成整个临时列表,再进行求和,临时列表会被垃圾回收机制回收

%timeit total = sum(i**2 for i in x)  //运行时间较快,类似上述xrange()

10. map方法生成序列:map(aFun, aSeq)  //将函数 aFun 应用到序列 aSeq 上的每一个元素上,返回一个列表,不管这个序列原来是什么类型

1 defsqr(x):2 return x ** 2

3

4 a = [2, 3, 4]5 print map(sqr, a)

输出:[4 9 6]

注:根据函数参数的多少,map 可以接受多组序列,将其对应的元素作为参数传入函数

1 defadd(x, y):2 return x +y3

4 a = (2, 3, 4)5 b = [10, 5, 3]6 print map(add, a, b)

输出:[12 8 7]

11. 函数通过元组和字典传入参数  //结合可变参数的函数定义方式进行思考def func(arg1, *arg2, **arg3):  位置参数在前,键值对参数在后

1 defadd(x, y):2 """Add two numbers"""

3 a = x +y4 returna5

6 z = (2, 3)7 print add(*z)  #传入元组参数z,其中* 必不可少

输出:5

1 defadd(x, y):2 """Add two numbers"""

3 a = x +y4 returna5

6 w = {'x': 2, 'y': 3}7 print add(**w)  #传入字典参数w,其中 ** 必不可少

输出:5

12. 模块

import:载入模块,在导入时,python会执行一遍模块中的所有内容,包括输出语句print

注:为了提高效率,python只会载入模块一次,已经载入的模块再次载入时,Python并不会真正执行载入操作,哪怕模块的内容已经改变

reload()函数:强制重新载入模块 reload(module);Python 3把 reload 内置函数移到了 imp 标准库模块中,必须先导入 from imp import reload

#利用__name__属性,使得.py文件既能当作脚本,又能当作模块用

1 PI = 3.1416

2

3 defsum(lst):4 """Sum the values in a list5 """

6 tot =07 for value inlst:8 tot = tot +value9 returntot10

11 defadd(x, y):12 "Add two values."

13 a = x +y14 returna15

16 deftest():17 w = [0,1,2,3]18 assert(sum(w) == 6)19 print 'test passed.'

20

21 if __name__ == '__main__':  #当文件被当作脚本执行时,__name__的值为"__main__",会执行test()函数,当做模块导入是,test()不执行22 test()

13. 常用的标准库

re 正则表达式

copy 复制

math, cmath 数学

decimal, fraction

sqlite3 数据库

os, os.path 文件系统

gzip, bz2, zipfile, tarfile 压缩文件

csv, netrc 各种文件格式

xml

htmllib

ftplib, socket

cmd 命令行

pdb

profile, cProfile, timeit

collections, heapq, bisect 数据结构

mmap

threading, Queue 并行

multiprocessing

subprocess

pickle, cPickle

struct

14. 警告warnings:出现了一些需要让用户知道的问题,但又不想停止程序,可以使用警告

1 importwarnings2

3 defmonth_warning(m):4 if not 1<= m <= 12:5 msg = "month (%d) is not between 1 and 12" %m6 warnings.warn(msg, RuntimeWarning)  #警告函数7

8 month_warning(13)

输出:RuntimeWarning: month (13) is not between 1 and 12

#设置忽略特定类型的警告

1 warnings.filterwarnings(action = 'ignore', category = RuntimeWarning)2

3 month_warning(13)  #没有警告出现

你可能感兴趣的:(python学习基础知识)