【问题标题】:Are there any dangers associated with using kwarg=kwarg in Python functions?在 Python 函数中使用 kwarg=kwarg 是否有任何危险?
【发布时间】:2016-08-01 23:40:45
【问题描述】:

我有时会在如下所示的函数之一中看到带有 kwarg=kwarg 的代码:

def func1(foo, kwarg):
    return(foo+kwarg)
def func2(bar, kwarg):
    return(func1(bar*2, kwarg=kwarg))

print(func2(4,5))

我通常会尝试避免这种表示法(例如,通过使用 kwarg1=kwarg2)以避免任何可能的错误,但这真的有必要吗?

【问题讨论】:

  • 通常你会看到**kwargs。另外,return 不需要括号
  • 您认为这段代码的哪个特定方面可能是危险的?如果您担心的话,对参数和传递的值使用相同的名称并没有错。
  • @user2357112 我只是觉得这个符号看起来有点奇怪。显然,我不期望上面的简单示例会出现问题,但我想知道当代码变得更复杂时,上面的符号是否会导致问题。
  • kwarg=kwarg 的“更复杂”示例是什么?我在这里看到的最大问题是命名一个简单的变量kwarg,这很荒谬。应该为 **kwargs 语法保留这样的名称。

标签: python function notation keyword-argument


【解决方案1】:

没有什么错误 - 在这种情况下,kwarg 只是一个变量名 - 它不是保留的。不过可能会有一些混淆,因为def func(**kwargs): 是创建传递给函数的所有“关键字参数”的字典的常用语法。由于您在这里没有这样做,因此使用如此相似的名称会造成不必要的混乱。虽然不清楚您是否在谈论使用该确切名称,但也许这只是示例的问题。

但从广义上讲,传递something=something 是相当普遍的做法。你会在很多地方看到它,例如,如果你在 Matplotlib 中迭代一个调色板,你可能会将 color=color 传递给 plot,或者如果你在 Pandas 中构建一个标题列表,你可能会传递coloumns=columns 变成 DataFrame

底线是应该清楚的。如果是,那很好。如果不是,则不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2017-05-20
    • 2018-07-27
    • 1970-01-01
    相关资源
    最近更新 更多