Python库相关函数

1.numpy

  1. np.array([1,2,3]) 生成一个向量,可以用a[2]来访问其中的某个元素; 多维数组生成np.array([[1,2,3],[2,3,4]]),访问时a[2,4]; 多维数组切片,a[0,1:2]>>>[2,3], a[::1,1:2]>>>[[2,3],[3,4]]。
  2. 属性:type(a)>>> <class ‘numpy.ndarray’>; a.dtype>>>int64; a.size>>>6; a.shape>>>(3,2); a.itemsize>>>8(一个数组元素的长度,float64为8,complex为64); a.ndim>>>2; a.nbytes>>>48(整个数组的byte数)。
  3. np.linspace(start,end,num) 返回向量, 从start到end等距离生成五个点,包括首尾。
  4. np.arrange([start],end,[step]) 返回向量,开始默认为0,step默认为1。
  5. np.reshape(newshape) 重新组织结构,比如将一个n1的数组改成(55)。若某个值为-1,则从剩余的尺寸推断出该值,例如a.reshape(-1)为一行,a.reshape(-1,1)为一列。
  6. np.random.shuffle(x); x是要打乱的数组,洗牌打乱顺序,按照矩阵的格式,不会重拍里面的数字(吧?)
  7. np.zeros_like(a) 返回与给定数组具有相同形状和类型的零数组。
  8. yield 返回一大批你只需要读一次的值,yield 的作用就是把一个函数变成一个 generator,减少因临时值导致的内存占用。
  9. pickle 实现Python对象的序列化,pickle.load(f) 从打开的文件对象中读取,并返回其中指定的重构对象层次结构。

2.Pandas

https://blog.csdn.net/jiangjiang_jian/article/details/80022918

