写给自己看的,忘记的时候可以看
6 抽象
文档化函数
一个给函数添加注释的姿势
1 | def add(x, y): |
is 与 ==
前者地址和值要完全相等,后者只需要值相等
1 | a = [1, 2, 3] |
我们看一下输出就懂了
1 | True |
关键字参数和收集参数
关键字参数的好处就是不需要记住函数中形参的顺序
1 | def setime(h, m, s='unknown'): |
看一下默认值的效果
1 | time is: 13 hour,20 minutes,42 seconds |
收集参数主要就是* 和 **
用法很简单,要注意几点:*返回元组,**返回字典,且**要定义在*之后
一些新的函数
1 | print(map.__doc__+'\n~~~~~~~~') |
结果如下
1 | map(func, *iterables) --> map object |
7 更加抽象
关键就是对象吧,主要概念就是多态,封装,继承
class
直接记录一下class的一些花招
1 | class Fruit(object): |
配上输出的结果一目了然
1 | fruit |
异常
每个异常都是一些类,常用的的异常类我觉得等以后写了bug查一下就知道了
一个简单的捕获异常的例子,源自书本
1 | class Calculator(object): |
看一下结果就好了,异常不捕获的话会卡死后面
我们可以选择捕获以后不释放错误,就不会卡死如下
1 | class Calculator(object): |
多个错误的时候一定记得加(),然后有个常用的finally,自己这里没写,提一下怕自己忘记,是最后百分之百执行的,配合try使用
9 魔法方法、属性和迭代器
这章节的标题很玄乎就是了
__init__
构造__init__其实还挺普遍的,但是有几个坑自己要注意,例子有些就直接用书上的了,自己稍微改了改
1 | class Bird: |
__setattr__和__getattr__
主要是为了偷懒,不用写一大堆get或者set了,当然如果是private的特性另当别论了
如果对象没有该特性,则会调用__getattr__,至于__getattr__可以单纯的偷懒了
1 | class Bird: |
输出如下
1 | OK |
装饰器
这个树上一笔带过了,我觉得蛮重要的,就搜了一下
链接:https://www.cnblogs.com/whyaza/p/9505205.html
理解装饰器的前提**:1.所有东西都是对象(函数可以当做对象传递) 2.闭包**
闭包的概念:
1)函数嵌套
2)内部函数使用外部函数的变量
3)外部函数的返回值为内部函数
我自己通俗的理解就是,比如有三个函数A,B,C
A函数里面有个加工的方法是B,A加工C之后,C不光保留了自身的方法,还获得了B的方法,大概是这样吧
从网上拉下来两个例子
原型
1 | import time |
语法糖
1 | import time |
两种的操作其实是一样的
迭代器
举个书上例子好了,以我的水平,暂时知道他(__iter__)配合__next__使用就好
1 | class Fibs: |
生成器
一个强大的特性,我自己觉得最不可思议的就是冻结,简单的理解的话,有yield就是生成器
1 | def flatten(nested): |
运行完你会发现是一个一个输出的
自带电池
一个看了标题以后完全不知道要学什么的章节
模块
我们先导入自己做的模块,调用一下,用到了sys
1 | import sys |
sys 和 os 模块还是挺管用的,下次遇到了一些问题,可以用这两个模块辅助
就先记录到这里
本文链接: http://woaixiaoyuyu.github.io/2019/02/28/Python%E5%9F%BA%E7%A1%80%E7%BC%96%E7%A8%8B-6-10-note/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!