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中map、any、all函数用法分析
Apr 21 Python
Python语言的变量认识及操作方法
Feb 11 Python
python基础教程项目三之万能的XML
Apr 02 Python
Python 实现选择排序的算法步骤
Apr 22 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
Tensorflow 实现释放内存
Feb 03 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
Python实现爬取网页中动态加载的数据
Aug 17 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
php输出xml属性的方法
2015/03/19 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
Document 对象的常用方法
2009/07/31 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python opencv之SIFT算法示例
2018/02/24 Python
详解Python绘图Turtle库
2019/10/12 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
合伙开公司协议书范本
2014/10/28 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python