当前位置: 首页 > 面试题库 >

functools.partial希望使用位置参数作为关键字参数

劳高爽
2023-03-14
问题内容

所以我试图理解partial

import functools

def f(x,y) :
    print x+y

g0 = functools.partial( f, 3 )
g0(1)

4 # Works as expected

在:

g1 = functools.partial( f, y=3 )
g1(1)

4 # Works as expected

在:

g2 = functools.partial( f, x=3 )
g2(1)

TypeError: f() got multiple values for keyword argument 'x'

TypeError如果y用作关键字参数,该消失:

在:

g2( y=1 )

4

是什么原因造成的TypeError


问题答案:

确实与这无关functools.partial。您实际上是这样调用函数的:

f(1, x=3)

Python首先满足位置参数,而您的第一个参数是x。然后,应用关键字参数,并 再次 提供x

functools.partial()无法检测到您已经提供了第一个位置参数作为关键字参数。通过用y=关键字参数替换位置参数,不会增加您的通话次数。

在混合使用位置参数和关键字参数时,必须注意不要重复使用同一参数。



 类似资料:
  • 问题内容: 具体来说,我正在尝试使用字符串任意过滤ORM。我已经尝试过exec和eval解决方案,但是我遇到了麻烦。下面的代码不起作用,但这是我知道如何解释我要去的地方的最好方法 问题答案:

  • 我已经开始使用JAVA,并使用RxTx进行串行通信。 指:http://rxtx.qbang.org/wiki/index.php/Event_based_two_way_Communicationhttp://henrypoon.wordpress.com/2011/01/01/serial-communication-in-java-with-example-program/ 在第二个链接中,

  • 问题内容: 我是Python的新手,我正在尝试制作一个哈希表,该哈希表检查键是否指向表中的值,如果不是,则将其初始化为空数组。我的代码中令人反感的部分是这一行: 我得到错误: 但是在文档(以及各种示例代码)中,我可以看到它确实采用了默认参数: https://docs.python.org/2/library/stdtypes.html#dict.get http://www.tutorialsp

  • 问题内容: 我以为我可以在Python 2的函数调用中在变长位置参数之后使用命名参数,但是在导入python类时得到了提示。例如,我正在使用以下“ get”方法编写: 错误看起来像: 我希望能够以几种方式调用该方法: 等等 问题答案: 它确实有效,但仅在Python 3中有效。请参阅PEP 3102。浏览“新功能”文档后,似乎没有2.x向后移植,因此您很不走运。您必须接受任何关键字参数()并手动对

  • 目前为止,我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应。而本节将介绍的关键字参数,则可以避免牢记参数位置的麻烦,令函数的调用和参数传递更加灵活方便。 关键字参数 是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。 因此,Python 函数的参数名应该具有更好的语义,这样程序可以立刻明

  • 问题内容: 解决以下问题 的最有效方法 是什么?从交互式外壳程序: 目前,我正在解决以下问题: 但是看起来很笨拙… (python 2.7+或3.2+解决方案都可以) 问题答案: 使用关键字参数解包: