首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装。比如有以下两个函数:
def func1(): print 'I am function func1' def func2(): print 'I am function func2'
现在我们想为这两个函数增加一段共同的操作,这时就可以使用函数修饰符。
首先我们定义一个修饰函数,先不做任何处理,仅仅打印一条横线:
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()
运行结果为:
E:\开发文档2\python\demo>修饰符.py
-------------------------------
I am function func1
-------------------------------
I am function func2
可以看到,修饰符起作用了。
注意:
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:'a',2:'b'}) func2( [1,2])
这里使用了可变参数*args和**kwargs,这样会把所有接收来的参数,原样不动的再转给原函数,是惯用法。
以上程序运行结果:
E:\开发文档2\python\demo>修饰符带参数.py
1
2
3
4
param type error
相关推荐
主要介绍了python函数修饰符@的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
系统修饰键 .exact 修饰符 鼠标按钮修饰符 .exact 修饰符 鼠标按钮修饰符 总结 1. 函数绑定 可以用v-on:click="methodName"或者快捷方式 @click="methodName"绑定事件处理函数 @click="m
概要 本人python理论知识远达不到传授级别,写文章主要目的是自我总结,并不能照顾所有人...假定有一个需求是:打印程序函数运行顺序 此案例打印的结果为: foo1 function is starting foo2 function is starting ''
4.6.5 Python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的类型 4.10 练习 第5章 数字 ...
2.17 函数和方法修饰符 2.18 线程 2.19 高级特性 3. Python 编码风格方面的准则 3.1 分号 3.2 每行长度 3.3 圆括号 3.4 缩进 3.5 空行 3.6 空格 3.7 Python 解释器 3.8 注释 3.9 类 3.10 字符串 3.11 TODO style ...
4.6.5 Python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的类型 4.10 练习 第5章 数字 ...
4.6.5 python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的类型 4.10 练习 第5章 数字 ...
4.6.5 python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的类型 4.10 练习 第5章 数字 ...
11.05 字典 in 操作符.png 11.06 字典 items() 方法.png 11.07 字典 keys() 方法.png 11.08 字典 setdefault() 方法.png 11.09 字典 update() 方法.png 11.10 字典 values() 方法.png 11.11 字典 pop() 方法....
延:Python函数修饰符(装饰器)的使用 59 23讲:递归:这帮小兔崽子 62 24讲:递归:汉诺塔 63 17-24讲:阶段总结 64 25讲:字典:当索引值不好用时 65 26讲:字典:当索引值不好用时2 66 26延:你知道Python的字典是...
如果你想知道利用上下文管理器、修饰符、推导式和生成器能够做什么,都可以在这本书中找到。本书将提供一个完整的学习体验,帮助你迅速成为一名Python程序员。为什么这本书如此与众不同?根据认知科学和学习理论的z...
在写类的时候经常用到@staticmethod或@classmethod修饰符,这样就可以不需要实例化,直接类名.方法名()来调用。 所以修饰器用到好多地方的。 例子 PyQt AND OpenCV By LiNYoUBiAo 2020/4/19 19:49 from functools...
目前常用正则表达式都有该使用选项,如:javascript 正则表达式,一般是:”/正则表达式匹配字符/修饰符“ ,最后一个”/” 后面是修饰符。然后,php也是类似的,c#,python等,一般调用正则表达式的匹配函数,都有...
自动记录提供两个修饰符和一个自定义日志级别:“ autologging.logged”装饰一个类以创建__log成员。 默认情况下,记录器是以类的包含模块和名称(例如“ my.module.ClassName”)命名的。 “ autologging.traced”...
注意:Python并不是天生就支持异步功能,因此在JavaScript中将异步的所有功能都将在python中同步运行,因此在转换为python时,所有async / await修饰符都将被忽略。 注意:您可以在JavaScript文件中使用本机python...
从顶层类及其内置函数、类的对象实例化、类的权限修饰符、抽象类和接口、构造函数和析构函数等面向对象机制的几个方面分析和比较了Python语言与java语言的不同。归纳总结这些不同,有助于软件设计方法和软件编程教育...
该模块提供了各种备注集合和修饰符,包括Python标准库的函数修饰符的变体。 from cachetools import cached , LRUCache , TTLCache # speed up calculating Fibonacci numbers with dynamic programming @ cached ...
Python模式匹配 ... 这些语法,运算符和修饰符中的每一个实际上都是模式匹配应用程序中的一个细节。 很多人以前都尝试过使这项工作生效。 不知何故没有。 我应该把它叫做另一个python模式匹配模块,但是
static用法:是一个修饰符,用于修饰成员(成员变量,成员函数).当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,格式——类名.静态成员。
VSCode Python AI文档字符串生成器Visual Studio Code扩展,可使用AI(NLP)技术为python函数快速生成文档字符串。 该项目是为分叉的。 以前,功能描述必须由用户编写,但AI会看到代码并进行总结。产品特点AI快速...