Python中的函数修饰符
来源:互联网 发布:淘宝中如何发布宝贝 编辑:程序博客网 时间:2024/06/07 22:34
首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装。比如有以下两个函数:
复制代码- def func1():
- print 'I am function func1'
- def func2():
- print 'I am function func2'
现在我们想为这两个函数增加一段共同的操作,这时就可以使用函数修饰符。首先我们定义一个修饰函数,先不做任何处理,仅仅打印一条横线:
- def de( f )
- def call_():
- print '-------------------------------'
- return f()
- return _call_
使用这个修饰符:
- def de( f ):
- def _call_():
- print '-------------------------------'
- return f()
- return _call
- @de
- def func1():
- print 'I am function func1'
- @de
- def func2():
- print 'I am function func2'
- if name
= '__main__':
func1()
func2()
运行结果为:
- d:\我的文档\桌面>b.py
- -------------------------------
- I am function func1
- -------------------------------
- I am function func2
- d:\我的文档\桌面>
可以看到,修饰符起作用了。
注意:
1.修饰符等价于包装调用:
- @de
- def func1:
- ----- 等价于 ------
- func1 = de( func1 )
2.修饰函数必须返回一个“可调用对象”:
- def de( f ):
- def call_():
- return f()
- return _call # 返回的是一个函数体,而非调用_call_()
下一个问题:如果各个被修饰函数有不同的参数,怎么处理呢?例如:
- def func1( lst1, lst2 ):
- # 合并两个list,并打印各项
- for item in lst1+lst2:
- print item
- def func2( dic ):
- # 循环dict,打印各key-value
- for k, v in dic.items():
- print k, v
这两个函数参数不同,又都没有异常处理,现在我们想增加上,使用修饰符这样处理:
- import sys
- import traceback
- def de( f ):
- def call_( *args, **kwargs ):
- try:
- return f( *args , **kwargs )
- except:
- print 'param type error'
- return _call
- @de
- def func1( lst1, lst2 ):
- for item in lst1+lst2:
- print item
- @de
- def func2( dic ):
- for k, v in dic.items():
- print k, v
- if name = '__main__':
- func1( [1,2], [3,4] )
- func2( [1,2] )
这里使用了可变参数*args和**kwargs,这样会把所有接收来的参数,原样不动的再转给原函数,是惯用法。
以上程序运行结果:
复制代码
- d:\我的文档\桌面>b.py
- 1
- 2
- 3
- 4
- param type error
- d:\我的文档\桌面>
0 0
- Python中的@函数修饰符
- python中的函数修饰符
- Python中的函数修饰符
- Python中的函数修饰符
- Python中的修饰函数
- python 修饰符函数
- python中的 @ 修饰符
- python中的@修饰符
- python中的 @ 修饰符
- 修饰符在python函数中的用法详细解释
- PYTHON函数修饰符用法
- Python 中的@修饰符作用
- python中的修饰符(@)
- Python修饰符 (一)—— 函数修饰符 “@”
- python中'@'符号用作函数修饰符
- python常见函数修饰符总结
- Python函数修饰符的初步理解
- python中的@staticmethod和@classmethod修饰符
- 使用时速云的docker swarm镜像创建docker集群(与时速云社区关中刀客为同一用户)
- 关于软件盘弹出,界面上下移动问题
- if continue在循环遍历中的使用
- React-Native 入门指导系列教程目录
- 监听按钮的点击事件
- Python中的函数修饰符
- C++实现双链表的基本功能
- 计算给定多项式 在给定点 x = 1.1 处的值 f(1.1)
- 根据分类id,获取该分类下的商品数据(商品名,价格,路径,缩略图)
- 安卓WebView中全屏播放网页视频
- FFMPEG视音频编解码零基础学习方法
- HTML li如何垂直居中
- 几个之前不清楚的正则
- 后台执行Jquery代码