Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python**kwargs循环中的修改_Python_Python 3.x - Fatal编程技术网

Python**kwargs循环中的修改

Python**kwargs循环中的修改,python,python-3.x,Python,Python 3.x,当我试图运行下面的程序时,我在第二个循环中得到错误消息 第二个func得到了多个值,我希望这个程序在循环中运行。 我的假设是Kwargs Rude不会以相同的值再次更新 问题1:kwargs.update(animal=“Lion”)是修改值的正确方法吗 问题2:为什么我会收到错误消息 以下代码仅用于学习目的,无其他意图。 感谢您的帮助 我使用Python 3.6 第二个函数下面的错误消息(变量1,**kwargs,Rude=“leone”) TypeError:Second_Func()为关键

当我试图运行下面的程序时,我在第二个循环中得到错误消息 第二个func得到了多个值,我希望这个程序在循环中运行。 我的假设是Kwargs Rude不会以相同的值再次更新

问题1:kwargs.update(animal=“Lion”)是修改值的正确方法吗

问题2:为什么我会收到错误消息

以下代码仅用于学习目的,无其他意图。 感谢您的帮助

我使用Python 3.6

第二个函数下面的错误消息(变量1,**kwargs,Rude=“leone”) TypeError:Second_Func()为关键字参数获取了多个值 “粗鲁”


欢迎来到StackOverflow

这里有几件事

  • 在python中,我们倾向于为类名保留titleCaseName(像这样),而对变量和函数只使用小写。这只是惯例,但你应该采纳
  • 如果您只是想替换字典中某个键的值,那么
    kwargs['animal']='Lion'
    就足够了
    kwargs
    实际上只是一本字典,没有什么特别之处。
    **
    只是告诉函数将所有额外的关键字arg合并到该dict中
  • 问题是这个程序再次是递归的(
    Third\u Func
    调用
    First\u Func
    )。因此,在第一次使用时,
    first_Func
    将kwarg
    Rude
    设置为
    “leone”
    ,然后将其传递到函数行。然后,当它再次回到
    First_Func
    时,
    kwargs
    现在包含调用堆栈中的键
    'Rude'
    。然后,您试图将原始的
    Rude
    kwarg(在
    kwargs
    内部)和
    Rude
    的第二个副本通过kwarg文本传递到
    second\u Func
    。当名为kwarg的名称有两个值时,Python不知道您的意思,所以它会像这样崩溃
  • 希望能澄清问题

    示例代码:

    def a(**kwargs):
        for key, val in kwargs.items():
            print(key, value)
    
    >>a(arg1=2, **{'arg1': 7})
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: a() got multiple values for argument 'arg1'
    
    def a(**kwargs):
    对于键,kwargs.items()中的val:
    打印(键、值)
    >>a(arg1=2,***{'arg1':7})
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    TypeError:a()为参数“arg1”获取了多个值
    
    欢迎来到StackOverflow

    这里有几件事

  • 在python中,我们倾向于为类名保留titleCaseName(像这样),而对变量和函数只使用小写。这只是惯例,但你应该采纳
  • 如果您只是想替换字典中某个键的值,那么
    kwargs['animal']='Lion'
    就足够了
    kwargs
    实际上只是一本字典,没有什么特别之处。
    **
    只是告诉函数将所有额外的关键字arg合并到该dict中
  • 问题是这个程序再次是递归的(
    Third\u Func
    调用
    First\u Func
    )。因此,在第一次使用时,
    first_Func
    将kwarg
    Rude
    设置为
    “leone”
    ,然后将其传递到函数行。然后,当它再次回到
    First_Func
    时,
    kwargs
    现在包含调用堆栈中的键
    'Rude'
    。然后,您试图将原始的
    Rude
    kwarg(在
    kwargs
    内部)和
    Rude
    的第二个副本通过kwarg文本传递到
    second\u Func
    。当名为kwarg的名称有两个值时,Python不知道您的意思,所以它会像这样崩溃
  • 希望能澄清问题

    示例代码:

    def a(**kwargs):
        for key, val in kwargs.items():
            print(key, value)
    
    >>a(arg1=2, **{'arg1': 7})
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: a() got multiple values for argument 'arg1'
    
    def a(**kwargs):
    对于键,kwargs.items()中的val:
    打印(键、值)
    >>a(arg1=2,***{'arg1':7})
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    TypeError:a()为参数“arg1”获取了多个值
    
    • 问题1:是的,
      kwargs.update
      是正确的方法之一。但是根据一些观察,比 分配。请阅读更多关于此的信息

    • 问题2:因为从
      Third\u Func
      再次调用
      First\u Func
      ,之前收集了所有Kwarg。然后,当
      Second\u Func
      再次通过添加
      Rude=“leone”
      调用,您将得到以下结果 错误请注意,此时
      kwargs
      已经包含 键
      Rude
      ,这样会出现重复

    还要注意的是,即使解决了这个问题,您也会得到一个无止境的递归。

    • 问题1:是的,
      kwargs.update
      是正确的方法之一。但是根据一些观察,比 分配。请阅读更多关于此的信息

    • 问题2:因为从
      Third\u Func
      再次调用
      First\u Func
      ,之前收集了所有Kwarg。然后,当
      Second\u Func
      再次通过添加
      Rude=“leone”
      调用,您将得到以下结果 错误请注意,此时
      kwargs
      已经包含 键
      Rude
      ,这样会出现重复

    还要注意的是,即使修复了这个问题,您也会得到一个无止境的递归