python通过装饰器检查函数参数数据类型的方法

yipeiwu_com7年前Python基础

本文实例讲述了python通过装饰器检查函数参数数据类型的方法。分享给大家供大家参考。具体分析如下:

这段代码定义了一个python装饰器,通过此装饰器可以用来检查指定函数的参数是否是指定的类型,在定义函数时加入此装饰器可以非常清晰的检测函数参数的类型,非常方便

复制代码 代码如下:
def accepts(exception,**types):
    def check_accepts(f):
        assert len(types) == f.func_code.co_argcount, \
        'accept number of arguments not equal with function number of arguments in "%s"' % f.func_name
        def new_f(*args, **kwds):
            for i,v in enumerate(args):
                if types.has_key(f.func_code.co_varnames[i]) and \
                    not isinstance(v, types[f.func_code.co_varnames[i]]):
                    raise exception("arg '%s'=%r does not match %s" % \
                        (f.func_code.co_varnames[i],v,types[f.func_code.co_varnames[i]]))
                    del types[f.func_code.co_varnames[i]]
            for k,v in kwds.iteritems():
                if types.has_key(k) and not isinstance(v, types[k]):
                    raise exception("arg '%s'=%r does not match %s" % \
                        (k,v,types[k]))
            return f(*args, **kwds)
        new_f.func_name = f.func_name
        return new_f
    return check_accepts
def exmaple():
    @accepts(Exception,a=int,b=list,c=(str,unicode))
    def test(a,b=None,c=None)
        print 'ok'
    test(13,c=[],b='df')

希望本文所述对大家的Python程序设计有所帮助。

相关文章

python 获取本机ip地址的两个方法

第一种:复制代码 代码如下: import socket import fcntl import struct def get_ip_address(ifname): s = socke...

Pycharm新手教程(只需要看这篇就够了)

Pycharm新手教程(只需要看这篇就够了)

pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycha...

简单实现python数独游戏

网上看到一个python写的数独,很好玩,分享给大家。 import random import itertools from copy import deepcopy def m...

解决phantomjs截图失败,phantom.exit位置的问题

刚刚学习使用phantomjs,根据网上帖子自己手动改了一个延时截图功能,发现延时功能就是不能执行,最后一点点排查出了问题。 看代码: var page = require('web...

解决python中画图时x,y轴名称出现中文乱码的问题

解决python中画图时x,y轴名称出现中文乱码的问题

如下所示: #-*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt from matplot...