原文地址:http://blog.csdn.net/lainegates/article/details/8166764
今天看到python中的一个修饰符'@',不了解它的使用,查看了下官方文档,有了一点了解。
原文 PEP-318 网址:http://www.python.org/dev/peps/pep-0318/
不得不佩服老外,治学很严谨,在python网站相关网页上把为什么使用decorator(主要为了简便一些代码),以及使用什么字符,甚至语法怎么设计写了个详详细细,好长的一篇啊。
这是查看的其中一篇,我翻译关键部分的一些内容,又摘取一些有用的,有空再翻译。
- @dec2
- @dec1
- def func(arg1, arg2, ...):
- pass
This is equivalent to(等价于):
- def func(arg1, arg2, ...):
- pass
- func = dec2(dec1(func))
使用示例:
Much of the discussion on comp.lang.python and the python-dev mailing list focuses on the use of decorators as a cleaner way to use the staticmethod() and classmethod() builtins. This capability is much more powerful than that. This section presents some examples of use.
在comp.lang.python 和 python-dev的大部分讨论集中在更简捷地使用内置修饰符staticmethod() 和 classmethod() 上。但修饰符的功能远比这强大。下面会对它的使用进行一些讲解:
1.Define a function to be executed at exit. Note that the function isn't actually "wrapped" in the usual sense.
- def onexit(f):
- import atexit
- atexit.register(f)
- return f
- @onexit
- def func():
- ...
Note that this example is probably not suitable for real usage, but is for example purposes only.
2. Define a class with a singleton instance. Note that once the class disappears enterprising programmers would have to be more creative to create more instances. (From Shane Hathaway onpython-dev.)
- def singleton(cls):
- instances = {}
- def getinstance():
- if cls not in instances:
- instances[cls] = cls()
- return instances[cls]
- return getinstance
- @singleton
- class MyClass:
- ...
余下基本可以参照着读懂了,以后再翻译。
- def attrs(**kwds):
- def decorate(f):
- for k in kwds:
- setattr(f, k, kwds[k])
- return f
- return decorate
- @attrs(versionadded="2.2",
- author="Guido van Rossum")
- def mymethod(f):
- ...
4.Enforce function argument and return types. Note that this copies the func_name attribute from the old to the new function. func_name was made writable in Python 2.4a3:
- def accepts(*types):
- def check_accepts(f):
- assert len(types) == f.func_code.co_argcount
- def new_f(*args, **kwds):
- for (a, t) in zip(args, types):
- assert isinstance(a, t), \
- "arg %r does not match %s" % (a,t)
- return f(*args, **kwds)
- new_f.func_name = f.func_name
- return new_f
- return check_accepts
- def returns(rtype):
- def check_returns(f):
- def new_f(*args, **kwds):
- result = f(*args, **kwds)
- assert isinstance(result, rtype), \
- "return value %r does not match %s" % (result,rtype)
- return result
- new_f.func_name = f.func_name
- return new_f
- return check_returns
- @accepts(int, (int,float))
- @returns((int,float))
- def func(arg1, arg2):
- return arg1 * arg2
5.Declare that a class implements a particular (set of) interface(s). This is from a posting by Bob Ippolito on python-dev based on experience with PyProtocols [27].
- def provides(*interfaces):
- """
- An actual, working, implementation of provides for
- the current implementation of PyProtocols. Not
- particularly important for the PEP text.
- """
- def provides(typ):
- declareImplementation(typ, instancesProvide=interfaces)
- return typ
- return provides
- class IBar(Interface):
- """Declare something about IBar here"""
- @provides(IBar)
- class Foo(object):
- """Implement something here..."""
相关推荐
函数修饰符,又称装饰器(Decorator),是Python编程语言中的一个重要特性。装饰器本质上是一个函数,它允许你修改其他函数或方法的行为,而无需更改原有函数的代码。函数修饰符能够以非常简洁的方式来添加额外的...
标题所提到的"Python-pythongoto函式修饰符"可能是指一种利用Python字节码来模拟goto功能的技术。Python的源代码首先会被编译成字节码,这是一种低级别的中间表示,然后再由Python解释器执行。通过直接操作这个字节...
Python没有公有、私有访问修饰符,所以转换时需考虑访问控制的相应调整。 2. 方法和函数:Java的方法在Python中被映射为函数,包括构造函数、抽象方法和重载方法。Python不支持重载,所以转换可能需要合并相似功能...
在Python编程语言中,了解和熟练使用修饰符、`operator`模块、作用域以及动态编译是提升代码效率和质量的关键。这篇学习笔记将深入探讨这些主题,帮助你更好地掌握Python编程的核心概念。 首先,我们来看看修饰符。...
在Python编程语言中,迭代器、生成器、with语句和上下文管理器以及修饰符是四个非常重要的概念,它们在处理数据流和资源管理时起着关键作用。以下是关于这些知识点的详细解释: 1. **迭代器**: - 迭代器是一种...
在protobuf中,`repeated`限定修饰符是一个非常重要的概念,用于表示一个字段可以有多个值,类似于数组或列表。本文将深入探讨`repeated`限定修饰符的使用及其相关知识点。 首先,我们需要理解protobuf的基本语法。...
正则修饰符示例:\w+$ 表示匹配以一个或者多个字母结尾re.M 可以进行多行匹配,每个换行都认为是一个结尾不实用re.M修饰符,只会匹配到最后的 man。
今天是review,所以一些基础的概念就不做介绍了,先来看正则中的修饰符以及它的功能: 修饰符 •re.I 使匹配对大小写不敏感 •re.L 做本地化识别匹配 •re.M 多行匹配,影响^和$ •re.S 使.匹配包括换行在内的所有...
- 封装:通过访问修饰符实现数据的保护。 3. 模块与包: - Python标准库:了解Python自带的模块,如os、sys、math等,以及如何导入和使用它们。 - 第三方模块:如numpy用于科学计算,pandas用于数据分析,...
访问控制修饰符在面向对象编程语言中扮演着至关重要的角色,主要用于保护数据安全、实现封装原则。Java中提供了四种不同的访问控制级别: 1. **public**:表示公开的。这意味着,无论哪个类(包括其他包中的类)都...
2. **历史背景**:在JavaScript之前,Perl和Python等语言已经支持`s`修饰符,使得`.`可以跨行匹配。JavaScript的这一更新是为了保持与其他语言的兼容性。 3. **应用场景**:这个修饰符在处理多行文本,尤其是从用户...
3. **面向对象编程的差异**:Python 和 Java 都支持面向对象编程,但在 Python 中,类定义可以更简洁,没有 Java 中的 `public`、`private` 等访问修饰符。Java 中的继承、接口和抽象类也需要相应地转换。Python 中...
在Python中,可以通过访问修饰符来实现封装,如`public`(默认,无需修饰符)、`private`(前缀`_`)和`protected`(前缀`__`)。封装有助于保护数据,防止外部代码随意修改对象状态。 6. 多态: 多态允许不同类的...
在Python中,通常通过设置访问修饰符来实现封装,尽管Python没有像Java那样的严格访问控制,但我们可以使用下划线(_)来暗示不鼓励直接访问的属性或方法。例如,一个类可以有一个`__private`变量,表示这是内部使用...
- **访问控制**:通过public、private和protected修饰符控制成员的访问权限。 4. **高级特性**: - **装饰器**:允许在不修改原有函数代码的情况下,扩展其功能。 - **生成器**:通过yield关键字创建迭代器,...
以上是对Python程序设计题库中涉及的知识点的详细解析,涵盖了Python的特点、字符串格式化、数据类型、参数传递、文件类型、方法类型、函数定义、递归以及匿名函数等核心概念。希望这些信息对学习和考试准备有所帮助...
封装则通过访问修饰符保护数据;多态允许不同类型的对象对同一消息作出响应。 Python还拥有丰富的内置函数,如len()用于获取序列长度,type()用于检查变量类型,print()用于输出信息。此外,还有异常处理机制,通过...
- 封装与抽象:讲解如何通过访问修饰符实现数据封装,以及如何通过接口实现抽象。 3. **异常处理** - 异常和错误:了解Python中的异常结构,如何捕获和处理异常,以及常见的内置异常类型。 - 错误调试:学习如何...
Python通过访问修饰符(如`public`、`private`)来实现封装,尽管Python没有严格的访问控制,但通常遵循一定的命名约定。 5. 抽象:抽象是将复杂系统分解为一系列独立的组件,每个组件代表系统的某个方面。在Python...