`

python中的函数修饰符

阅读更多

首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装。比如有以下两个函数:

 

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函数修饰符@的使用方法解析

    函数修饰符,又称装饰器(Decorator),是Python编程语言中的一个重要特性。装饰器本质上是一个函数,它允许你修改其他函数或方法的行为,而无需更改原有函数的代码。函数修饰符能够以非常简洁的方式来添加额外的...

    Python-pythongoto函式修饰符对bytecode进行重定向Python中的goto

    标题所提到的"Python-pythongoto函式修饰符"可能是指一种利用Python字节码来模拟goto功能的技术。Python的源代码首先会被编译成字节码,这是一种低级别的中间表示,然后再由Python解释器执行。通过直接操作这个字节...

    05-python-修饰符的使用-operator模块-作用域-动态编译

    在Python编程语言中,了解和熟练使用修饰符、`operator`模块、作用域以及动态编译是提升代码效率和质量的关键。这篇学习笔记将深入探讨这些主题,帮助你更好地掌握Python编程的核心概念。 首先,我们来看看修饰符。...

    05-python-迭代器-生成器-with语句和上下文管理器-修饰符

    - 在Python中,修饰符通常指的是装饰器,它是一种特殊类型的函数,用于修改其他函数的行为或增加额外功能,而无需改变原始函数的源代码。 - 装饰器通过在函数定义前加上`@decorator`语法来应用。它们在函数定义时...

    java2python--java代码转python工具

    Python没有公有、私有访问修饰符,所以转换时需考虑访问控制的相应调整。 2. 方法和函数:Java的方法在Python中被映射为函数,包括构造函数、抽象方法和重载方法。Python不支持重载,所以转换可能需要合并相似功能...

    Python内置函数

    44. `classmethod()`: 修饰符,用于创建类方法,第一个参数为类本身。 这些内置函数极大地丰富了Python的功能,使得编写Python代码更加简洁和高效。了解和熟练使用这些函数是提升Python编程能力的关键。

    疯狂Python讲义,疯狂python讲义pdf,Python

    - 函数:Python函数是代码复用的基本单元,支持默认参数、可变参数和关键字参数。 2. 面向对象编程: - 类与对象:理解类的定义、对象的创建及属性和方法。 - 继承与多态:学习如何通过继承扩展已有类的功能,...

    Python中文手册V2.4.rar

    封装则通过访问修饰符保护数据;多态允许不同类型的对象对同一消息作出响应。 Python还拥有丰富的内置函数,如len()用于获取序列长度,type()用于检查变量类型,print()用于输出信息。此外,还有异常处理机制,通过...

    14张全套Python学习思维导图.zip

    - 封装与抽象:通过访问修饰符控制成员的访问权限,实现数据封装。 5. **异常处理** - 异常捕获:try-except语句处理程序运行时的错误。 - 错误类型:理解Python内置的错误类型,如ZeroDivisionError、TypeError...

    Python3.6中文手册(官方文档)

    - **访问控制**:通过public、private和protected修饰符控制成员的访问权限。 4. **高级特性**: - **装饰器**:允许在不修改原有函数代码的情况下,扩展其功能。 - **生成器**:通过yield关键字创建迭代器,...

    python面向对象课件

    在Python中,可以通过访问修饰符来实现封装,如`public`(默认,无需修饰符)、`private`(前缀`_`)和`protected`(前缀`__`)。封装有助于保护数据,防止外部代码随意修改对象状态。 6. 多态: 多态允许不同类的...

    python调用C的例子

    在给定的示例中,`Lib.h`头文件中使用了`extern "C"`和`__declspec(dllexport)`这两个修饰符来实现函数的导出: ```c extern "C" int __declspec(dllexport) add(int x, int y); ``` 其中,`extern "C"`用于告诉...

    Python程序设计题库

    以上是对Python程序设计题库中涉及的知识点的详细解析,涵盖了Python的特点、字符串格式化、数据类型、参数传递、文件类型、方法类型、函数定义、递归以及匿名函数等核心概念。希望这些信息对学习和考试准备有所帮助...

    python类特性演示

    Python中的`classmethod`是一种特殊的方法修饰符,用于创建类方法。类方法接收的第一个参数是类自身,而不是实例。这使得类方法可以在不创建实例的情况下对类进行操作。与普通方法(实例方法)相比,类方法更适用于...

    Python_编码风格指南中译版

    函数和方法修饰符,如`@staticmethod`和`@classmethod`,用于定义静态方法和类方法,分别不需要实例或类作为第一个参数。它们应当在需要的时候使用,以提高代码的组织性和可读性。 ##### 1.1.18 线程 虽然Python...

    Python提高.zip

    在Python中,通常通过设置访问修饰符来实现封装,尽管Python没有像Java那样的严格访问控制,但我们可以使用下划线(_)来暗示不鼓励直接访问的属性或方法。例如,一个类可以有一个`__private`变量,表示这是内部使用...

    Python 3 Object-oriented Programming

    Python通过访问修饰符(如`public`、`private`)来实现封装,尽管Python没有严格的访问控制,但通常遵循一定的命名约定。 5. 抽象:抽象是将复杂系统分解为一系列独立的组件,每个组件代表系统的某个方面。在Python...

    一文掌握 Python 密集知识点

    - 封装:通过访问修饰符保护对象的内部状态,实现信息隐藏。 3. **模块与包** - 模块:Python程序可以被组织为模块,方便代码重用和管理。 - 包:模块的进一步组织,使用`.`分隔的命名空间,支持更复杂的项目...

    Python核心编程第二版

     4.6.5 Python类型操作符和内建函数总结   4.7 类型工厂函数   4.8 标准类型的分类   4.8.1 存储模型   4.8.2 更新模型   4.8.3 访问模型   4.9 不支持的类型   4.10 练习   第5章 数字 ...

Global site tag (gtag.js) - Google Analytics