Python实现partial改变方法默认参数


Posted in Python onAugust 18, 2014

在Python的标准库中,functools库中有很多对方法有操作的封装功能,partial Objects就是其中之一,他可以实现对方法参数默认值的修改。本文就以实例代码说明这一功能。

下面就看下简单的应用测试实例。具体代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python2.7x
#partial.py
#authror: orangleliu

'''
functools 中Partial可以用来改变一个方法默认参数
1 改变原有默认值参数的默认值
2 给原来没有默认值的参数增加默认值
'''
def foo(a,b=0) :
  '''
  int add'
  '''
  print a + b

#user default argument
foo(1)

#change default argument once
foo(1,1)

#change function's default argument, and you can use the function with new argument
import functools

foo1 = functools.partial(foo, b=5) #change "b" default argument
foo1(1)

foo2 = functools.partial(foo, a=10) #give "a" default argument
foo2()

'''
foo2 is a partial object,it only has three read-only attributes
i will list them
'''
print foo2.func
print foo2.args
print foo2.keywords
print dir(foo2)

##默认情况下partial对象是没有 __name__ __doc__ 属性,使用update_wrapper 从原始方法中添加属性到partial 对象中
print foo2.__doc__
'''
执行结果:
partial(func, *args, **keywords) - new function with partial application
  of the given arguments and keywords.
'''

functools.update_wrapper(foo2, foo)
print foo2.__doc__
'''
修改为foo的文档信息了
'''

这样如果我们使用一个方法总是需要默认几个参数的话就可以,先做一个封装然后不用每次都设置相同的参数了。

希望本文所述方法对大家的Python程序设计有一定的借鉴与帮助价值。

Python 相关文章推荐
python爬虫框架talonspider简单介绍
Jun 09 Python
Python smtplib实现发送邮件功能
May 22 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
详解python持久化文件读写
Apr 06 Python
python里 super类的工作原理详解
Jun 19 Python
Python测试模块doctest使用解析
Aug 10 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
如何运行带参数的python脚本
Nov 15 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
Python实现UDP程序通信过程图解
May 15 Python
Python实现发送email的几种常用方法
Aug 18 #Python
Python内置数据类型详解
Aug 18 #Python
Python3基础之输入和输出实例分析
Aug 18 #Python
一个计算身份证号码校验位的Python小程序
Aug 15 #Python
基于Python的身份证号码自动生成程序
Aug 15 #Python
Python异常处理总结
Aug 15 #Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 #Python
You might like
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
对Python中内置异常层次结构详解
2018/10/18 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python 如何提高元组的可读性
2019/08/26 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
python 装饰器的使用示例
2020/10/10 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
表彰先进集体通报
2014/01/12 职场文书
大学生学习计划书
2014/09/15 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
银行实习推荐信
2015/03/27 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
故意伤害辩护词
2015/05/21 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript