Python学习

Posted 从头再来,不要慌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习相关的知识,希望对你有一定的参考价值。

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

1. Python之禅:import this

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

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

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

5. list.exentd(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 def sqr(x): 
2     return x ** 2
3 
4 a = [2, 3, 4]
5 print map(sqr, a)
输出:[4 9 6]

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

1 def add(x, y): 
2     return x + y
3 
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 def add(x, y):
2     """Add two numbers"""
3     a = x + y
4     return a
5     
6 z = (2, 3)
7 print add(*z)  #传入元组参数z,其中 * 必不可少
输出:5
1 def add(x, y):
2     """Add two numbers"""
3     a = x + y
4     return a
5 
6 w = {x: 2, y: 3}
7 print add(**w)  #传入字典参数w,其中 ** 必不可少
输出:5

12. 模块

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

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

  • reload:强制重新载入模块
 #利用__name__属性,使得.py文件既能当作脚本,又能当作模块用
1
PI = 3.1416 2 3 def sum(lst): 4 """ Sum the values in a list 5 """ 6 tot = 0 7 for value in lst: 8 tot = tot + value 9 return tot 10 11 def add(x, y): 12 " Add two values." 13 a = x + y 14 return a 15 16 def test(): 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 import warnings
2 
3 def month_warning(m):
4     if not 1<= m <= 12:
5         msg = "month (%d) is not between 1 and 12" % m
6         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学习的主要内容,如果未能解决你的问题,请参考以下文章

Python学习总结

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

python 学习python语法的片段

python小白学习记录 多线程爬取ts片段

python ipython:机器学习片段

30 段 Python 实用代码