智能位置参数操作
typeargs的Python项目详细描述
更智能的位置参数处理
安装
通过PIP安装:
$ pip install typeargs
完成。
如果你坚持采用(稍微)困难的安装方式,从源头上, 你已经知道怎么做了,不需要我的帮助。
我以后可能会将源上载到: https://github.com/TaylorSMarks/typeargs
文档
当调用普通的python函数时,它会盲目地传入位置参数,然后传入关键字参数。
假设您有一个这样的签名函数,就像tkinter中的许多情况一样:
defmakeWidget(master=None,contents='',x=0,y=0,xSpan=1,ySpan=1):
现在要调用此函数,而不指定主控形状。以下是您通常的选择:
makeWidget(None,'This is impossible to read.',5,7,2,2)
快点!不看签名,最后那些数字到底是什么?通常你用这个来解决它:
makeWidget(s='Better, but so much typing...',x=5,y=7,xSpan=2,ySpan=2)
既然包含了所有的名称,就更容易知道每个参数是什么,但是它太冗长了……有点重。
这就是typeargs的来源。如果回到原来的函数并用typeargs装饰它:
@typeargs(Master,str,int,int,int,int)defmakeWidget(master=None,s='',x=0,y=0,xSpan=1,ySpan=1):
现在,来电者只需键入以下内容:
makeWidget('Hello World!',2,2,x=5,y=7)
好了,怎么了?很明显我们的琴弦是hello world!,x是5,y是7,我们还有两个int参数。必须是xspan和yspan,并且没有包含master,所以它将使用默认的none。
通过基于位置参数的类型智能地处理位置参数,您可以跳过需要默认值的参数,而不必对每个名称使用关键字参数。
另一个例子-假设您想在最后传入master:
makeWidget('Hello World!',2,2,x=5,y=7,master=Master('Window'))makeWidget('Hello World!',2,2,Master('Window'),x=5,y=7)
任何一个都可以-我们只是让论点的传递比正常的要聪明一点。
另一个例子是1.1.0中的new,如果需要,现在可以使用正则表达式匹配字符串参数。不需要预先定义re对象-如果需要的话,它们可以在decorator调用中正确。
fromtypeargsimportre,typeargsphoneNumber=re(r'\d{3}-\d{4}')ssn=re(r'\d{3}-\d{2}-\d{4}')fullName=re(r'\w+ \w+')@typeargs(fullName,ssn,phoneNumber)definfos(fullName,ssn,phoneNumber):print(fullName,ssn,phoneNumber)infos('752-2723','Taylor Marks','123-45-6789')# Prints out ('Taylor Marks', '123-45-6789', '752-2723')