python 中的@符号
周海汉 /文
2010.4.11
http://blog.csdn.net/ablo_zhou
python 2.4以后,增加了@符号修饰函数对函数进行修饰,python3.0/2.6又增加了对类的修饰。
我现在使用的python版本,支持对class的修饰:
zhouhh@zhouhh-home:~$ python
Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
@修饰符挺像是处理函数或类之前进行预处理。
语法示例:
@dec1
@dec2
def test(arg):
pass
其效果类似于
dec1(dec2(test(arg)))
修饰函数还可以带参数。
@dec1(arg1,arg2)
def test(testarg)
效果类似于
dec1(arg1,arg2)(test(arg))
用法示例
示例1 参数类型和返回值类型检查
对于python这样的动态语言,不像C++这样的一开始就有严格静态的类型定义。但是,在某些情况下,就需要这样的类型检查,那么可以采用@修饰的方式。下面的示例就是检查输入参数类型和返回值类型的例子。
#coding:utf8
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
if __name__ == '__main__ ':
a = func( 3 , 'asdf ')
zhouhh@zhouhh-home:~$ ./checktype.py
Traceback (most recent call last):
File "./checktype.py", line 27, in <module>
@returns((int,float))
File "./checktype.py", line 5, in check_accepts
assert len(types) == f.func_code.co_argcount
AssertionError
其实,xml-rpc中,对于函数参数,返回值等都需要采用xml的方式传递到远程再调用,那么如何检查类型呢?就可以用到如上的@修饰符。
python 中的@符号相关推荐
- python中的@符号的作用
python中的@符号的作用_weixin_34014555的博客-CSDN博客 Python中的" @"(@)符号有什么作用?_p15097962069的博客-CSDN博客
- python中哪个符号用于从包中导入模块__学小易找答案
[简答题]7个积分题 [单选题]5. Is it time for the meeting now? [单选题]result = lambda x: x * x print(result(5)) 以上 ...
- python中的符号下划线_详解Python中下划线的使用方法
编程派微信号:codingpy 这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线 _ 的不同用法绝大部分(不全是)都是一种惯例约定. 单个下划线(_) 主要有三种情况: ...
- python各种常用符号的意思_写一篇专门介绍python中各种符号的意义及用法
挖槽,小米今天上市就破发了,好多认购的小伙伴有点慌了,其实对于小帅b来说这很正常,没必要慌,保持持有就好了,相信小米会越来越牛逼的.小米和可能会成为互联网新一代的霸主主一,到时候可能就不是BAT了,而 ...
- python中特殊符号怎么输入_python中怎么输入引号
Python中的引号可分为单引号.双引号和三引号. 在Python中我们都知道单引号和双引号都可以用来表示一个字符串,比如str1 = 'python' str2 = "python&quo ...
- python中求和符号怎么打_SymPy求和表达式中的代换符号
我想替换求和中的符号并打印出计算的表达式,但当我尝试这样做时,会遇到错误.在 正确的方法是什么?这可能吗?在 我用这种方式创建了一个求和表达式:>>> from sympy impo ...
- python中四则运算符号_Python-四则运算-蔡晓晴,杜婷萱
一.需求 1.使用-n 参数控制生成题目的个数 2.使用-r 参数控制题目中数值(自然数.真分数和真分数分母)的范围 3.生成的题目中计算过程不能产生负数 4. 生成的题目中如果存在形如e1 ÷ e2 ...
- Python中的符号
解释经常在python源码中看到的@,->和:等符号.python在函数名或类名首字母用_来表示私有接口(仅供内部使用). 标注 关联到某个变量.类属性.函数形参或返回值的标签,被约定作为类型提 ...
- python中运算符号怎样表示_Python中的运算符与表达式
你所编写的大多数语句(逻辑行)都包含了表达式(Expressions).一个表达式的简单例子便是 2+3.表达式可以拆分成运算符(Operators)与操作数(Operands). 运算符(Opera ...
- python中求和符号怎么打_参数siz向量的python符号求和与微分
您可以使用SymPy 1.0版中引入的新张量数组模块.在 我假设您的K和M参数是数字,而不是符号(否则我建议使用symphy.tensor.索引).在 考虑两个向量的长度.因此,X是秩2和形(2,3) ...
最新文章
- 数字化转型的研究方向
- 计算任何一天是星期几的几种算法
- 具有Spring的简单工作流引擎
- [vue] 说说组件的命名规范
- 第四十五期:程序员未来干什么?做架构还是做管理?
- [-1]是也乎,( ̄▽ ̄)
- python定时杀进程
- mysql mysql_real_connect 内存泄露
- SM系列国密算法(转)
- Linux安装,虚拟机VMware-workstation安装CentOS操作系统的安装手册
- 【GDB调试学习笔记】利用core文件调试程序
- 从Bus Hound开始学USB之U盘
- 安装element ui
- 渗透测试(445端口)
- 车辆碰撞起火事故的规律特点及常见起火原因 | 事故分析
- 阳明心学在敏捷开发中的应用
- 前端性能优化实践:让视频加载也“懒”一点
- Unity3D游戏开发从零单排(五) - 导入CS模型到Unity3D
- 什么是顶尖的互联网产品经理?
- android 电源管理