funtest(**d)
*和**在 Python 中可以实现这个功能。这样会很灵活的。
*和**也可以单独出现。但是,如果同时出现,*必须在**之前。
6、 默认参数或者可选参数,参数顺序:调用时,可以指定默认参数中填充那个。
def funtest(a, b=1, c=2):
print(a, b, c)
funtest(1, c=5, b=6)
其实,即便定义为:def funtest(a, b, c),也可以通过 funtest(1, c=5, b=6)
的形式调用。
7、 参数组:*args, **kwargs 就是参数组,通过元组和字典将产生携带进来。这个特性有
助于更为动态的代码生成。
8、 可变长度参数:
9、 函数的参数中如果有一个是元组,可以这样:
def fun(a, (b, c)):
print(a, b, c)
fun(1, (1,2))
10、 关于回调,可以使用闭包,生成器,以及对象的__call__属性。都可以封装状态。
闭包的使用:
1、 将组成函数的语句和语句的执行环境打包在一起形成的对象,成为闭包。
2、 2.7 之前的闭包不支持关键字 nonlocal。3.0 之后才支持。所以 2.7 前的闭包不可以使用
nonlocal。
3、 这样他就不可以对执行环境中的变量进行更改。
字典的使用:
1、 字典的删除:直接使用 del dict[k]可能会引发异常;首先判断 k 是否存在则效率有些低;
使用异常使程序结构看起来不好。一个好的方法是 pop(k, default v)。这个删除一个 k 项,
并且返回。如果不存在返回默认的 v。如果不加默认值,则会引发异常。
2、 直接使用字典下标获取字典的值可能会引发一场。使用 get 方法则不会,如果不存在会
返回 none。另外,还可以设置不存在的默认值。
3、 通过字典格式化字符串:print “value is %(key)s” % kvdict
4、 items 方法返回一个列表,列表中的元素是一个元组,第一个是 key,第二个是 value。
比较好用的方法。
5、 iteritems:返回的是一个迭代器。如果想要迭代这个字典,iteritems 会比 items 更高效一
点。
6、 iterkeys 则返回的是 key 的迭代器。keys 返回的是 key 的 list。
7、 values 返回值的列表,itervalues 返回的是 vlaue 的迭代器
8、 popitem 会随机弹出(同时删除)一个项,则对于想要处理所有的元素,并且删除所有
的元素是有帮助的。但是,如果没用元素的话,会抛出异常。
9、 viewitems,viewkeys,viewvalues:这三个函数返回的是一个 view 对象。这个类似于视