核心编程(第十章)嵌套函数,装饰器
2016-05-17 21:36
330 查看
例10.1
11.3.6 装饰器
http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html
下面的内容参考http://pythonmap.iteye.com/blog/1682696,加了部分我的理解
一、首先来大致了解下嵌套函数:
实际上,这里的关系为:f == subfoo,a == 'cotent',b == 'sub_'
二、嵌套函数和它的变种(装饰器)
这里,action2 == warpper, y == action(所以嵌套层用到y时,要有括号中的参数), x == 4
其实也等价于下面,action经过重新赋予,已经变为新的函数了:
使用@的写法,结果都是相同的:
#!/usr/bin/env python # encoding: utf-8 import ipdb def safe_float(obj): 'safe version of float()' try: retval = float(obj) except (ValueError, TypeError), diag: retval = str(diag) return retval def main(): 'handles all the data processing' log = open('cardlog.txt', 'w') try: ccfile = open('carddata.txt', 'r') except IOError, e: log.write('no txns this month\n') log.close() return e txns = ccfile.readlines() ccfile.close() total = 0.00 log.write('account log:\n') for eachTxn in txns: result = safe_float(eachTxn) if isinstance(result, float): total = total + result log.write('data... processed\n') else: log.write('ignored: %s' % result) print '$%.2f (new balance)' % (total) log.close() if __name__ == "__main__": main()
11.3.6 装饰器
http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html
下面的内容参考http://pythonmap.iteye.com/blog/1682696,加了部分我的理解
一、首先来大致了解下嵌套函数:
def foo(a): def subfoo(b): return(b + a) return(subfoo) f = foo('content') #由于foo返回的是subfoo,所以f是对subfoo的引用 f('sub_') #因为subfoo记录了foo的参数变量'content',所以返回值为'sub_content'
实际上,这里的关系为:f == subfoo,a == 'cotent',b == 'sub_'
二、嵌套函数和它的变种(装饰器)
def action(z): return(z + 1) def action_pro(y): def warpper(x): ipdb.set_trace() return(y(1) * x) return(warpper) action2 = action_pro(action) # action2一般和要装饰的函数一致,这里为了区分,这样写而已。 print action2(4) # 此函数实际为warpper(4),返回值为8
这里,action2 == warpper, y == action(所以嵌套层用到y时,要有括号中的参数), x == 4
其实也等价于下面,action经过重新赋予,已经变为新的函数了:
def action(z): return(z + 1) def action_pro(y): def warpper(x): ipdb.set_trace() return(y(1) * x) return(warpper) action = action_pro(action) # 第一个action为自定义的伪装变量,第二个action print action(4) # 此函数实际为warpper(4),返回值为8
使用@的写法,结果都是相同的:
def action_pro(y): def warpper(x): ipdb.set_trace() return(y(1) * x) return(warpper) @action_pro def action(z): return(z + 1)
相关文章推荐
- web编程的一些概念
- 面向接口编程以及面向接口编程的好处
- Spring解析
- Spring的IOC的解析
- python笔记之ArcPy简介
- C#Winform判断文件和路径是否存在
- 查询自动售货机中商品的价格
- JAVA线程-示例代码
- {sharepoint} SetPermission
- MyEclipse Trial Expired 问题及解决方案
- 用交叉验证改善模型的预测表现(适用于Python和R)
- asp.net操作word 配置在IIS上出现的问题
- 如何更改MyEclipse中XML文件的字体?
- Java基础第八天听课总结(2)--多线程&Thread
- javaweb之压缩过滤器
- C++多态:从虚表指针到设计模式
- Ubuntu14.04下QT开发环境搭建步骤
- python笔记之ArcPy函数列表
- 移植项目时遇到的NoClassDefFoundError错误及其解决方法
- Java中的递归原理分析