【问题标题】:kwargs different behaviorkwargs 不同的行为
【发布时间】:2022-11-21 10:12:13
【问题描述】:

亲爱的蟒蛇专家,这个问题是给你的! 我不要求解决我的任务,只要求解释为什么会发生) 当他们使用时我知道什么是 args 和 kwargs 但当我发现一件事时真的很震惊。所以,请检查我的示例,这里我们将参数传递给函数

def firstFunc(*args, **kwargs):
    print('args' )
    print(args)
    print('kwargs')
    print(kwargs)
    
firstFunc([1, 2], {'firstFirst': 'firstFirst', 'first' : '123', 'second' : '999'})

我的第二个问题是,为什么我们可以从第二个函数中获取字典, 如果我们像这样设置它 kwargs['second'] = 222, 那是我的代码

def firstFunc(*args, **kwargs):
    print('args' )
    print(*args)
    print('kwargs')
    print(**kwargs)
    kwargs['second'] = 222
    secondFunc([1, 2], **kwargs)


def secondFunc(*args, **kwargs):
    print('args' )
    print(args)
    print('kwargs')
    print(kwargs)



firstFunc([1, 2], {'firstFirst': 'firstFirst', 'first' : '123', 'second' : '999'})

希望我描述的是可以理解的,我在等你的回答,请告诉我为什么会这样,为什么我不能把字典作为 kwargs 传递! 非常感谢你

#python #pythonic #kwargs #args #functions

我希望只有我的 kwargs 字典

【问题讨论】:

  • 要在不扩展字典的情况下使用kwargs,请执行firstFunc(firstFirst='firstFirst', first='123', second='999')

标签: python function keyword-argument


【解决方案1】:

您将列表和字典作为两个位置参数传递,因此这两个位置参数显示在函数主体的 *args 中,而 **kwargs 是一个空字典,因为没有提供关键字参数。

如果要将列表的每个元素作为其自己的位置参数传递,请使用 * 运算符:

firstFunc(*[1, 2])

如果您还想将字典的每个元素作为关键字参数传递,请使用 ** 运算符:

firstFunc(
    *[1, 2],
    **{'firstFirst': 'firstFirst', 'first' : '123', 'second' : '999'}
)

这相当于做:

firstFunc(
    1,
    2,
    firstFirst='firstFirst',
    first='123',
    second='999'
)

【讨论】:

  • 和这样的语法 - kwargs['second'] = 222 对我们有用,我的意思是把 **?
  • kwargs['second'] = 222 只是在kwargs dict 中设置'second' 键的值。
  • 谢谢听起来很有意义,好像当你调用一个没有()的对象时,你只是调用引用而不是对象的例子
  • 老实说,我建议不要使用*args**kwargs根本直到您更习惯于定义常规 Python 函数。让函数接受可变参数仅在某些情况下有用,如果您还不了解基础知识,它只会减慢您的速度。
猜你喜欢
  • 2014-06-19
  • 2017-04-21
  • 1970-01-01
  • 2018-09-05
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多