functools:管理函数工具(部分)
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
#functools:管理函数工具
#作用:处理其他函数的函数
#版本:2.5及之后
#用于调整或者扩展函数和其他可回调对象,不用重写
#修饰符:主要工具是partial在,用于包装,一个有默认参数可回调对象。得到对象本身是可回调的,可以看作就像是原来的函数,它与原函数完全相同,调用时也可以提供额外的位置或者命名参数,可以使用partial而不是lambda提供的默认参数,有些参数可不指定
#partial对象
import functools
def myfunc(a,b=2):
'''docstring for myfunc().'''
print ' called myfunc with:',(a,b)
return
def show(name,f,is_partial=False):
print name
print f
if not is_partial:
print f.__name__
if is_partial:
print f.func
print f.args
print f.keywords
return
show('myfunc',myfunc)
myfunc('a',3)
p1=functools.partial(myfunc,b=4)
show('partial with named default',p1,True)
p1('passing a')
p1('override b',b=5)
#p1()#TypeError: myfunc() takes at least 1 argument (1 given)
#获取函数属性
#默认情况下,partial对象没有__name__或者__doc__属性。如果没有这些属性,修饰函数更加难调试,使用update_wrapper()可以将原函数属性或者添加到oartial对象
def myfunc1(a,b=2):
'''docstring for myfunc().'''
print ' called myfunc with:',(a,b)
return
def show2(n,f):
print n
print f
print '__name__'
try:
print f.__name__
except AttributeError,s:
print 'no __name__',s
print repr(f.__doc__)
return
show2('myfunc1',myfunc1)
p1=functools.partial(myfunc1,b=4)
show2('raw wrapper',p1)
print functools.WRAPPER_ASSIGNMENTS
print functools.WRAPPER_UPDATES
functools.update_wrapper(p1,myfunc1)
show2('updated wrapper',p1)
#其他可回调#Paryisl适用于任何可回调对象,而不只是单独的函数
class MyClass(object):
def method1(self,a,b=2):
print self,a,b
return
def methond2(self,c,d=5):
print self,c,d
return
wrapp=functools.partial(methond2,'wrapped c')
functools.update_wrapper(wrapp,methond2)
def __call__(self,x,z=6):
print self,x,z
return
def show_update(n,f):
print n
print f
print '__name__'
try:
print f.__name__
except AttributeError,s:
print 'no __name__',s
print repr(f.__doc__)
return
o=MyClass()
show_update('method1 straight',o.method1)
o.method1('on default for a',b=3)
p1=functools.partial(o.method1,b=4)
functools.update_wrapper(p1,o.method1)
show_update('method1 wrarer',p1)
functools:管理函数工具(部分)的更多相关文章
- Python3标准库:functools管理函数的工具
1. functools管理函数的工具 functools模块提供了一些工具来调整或扩展函数和其他callable对象,从而不必完全重写. 1.1 修饰符 functools模块提供的主要工具就是pa ...
- μC/OS-Ⅲ系统的时间管理函数和定时器
一.时间管理函数 μC/OS-Ⅲ系统提供一些列时间管理服务函数: 1.OSTimeDly():任务延时n个时钟节拍. 2.OSTimeDlyHMSM():任务延时指定的时间,采用“时:分:秒:毫秒”方 ...
- 内存管理运算符new delete与内存管理函数malloc free的区别——已经他们对对象创建的过程。
(1)内存管理函数与内存管理运算符的区别 内存管理函数有内存分配函数,malloc calloc realloc 以及内存释放函数free. 内存管理运算符有new 和delete. 两种内存管理方式 ...
- JBPM4入门——4.封装流程管理的工具类(JbpmUtil)
本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...
- POSIX多线程——基本线程管理函数介绍
POSIX基本的几个线程管理函数见下表: ------------------------------------------------------------------------------- ...
- [图形学] Chp9 三维几何变换--栈处理函数与矩阵管理函数的区别
矩阵管理函数:glLoadIdentity()是把当前活动矩阵设置为单位矩阵. 栈处理函数:glPushMatrix()是将当前活动的变换矩阵复制一份,压入栈顶:glPopMatrix()是破坏当前活 ...
- 基于浏览器的开源“管理+开发”工具,Pivotal MySQL*Web正式上线!
基于浏览器的开源“管理+开发”工具,Pivotal MySQL*Web正式上线! https://www.sohu.com/a/168292858_747818 https://github.com/ ...
- C++内存管理-重载内存管理函数
记录学习的点点滴滴,参考侯捷<<C++内存管理>> 我们先重载一下C++的几个内存管理函数 operator new, operator new[], operator del ...
- linux进程查看及管理的工具
介绍Linux进程查看及管理的工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, jo ...
随机推荐
- jps命令使用
jps工具 jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前全部java进程pid的命令,简单有用,很适合在linux/un ...
- Swift 2.0初探:值得注意的新特性
转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...
- JSP实现分页功能
分页须知知识点: (1)JDBC2.0的可滚动结果集. (2)HTTP GET请求. 一.可滚动结果集 Connection con = DriverManager.getConnection( ...
- AIX 7.1 安装 Python2.7.5
一.下载必要的安装包 1. gdbm-1.8.3-5.aix5.2.ppc.rpm 下载地址:ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolb ...
- FineUI模拟树下拉列表
模拟树的下拉列表 很多时候,我们希望在下拉列表中显示简单树状的层次结构,在菜单设置.机构设置等场景下这个需求尤为突出.也是基于项目需求的考虑,FineUI增加了模拟树的下拉列表的功能,显示效果如下所示 ...
- SDK文件夹下内容介绍
Platform-Tools: 这是 adb, fastboot 等工具包.把解压出来的 platform-tools 文件夹放在 android sdk 根目录下,并把 adb所在的目录添加到系统 ...
- .NET中应用Ueditor(富文本编辑)的配置和使用
一.Ueditor的下载 1.百度编辑器下载地址:http://ueditor.baidu.com/website/download.html 2.下载完整源码包,解压到任意目录,解压后的源码目录结构 ...
- silverlight visifire控件图表制作——silverlight 后台方法画图
1.调用wcf 获取信息 private void svc_GetSingleChartDataCompleted(object sender, GetSingleChartDataCompleted ...
- Objective-C 协议(接口)
Objective-C 协议类似于java语言中的接口 新建文件步骤:Objective-C File ---> File Type = "Protocol" @protoc ...
- C++中引用和指针详解
先来分析指针这个东东: 从概念上讲,指针本质上就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 上面的图表示了程序运行时变量的值 ...