首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装。比如有以下两个函数:
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
相关推荐
函数修饰符,又称装饰器(Decorator),是Python编程语言中的一个重要特性。装饰器本质上是一个函数,它允许你修改其他函数或方法的行为,而无需更改原有函数的代码。函数修饰符能够以非常简洁的方式来添加额外的...
标题所提到的"Python-pythongoto函式修饰符"可能是指一种利用Python字节码来模拟goto功能的技术。Python的源代码首先会被编译成字节码,这是一种低级别的中间表示,然后再由Python解释器执行。通过直接操作这个字节...
在Python编程语言中,了解和熟练使用修饰符、`operator`模块、作用域以及动态编译是提升代码效率和质量的关键。这篇学习笔记将深入探讨这些主题,帮助你更好地掌握Python编程的核心概念。 首先,我们来看看修饰符。...
- 在Python中,修饰符通常指的是装饰器,它是一种特殊类型的函数,用于修改其他函数的行为或增加额外功能,而无需改变原始函数的源代码。 - 装饰器通过在函数定义前加上`@decorator`语法来应用。它们在函数定义时...
Python没有公有、私有访问修饰符,所以转换时需考虑访问控制的相应调整。 2. 方法和函数:Java的方法在Python中被映射为函数,包括构造函数、抽象方法和重载方法。Python不支持重载,所以转换可能需要合并相似功能...
44. `classmethod()`: 修饰符,用于创建类方法,第一个参数为类本身。 这些内置函数极大地丰富了Python的功能,使得编写Python代码更加简洁和高效。了解和熟练使用这些函数是提升Python编程能力的关键。
- 函数:Python函数是代码复用的基本单元,支持默认参数、可变参数和关键字参数。 2. 面向对象编程: - 类与对象:理解类的定义、对象的创建及属性和方法。 - 继承与多态:学习如何通过继承扩展已有类的功能,...
封装则通过访问修饰符保护数据;多态允许不同类型的对象对同一消息作出响应。 Python还拥有丰富的内置函数,如len()用于获取序列长度,type()用于检查变量类型,print()用于输出信息。此外,还有异常处理机制,通过...
- 封装与抽象:通过访问修饰符控制成员的访问权限,实现数据封装。 5. **异常处理** - 异常捕获:try-except语句处理程序运行时的错误。 - 错误类型:理解Python内置的错误类型,如ZeroDivisionError、TypeError...
- **访问控制**:通过public、private和protected修饰符控制成员的访问权限。 4. **高级特性**: - **装饰器**:允许在不修改原有函数代码的情况下,扩展其功能。 - **生成器**:通过yield关键字创建迭代器,...
在Python中,可以通过访问修饰符来实现封装,如`public`(默认,无需修饰符)、`private`(前缀`_`)和`protected`(前缀`__`)。封装有助于保护数据,防止外部代码随意修改对象状态。 6. 多态: 多态允许不同类的...
在给定的示例中,`Lib.h`头文件中使用了`extern "C"`和`__declspec(dllexport)`这两个修饰符来实现函数的导出: ```c extern "C" int __declspec(dllexport) add(int x, int y); ``` 其中,`extern "C"`用于告诉...
以上是对Python程序设计题库中涉及的知识点的详细解析,涵盖了Python的特点、字符串格式化、数据类型、参数传递、文件类型、方法类型、函数定义、递归以及匿名函数等核心概念。希望这些信息对学习和考试准备有所帮助...
Python中的`classmethod`是一种特殊的方法修饰符,用于创建类方法。类方法接收的第一个参数是类自身,而不是实例。这使得类方法可以在不创建实例的情况下对类进行操作。与普通方法(实例方法)相比,类方法更适用于...
函数和方法修饰符,如`@staticmethod`和`@classmethod`,用于定义静态方法和类方法,分别不需要实例或类作为第一个参数。它们应当在需要的时候使用,以提高代码的组织性和可读性。 ##### 1.1.18 线程 虽然Python...
在Python中,通常通过设置访问修饰符来实现封装,尽管Python没有像Java那样的严格访问控制,但我们可以使用下划线(_)来暗示不鼓励直接访问的属性或方法。例如,一个类可以有一个`__private`变量,表示这是内部使用...
Python通过访问修饰符(如`public`、`private`)来实现封装,尽管Python没有严格的访问控制,但通常遵循一定的命名约定。 5. 抽象:抽象是将复杂系统分解为一系列独立的组件,每个组件代表系统的某个方面。在Python...
- 封装:通过访问修饰符保护对象的内部状态,实现信息隐藏。 3. **模块与包** - 模块:Python程序可以被组织为模块,方便代码重用和管理。 - 包:模块的进一步组织,使用`.`分隔的命名空间,支持更复杂的项目...
4.6.5 Python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的类型 4.10 练习 第5章 数字 ...