设为首页 收藏本站
查看: 543|回复: 0

[经验分享] Pyke 简介 (3) :调制 Python 函数

[复制链接]

尚未签到

发表于 2017-5-2 06:27:54 | 显示全部楼层 |阅读模式
对 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 的小型编程,二者密切结合的方式,你有所感受了吧。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-371806-1-1.html 上篇帖子: 可爱的Python 读书笔记1 下篇帖子: 使用python获取网卡字节流
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表