1. *arg与**kwargs参数的用法
这两个是python中的可变参数,arg表示任意多个无名参数,类型为tuple;**kwargs表示关键字参数,为dict.
使用时需将arg放在**kwargs之前,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误.
2. raise
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行
raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
raise Exception("Invalid level!", level)
3. 装饰器
import functools
def statically_typed(*types): # *types 指的是装饰器里的参数
def decorator(func): # func 指的是需要装饰的函数名
@functools.wraps(func) # 保留原有函数func的属性
def wrapper(*args, **kwargs): # *args, **kwargs 指的是需要装饰函数的参数
...
return wrapper
return decorator
4. yield
https://blog.youkuaiyun.com/mieleizhi0522/article/details/82142856
如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了。看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器)
5. 可迭代对象,迭代器,生成器
https://blog.youkuaiyun.com/liangjisheng/article/details/79776008
生成器(generator)
在Python中,这种一边循环一边计算的机制,称为生成器。
① 要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator;
② 生成器对象是通过使用yield关键字定义的函数对象,因此,生成器也是一个函数。生成器用于生成一个值得序列,以便在迭代器中使用
如果一个对象拥有__iter__方法,其是可迭代对象;如果一个对象拥有next方法,其是迭代器。
定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和next方法。
生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和next方法),不需要再手动实现两方法。
生成器在迭代的过程中可以改变当前迭代值,而修改普通迭代器的当前迭代值往往会发生异常,影响程序的执行。