日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python函数参数类型检查_Python中实现参数类型检查的简单方法

發布時間:2023/12/4 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python函数参数类型检查_Python中实现参数类型检查的简单方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python是一門弱類型語言,很多從C/C++轉過來的朋友起初不是很適應。比如,在聲明一個函數時,不能指定參數的類型。用C做類比,那就是所有參數都是void*類型!void類型強制轉換在C++中被廣泛地認為是個壞習慣,不到萬不得已是不會使用的。

Python自然沒有類型強制轉換一說了,因為它是動態語言。首先,所有對象都從Object繼承而來,其次,它有強大的內省,如果調用某個不存在的方法會有異常拋出。大多數情況,我們都不需要做參數類型栓查,除了一些特殊情況。例如,某個函數接受一個str類型,結果在實際調用時傳入的是unicode,測試過程中又沒有代碼覆蓋到,這樣問題就比較嚴重了。解決方法也很簡單,借助Python的內省,很容易就能判斷出參數的類型。但是每個地方都寫檢查代碼會很累贅,何況它帶來的實際價值并不高。一個好的解決方法是使用裝飾器。

'''

>>> NONE, MEDIUM, STRONG = 0, 1, 2

>>>

>>> @accepts(int, int, int)

... def average(x, y, z):

... return (x + y + z) / 2

...

>>> average(5.5, 10, 15.0)

TypeWarning: 'average' method accepts (int, int, int), but was given

(float, int, float)

15.25

'''

def accepts(*types, **kw):

""" Function decorator. Checks that inputs given to decorated function

are of the expected type.

Parameters:

types -- The expected types of the inputs to the decorated function.

Must specify type for each parameter.

kw -- Optional specification of 'debug' level (this is the only valid

keyword argument, no other should be given).

debug = ( 0 | 1 | 2 )

"""

if not kw:

# default level: MEDIUM

debug = 1

else:

debug = kw['debug']

try:

def decorator(f):

def newf(*args):

if debug == 0:

return f(*args)

assert len(args) == len(types)

argtypes = tuple(map(type, args))

if argtypes != types:

msg = info(f.__name__, types, argtypes, 0)

if debug == 1:

print >> sys.stderr, 'TypeWarning: ', msg

elif debug == 2:

raise TypeError, msg

return f(*args)

newf.__name__ = f.__name__

return newf

return decorator

except KeyError, key:

raise KeyError, key + "is not a valid keyword argument"

except TypeError, msg:

raise TypeError, msg

def info(fname, expected, actual, flag):

""" Convenience function returns nicely formatted error/warning msg. """

format = lambda types: ', '.join([str(t).split("'")[1] for t in types])

expected, actual = format(expected), format(actual)

msg = "'%s' method " % fname \

+ ("accepts", "returns")[flag] + " (%s), but " % expected\

+ ("was given", "result is")[flag] + " (%s)" % actual

return msg

總結

以上是生活随笔為你收集整理的python函数参数类型检查_Python中实现参数类型检查的简单方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。