Pyke 简介 (3) :调制 Python 函数


对 Python 函数的“调制”,是指对其做出合乎需求的设置。具体的调制方法,是将其参数设为固定值(常数)。
设定单一的参数值
原先的函数是这样的:
>>> def foo(cooked, standard):
...     print "foo called with cooked: %s, standard: %s" % \
...               (cooked, standard)

调用它:
>>> foo('a', 'b')
foo called with cooked: a, standard: b
不过,想要的是让这个函数的第一个参数,变成“调制参数”,并且只剩下第二个参数。
通过 Python 标准库模块functools的类partial,可以做到。
>>> from functools import partial

用 partial 调制第一个参数:
>>> cooked1 = partial(foo, 'cooked_value1')

原函数 foo 的第一个参数,被调制成为函数 cooked1,foo 的第二个参数,成了 cooked1 的唯一参数。
>>> cooked1('value1')
foo called with cooked: cooked_value1, standard: value1
>>> cooked1('value2')
foo called with cooked: cooked_value1, standard: value2

可以用其他值,生成调制函数:
>>> cooked2 = partial(foo, 'cooked_value2')
>>> cooked2('value1')
foo called with cooked: cooked_value2, standard: value1
>>> cooked2('value2')
foo called with cooked: cooked_value2, standard: value2

原本一个函数,现在调制成了两个,事半功倍呵。
>>> cooked1('value3')
foo called with cooked: cooked_value1, standard: value3
>>> cooked1('value4')
foo called with cooked: cooked_value1, standard: value4
>>> cooked2('value5')
foo called with cooked: cooked_value2, standard: value5
>>> cooked2('value6')
foo called with cooked: cooked_value2, standard: value6

如法炮制,可由原函数生成任意多个调制函数。
做出函数调用顺序图
用同样的调制技术,对调制出的函数,再次进行调制,可以产生下一级调制函数,……,由此逐步形成函数调用顺序图:
>>> def bar(child_fun, a):
...     print "bar called with:", a
...     return child_fun(a)

注意,函数 bar 的第一参数是个引用,即函数名。用这个办法,可以调制任何参数:
(其中的 float 和 min 是 Python 的内建函数)
>>> bar_float = partial(bar, float)
>>> bar_float('123')
bar called with: 123
123.0

>>> bar_min = partial(bar, min)
>>> bar_min((3,2,5))
bar called with: (3, 2, 5)
2

也可以这样调制下级函数:
>>> bar_cooked1 = partial(bar, cooked1)
>>> bar_cooked1('abc')
bar called with: abc
foo called with cooked: cooked_value1, standard: abc

这意味着,可以创建任意深度的函数调用图:
>>> bar_bar_min = partial(bar, bar_min)
>>> bar_bar_min((3,2,5))
bar called with: (3, 2, 5)
bar called with: (3, 2, 5)
2

调制函数的多个参数
一般地可能要调制函数的多个值。有些值可在调用下级函数时给定,或者赋给函数固定的常量。
Pyke 相应的做法,是用叫做“context”的独特参数,它是只读的字典结构。这个字典中,可按需要准备任意多的值,并且,使用 partial 类方法,把字典的全部值,调制到函数中。
从字典中检索调制参数,直接用参数名称:
context['parameter_name']

使用 Pyke 的好处
现在,弄明白了 Pyke 调制函数的办法,和程序的性能、适用性、代码重用性等成数量级提升的原因。也看到了 Pyke 可以把相关函数全部集成起来,去适应各种特殊情况和需要。
注意
Pyke 把调制形成的函数调用顺序图,称作“方案”(plan)。在介绍了《 Pyke 逻辑编程 》后,再具体解释“方案”。
另外,Pyke 的大型编程与 Python 的小型编程,二者密切结合的方式,你有所感受了吧。

你可能感兴趣的:(java,编程,python)