3. 基本语法

  1. raw_input(“提示语”) 在python3中替换成了input()函数; 从input返回的永远都是字符串形式,因此想要和整数做对比需要一个强转 int(raw_input('birth: '))

  2. 使用 r''表示''内部的字符串默认不转义,使用'''...'''表示多行任务

  3. 动态语言可以重新赋值,比如 a='ABC' b=a a= 'XYZ'此时b仍然为ABC

  4. list[],有序集合 ;friend=[‘Mary’,‘Lina’,‘Bob’]; friend.append(‘Nancy’) ; friend.insert(1,‘Jack’) ; friend.pop(); 弹出最上面一个; list中的元素类型可以不同,比如list中可以包含另一个list

  5. tuple(), 不可变的list,让代码更安全;t=() 来定义空元祖; t=(1,) 来定义只有一个元素的元祖,加逗号防止和t=1产生冲突,表明该变量时一个元祖;

  6. 可变的tuple(),tuple中元素可变时,只要保证tuple指向同一个元素即可,例如 t= (1,2,[‘A’,‘B’]),其中第三个元素是可变的

  7. dict={key:val,key2:val2},通过索引来查找,查找速度快;一个key只能对应一个value,重写回覆盖;dict查找和插入的速度极快,类似于map,不会随着key的增加而变慢,需要占用大量的内存,内存浪费多。dict的key必须是不可变对象。

  8. set(),s=([1,2,3]),set中没有重复的key,需要提供一个list作为输入集合。不是有序的。

  9. range()函数不包括后面,为左闭右开,默认左边为0

  10. 默认参数必须指向不变的对象

  11. 可变参数:def calc(*numbers):

  12. 关键字参数:def person(name, age, **kw):组装成一个dict,传入city='Beijing’这种形式

  13. 命名关键字参数:def person(name, age, *, city, job); 必须传入参数名

  14. 切片:L[:4],省略的开头为0,左闭右开;冒号后面省略的话为结尾。可以有第三个参数来规定步长

  15. 列表生成式:[m + n for m in ‘ABC’ for n in ‘XYZ’] 或者[x * x for x in range(1, 11) if x % 2 == 0]

  16. 生成器:g = (x * x for x in range(10)),创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

  17. 为什么list,dict,str等数据类型不是Iterator:iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误,只有在需要返回下一个数据时它才会计算。凡是可作用于for循环的对象都是Iterable类型,凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列。集合数据类型是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

  18. 函数式编程:允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

  19. reduce:reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

  20. filter:和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

  21. sorted 排序:sorted([‘bob’, ‘about’, ‘Zoo’, ‘Credit’], key=str.lower)

  22. 返回函数:一个函数定义在另一个函数里面作为内部函数,返回内部函数。返回值是一个函数,这种程序结构称为闭包。每次调用外部函数时,返回的都是一个新的函数,即使参数相同。

  23. 闭包:返回函数不要用任何循环变量,因此会用到外部函数中的变量,而外部函数外的变量在第一次函数执行结束后就发生了改变。

  24. 匿名函数lambda:lambda x: x * x实际上是def f(x): return x*x,只能有一个表达式,不用写return,返回值就是该表达式的结果。

  25. 装饰器:写了一个函数,某个地方想给他加点功能,但是又不想改原来的函数设定,所以就改了一个装死器,在被调用的函数前面加@外部函数名,在一个函数里面引用另一个函数做一些修改。外部函数如果相加参数,需要进行三层嵌套。同时注意,需要在外部函数加@修饰,保证函数名不变 。
    在这里插入图片描述

  26. 偏函数 functools.partial:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。下面偏函数设置了一个比较默认值1,所以max2给出的是5,6,7,1中的最大值。
    在这里插入图片描述

  27. 作用域:
    __xxx___是特殊变量,可以被直接饮用,但是有特殊用途,比如__author____name__就是特殊变量;
    _xxx或者__xxx这样的函数或者变量就是非公开的(private),不应该直接被引用。Python并没有一种方法可以完全限制访问的private函数或者变量。

  28. OOP:__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身;类中内部属性设置为__xxx

  29. 继承和多态,获取对象信息: type(123); isinstance(b,Dog) ; 查看一个对象的所有属性和方法,使用dir(‘ABC’)
    在这里插入图片描述
    操作对象的状态:
    在这里插入图片描述

  30. 面向对象高级编程:

  • 动态绑定属性:
    在这里插入图片描述
  • 使用__slots__限制实例的属性,比如只允许对Dog实例添加name和age属性
    在这里插入图片描述
    __slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的,除非是在子类中也定义__slots__属性,这样子类允许定义的属性就是自身的slots加上父类的slots。
  • @property装饰器:
    在这里插入图片描述
    如果不定义setter方法,只定义了@property,则该方法是一个只读方法。
  • MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系
  • 特殊函数来定制类:__str__
    在这里插入图片描述
    __repr____str__返回用户看到的字符串,而__repr返回程序开发者看到的字符串,是为调试服务的。
    在这里插入图片描述
    __iter__:如果一个类想被用于for ... in循环,类似于list或tuple那样,就必须实现一个__iter__方法,该方法返回一个迭代对象,然后Python的for循环就会不断调用该迭代对象的__next__方法拿到循环的下一个值,知道遇到StopIteration错误时退出循环。这是要定义两个方法的意思吗?
    在这里插入图片描述
    __getitem__:为了能够用下标去除元素,需要实现该方法。
  • 枚举变量:
    在这里插入图片描述
  1. IO编程:
  2. 多进程:对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。
  • subprocess:来运行shell脚本(子进程不是自身,而是一个外部进程)
    在这里插入图片描述
  • Queue/Pipes:在multiprocessing模块里面,用来进行进程间通信
    在这里插入图片描述
  • 总结:要实现跨平台的多进程,可以使用multiprocessing模块,进程间通信是通过Queue、Pipes等实现的
  • 多线程模块:_thread(低级)和threading(高级,对前一个进行了封装)模块,启动一个线程就是把一个函数传入并创建Thread实例,然后调用start开始执行。
    在这里插入图片描述
  • lock
    在这里插入图片描述
  • 多核CPU:多线程在Python中只能交替进行,即使100个线程泡在100核CPU上,也只用到1个核,因为Python的线程虽然是真正的线程,但是解释器执行代码时,有一个GIL(Global Interpreter Lock)。
  • ThreadLocal:为了解决全局变量加锁太多太麻烦??创建:local_school=threading.local()。这样全局变量local_school就是一个ThreadLocal对象,每个Thread对它都可以读写student属性,但互不影响。可以将它看做全局变量,但每个属性都是线程的局部变量,可以任意读写而互不干扰,也不用管理锁的问题,ThreadLocal内部会处理。ThreadLocal解决了参数在一个线程传递的问题。
  • 对应到Python语言,单线程的异步编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序。
  1. 内置模块:
    a. collections模块
  • namedtuple:可以方便的定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便
    在这里插入图片描述
  • deque:使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque除操作的双向列表,适合用于队列和栈。q=deque(['a','b','c'])
  • defaultdict:使用dict时,如果引用的key不存在,就会抛出KeyError,如果希望key不存在时,返回一个默认值,就可以用defaultdict。
  • OrderedDict:使用dict时,key是无序的,在对dict做迭代时,我们无法确定KEY的顺序,如果要保持Key的顺序,可以用OrderedDict,key会按照插入的顺序排列(不是key本身排序,可以实现一个FIFO的dict,当容量超出限制时,弦删除最早添加的key。
    -ChainMap可以把一组dict串起来组成一个逻辑上的dict。本身也是一个dict,但是查找的时候,会按照顺序在内部的dict依次查找;eg:先查命令行参数,如果没有再查环境变量等。
    在这里插入图片描述
    -Counter:计数器,eg:统计字符出现的次数
    在这里插入图片描述
  • itertools:重复
    在这里插入图片描述
  • chain:把一组迭代对象串联起来,形成一个更大的迭代器
    在这里插入图片描述
  • groupby:把迭代器中相邻的重复元素挑出来放到一起
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值