'@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行。也就是说 @A def f(): 是非法的。 只可以在模块或类定义层内对函数进行修饰,不允许修修饰一个类。 一个修饰符就是一个函数,它将被修饰的函数做为参数,并返回修饰后的同名函数或其它可调用的东西。
请看以下实例:
>>> def spamrun(fn):
... def sayspam(*args):
... print "spam, spam, spam"
... return sayspam
...
>>> @spamrun
... def useful(a, b):
... print a**2 + b**2
...
>>> useful(3,4)
spam, spam, spam
请参考python主页中的文档:http://www.python.org/dev/peps/pep-0318/,相信会对修饰符有一个更深入的认识。
更多例子:
Listing 1. Bad decorator that does not even return function
>>> def spamdef(fn):
... print "spam, spam, spam"
...
>>> @spamdef
... def useful(a, b):
... print a**2 + b**2
...
spam, spam, spam
>>> useful(3, 4)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'NoneType' object is not callable
|
|
|
A decorator might return a function, but one that is not meaningfully associated
with the undecorated function:
Listing 2. Decorator whose function ignores passed-in function
>>> def spamrun(fn):
... def sayspam(*args):
... print "spam, spam, spam"
... return sayspam
...
>>> @spamrun
... def useful(a, b):
... print a**2 + b**2
...
>>> useful(3,4)
spam, spam, spam
|
Finally, a better behaved decorator will in some way enhance or modify the
action of the undecorated function:
Listing 3. Decorator that modifies behavior of undecorated func
>>> def addspam(fn):
... def new(*args):
... print "spam, spam, spam"
... return fn(*args)
... return new
...
>>> @addspam
... def useful(a, b):
... print a**2 + b**2
...
>>> useful(3,4)
spam, spam, spam
25
分享到:
相关推荐
在Python中,通过在函数定义前使用@符号加上装饰器函数的名字,就可以实现对函数的修饰。 装饰器的构成规则主要包括以下几点: 1. 装饰器本身是一个函数; 2. 装饰器接收一个函数作为参数; 3. 装饰器返回一个新的...
标题所提到的"Python-pythongoto函式修饰符"可能是指一种利用Python字节码来模拟goto功能的技术。Python的源代码首先会被编译成字节码,这是一种低级别的中间表示,然后再由Python解释器执行。通过直接操作这个字节...
主要介绍了python中@property和property函数常见使用方法,结合实例形式分析了Python @property和property函数功能、使用方法及相关操作注意事项,需要的朋友可以参考下
在 Python 中,**函数装饰器**是一种特殊的设计模式,它允许开发者在不修改原函数代码的情况下为函数增加额外的功能。装饰器本质上是一个接收函数作为参数并返回新函数的高阶函数。 #### 二、基本语法与原理 函数...
在 Python 中,如果函数未返回值,则默认情况下返回 None。 6.2 节函数的标题由函数名称和参数列表组成。函数标题是函数的入口点,用于调用函数。 6.3 节函数的参数:函数可以没有参数,也可以有多个参数。函数的...
本实验报告主要涵盖了Python编程中的函数使用,包括函数的定义、参数传递、变量作用域以及模拟内置函数等多个方面。通过一系列的任务,旨在帮助学习者掌握Python函数的核心概念和实际应用。 1. **函数的定义与使用*...
文章接着详细描述了Python中的模块和内置函数,例如print和input函数,这些是构建程序时的基础工具。 在利用Python求解多元隐函数的偏导数时,文章强调了隐函数存在定理的应用。隐函数定理为在一定条件下,多元隐...
在Python编程中,函数是一种可重复使用的代码块,可以接受参数并返回值。在这个实验报告中,我们将深入探讨函数的定义和调用,以及相关的编程技巧。 首先,实验的目的是让学生熟悉Python中的函数定义语法、调用方法...
Python中函数详解
正则修饰符示例:\w+$ 表示匹配以一个或者多个字母结尾re.M 可以进行多行匹配,每个换行都认为是一个结尾不实用re.M修饰符,只会匹配到最后的 man。
Python 取地址符号的使用是 Python 编程语言中一个非常重要的概念。它允许开发者查看对象在内存中的地址,从而更好地理解 Python 的对象模型和内存管理机制。 id() 函数的使用 id() 函数是 Python 中的一个内置...
遗传算法以一种群体中的所有个体为对象,并利用随机化...参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容,此程序利用Python实现遗传算法求函数最值问题。
对于一个二元非线性函数z=f(x,y),构建神经网络并对其进行训练,使其在定义域内对此二元函数进行拟合。主函数是bp2.py,配好环境解压后直接打开运行即可,现在是迭代20次,如果需要换函数,修改21行的z[j][i]
Python数学二次函数画图
在后续章节中,作者详细阐述了Python中的迭代器和生成器,这是函数式编程中重要的部分,它们在处理序列数据时能有效降低内存需求。此外,书中还讨论了如何使用Python的内置函数,如`any()`和`all()`,这些函数能够对...
教学内容聚焦于Python函数的定义和调用,这是程序设计中的重要组成部分,有助于提高代码的清晰度和可重用性。教学重点是理解函数的概念和自定义函数的语法,教学难点在于如何准确地定义函数。为了帮助学生突破难点,...
在Python编程语言中,函数是组织良好、可重用的代码块,它们执行特定任务并可能接收参数。本资料“【pythonPHP】Python中函数详解共7页.pdf”深入探讨了Python中的函数概念,这对于任何Python开发者来说都是至关重要...
在Python编程语言中,`functools`模块是标准库的一部分,它提供了许多有用的函数,尤其是与函数操作相关的工具。这个模块的目的是增强函数的功能,提高代码的复用性和可读性。`functools`模块是实现高级编程技术,如...
Python中的函数定义简洁且功能强大,支持多种特性,如默认参数值、可变参数、关键字参数以及函数式编程工具。这篇7页的PDF文档详细介绍了Python中的函数,下面是对其中关键知识点的概述。 1. **定义函数**: 在...
python中判断文件结束符的方法:可以使用try except语句块来进行判断。 具体使用方法:【try:while True:s = input() except EOFError: pass】。 Python 中,用try except语句块捕获并处理异常,其基本语法结构如下...