当前位置:   article > 正文

python定义输入函数_在Python函数中输入参数

python写一个类并且函数要输入参数

有人能解释我为什么需要这种“头痛”......

对于您的具体示例,似乎没有任何仅限关键字的参数。相反,你试图传递第一,第二和第四个参数的参数,而不必传递你不关心的参数之间的参数。

换句话说,这根本不是头疼。这是一个你很容易忽视的便利(和理智检查) - 但可能不想。

而不是这个:PatternFill('FFFFFF', 'FFFFFF', fill_type='solid')

......你可以这样写:PatternFill('FFFFFF', 'FFFFFF', Color(), 'solid')

...但是为了知道您需要发送的内容,您需要阅读源或文档以查看整个参数列表,并查看要跳过的参数的默认值,并明确添加它们给你打电话。

我怀疑有人会发现更好。

此外,正如多个人在评论中指出的那样,这几乎就是命名参数在C#中的作用。

而这个类是,一不小心,为什么Python中实际上是一个很好的例子,也只允许关键字参数,即使他们没有被用在这里。

事实上,你可以写,PatternFill('FFFFFF', 'FFFFFF', 'solid')而不是得到一个TypeError不好的参数PatternFill,但相反,一个关于'solid'不作为颜色工作的神秘错误,这不是一件好事。并且(至少没有类型暗示注释,这种类型没有),你的IDE或任何其他工具都无法捕捉到这个错误。

事实上,通过不使用关键字,你甚至没有意识到错误的初始论点。你几乎肯定想要这样做:PatternFile(None, 'FFFFFF', 'FFFFFF')

...但你没有明显错误就逃脱了:PatternFile('FFFFFF', 'FFFFFF')

...这意味着您将前景色作为图案类型传递,将背景色作为前景色并保留默认背景色。

这可以通过使所有或大多数参数仅限关键字来解决。但是,如果没有仅限关键字的参数,唯一的选择就是**kwargs,并且这种权衡通常是不值得的。

引用PEP 3102的基本原理,该提议为该语言添加了仅限关键字的参数:通常情况下,函数需要采用可变数量的参数。Python语言使用'varargs'语法(* name)支持这一点,该语法指定任何'遗留'参数作为元组传递给varargs参数。

对此的一个限制是,目前,必须在vararg插槽之前填充所有常规参数槽。

这并不总是令人满意的。人们可以很容易地设想一个带有可变数量参数的函数,但也可以以关键字参数的形式获取一个或多个“选项”。目前,唯一的方法是定义一个varargs参数和一个'keywords'参数(**kwargs),然后从字典中手动提取所需的关键字。

如果不明显为什么使用*args并且**kwargs不够好:查看源,内联help或自动生成的文档中的函数定义时,函数的实际签名不可见。

使用inspect模块或类似物的动态反射代码也不能使用签名。

该签名也不适用于静态反射代码,类似于许多IDE用于完成和建议的代码。

该功能的实现是不太清楚,因为充其量是半样板用于提取和测试参数,在最坏的情况将args和kwargs访问分散在整个函数体。

有关此功能允许的示例,请考虑内置print函数,您可以像这样调用:print(x, y, z, sep=', ')

这是因为print定义如下:print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False):

如果它不是用于关键字参数,则无法将其sep作为与要打印的实际值不同的内容传递。

你可以强制用户传递一个元组中的所有对象而不是单独的参数,但这样会更不友好 - 即使你这样做了,flush没有传递所有值的值也没有办法传递sep,end和file。

而且,即使使用关键字参数,如果它不是仅用于关键字的参数,那么函数签名必须如下所示:print(*objects, **kwargs):

...这会让你更难弄清楚你可以传递什么关键字参数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/356198
推荐阅读
相关标签
  

闽ICP备14008679号