gpt4 book ai didi

python - 特征 : **kwargs allowing improperly named variables

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:01 25 4
gpt4 key购买 nike

以下是无效的python:

def myInvalidFun(kw arg zero=6):
pass

以下是有效的python:

def myValidFun(**kwargs):
if kwargs.has_key("kw arg zero"):
pass

然而,调用 myValidFun 是很棘手的。例如,接下来的几种方法不起作用:

myValidFun(kw arg zero=6)      # SyntaxError: invalid syntax
myValidFun("kw arg zero"=6) # SyntaxError: keyword can't be an expression

kwargs = dict("kw arg zero"=6) # SyntaxError: keyword can't be an expression
myValidFun(**kwargs)

(也许与最后两个相同的错误暗示了幕后发生的事情?)然而,这确实有效:

kwargs = {"kw arg zero": 6}
myValidFun(**kwargs)

根据用于创建词典的 {:} 语法,有没有特别说明 myValidFun("kw arg zero"=6) 无效的原因?

(更多背景:我有一个很像字典的类,只有大量的验证,还有一个 __init__ 使用字典的条目构建容器,但不是dictionary...它实际上是一个 XML ElementTree,它在某些方面类似于列表,在其他方面类似于字典。__init__ 方法必须采用诸如“我的第一个元素”和“my_first_element”之类的键,并且考虑它们不同的东西。类和 __init__ 与 **kwargs 一起工作得很好,但初始化我的类是一个多线,以我的示例的形式工作,并且看起来它可以更简单。 )

编辑:我理解标识符的概念,我的无效代码就是为了说明这一点。我想我的问题应该改写为:

为什么以下有效?:

myValidFun(**{"invalid identifier":6})

最佳答案

python 函数的关键字必须是有效的标识符。这是因为在另一方面,它们需要被解包成标识符(变量):

def foo(arg=3):
print arg

你拥有的大多数东西都不是有效的标识符:

kw arg zero  #Not valid identifier -- Can't have spaces
"kw arg zero" #Not valid identifier -- It's parsed as a string (expression)

dict("kw arg zero" = 6)

与解析器没有区别

myValidFunc("kw arg zero" = 6)

现在正如您所指出的,您可以传递 View 映射打包/解包 (**kwargs)。但是,它只能通过字典访问。

关于python - 特征 : **kwargs allowing improperly named variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com