仅位置参数

positionalonl的Python项目详细描述


仅位置参数/参数

模块以伪造仅位置参数(PEP 497,草稿)。

以下面的函数为例:

defdiff(left,right,context=3):'''print the diff between `left` and `right` with `context`
'''...

rightleft现在是api的一部分,用户可以决定 使用diff(left=str1, right=str1),阻止API更改,因此您不能 更改参数的名称,例如 def diff(old, new, context=3)不使用c-api。

这个模块提供了一个decorator@positionally,使 函数的默认参数较少,因此您可以 写入:

@positionalonly
def diff(left, right, context=3):
...

usingit like将引发一个typeerror,函数签名将使用 pep 497的/的仅位置参数语法。

>>> diff(right="bar", left="foo")
TypeError: The following parameters of `diff` are positional only.
They were used as keywords arguments:
- 'right' ('bar') should be in 2nd position
- 'left' ('foo') should be in 1st position

>>> help(diff)
Help on function diff in module __main__:

diff(left, right, /, context=3)

高级用法

默认情况下,positionalonly将限制 仅位置参数和第一个参数之前的其他参数 默认参数。你可以通过传递一个整数来判断这种行为 作为参数,指示仅用于定位的参数数量:

>>> @positionalonly(3)
... def diff(old, new, context=3)
... pass

>>> signature(diff)
diff(left, right, context=3, /)


>>> @positionalonly(1)
... def diff(old, new, context=3)
... pass

>>> signature(diff)
diff(left, /, right, context=3)

如果你懒得数数,或者害怕数错, positionalonly还将决定将限制放在第一个 默认值为positionalonly本身的参数。

>>> @positionalonly
... def diff(old, new, end=positionalonly, context=3)
... pass

>>> signature(diff)
diff(left, right, /, context=3)

>>> pos_or_kw
>>> @positionalonly
... def diff(old, start=pos_or_kw, context=3)
... pass

>>> signature(diff)
diff(left, /, right, context=3)

仅使用位置的原因

参数的命名,特别是函数签名可以是 帮助完成制表符和静态分析以理解代码。 虽然posistional只能使用*args,但它隐藏了所有这些 来自人类和计算机的信息。

python的默认行为是通过dafult、positional 关键字。

这个事实经常阻止开发人员在没有 打破API。

这还可以防止任意的**kwargs键被 “位置或关键字”参数。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
@SpringBootTest的java一次性配置   java如何在JSF中使用facelets创建左导航窗格?   [Java]检查一个数字是否为素数,使用extra-isPrime标志不起作用   关于java中的单线计算器的一个问题?   Java代码在Java环境中运行良好,但在Android环境中抛出错误   java使用int数组的元素初始化字符串   sqlquery中的mysql Java Hibernate常量   java在使用同一实例时从外部类调用内部类方法   中的java CriteriaBuilder   对JPA实体使用BaseEntity时,Sonar中的java“等于错误”   java获取数组的平均值   java ANDROID:在主细节流布局的另一个活动中更新数据   java如何使用SpringGateway以字符串形式获取响应体?   jsp中分页公告板的javasql