gpt4 book ai didi

python - python 参数解包的操作顺序在哪里?

转载 作者:行者123 更新时间:2023-12-02 02:22:38 24 4
gpt4 key购买 nike

http://docs.python.org/2/reference/expressions.html#operator-precedence

我的猜测是,它属于字典查找上方的桶之一,因为

func(*mydict[mykey])

首先进行字典查找。有没有比我最初的链接更好的图表,可以更详细地了解 python 中的操作顺序?

最佳答案

解包*不是一个操作符;它是调用语法的一部分。它在 Calls 下定义,您可以在其中看到:

["," "*" expression]

… 可以是两个不同位置的 argument_list 的一部分。 (语义在以“如果有更多位置……”和“如果语法……”开头的段落中描述。)

所以它需要任何表达式。您可以看到没有运算符将完整的表达式作为其直接参数。因此,如果您想松散地将 * 视为一个运算符,它的绑定(bind)比任何运算符都更松散。但请记住,它实际上并不是一个运算符。

另请记住,这在 Python 3.x 中已全部更改。但基本思想是相同的 - 参数解包和赋值解包都采用表达式,而不仅仅是primary,因此松散地说比任何运算符都更松散地绑定(bind),这全部采用主要或更具体的内容。

<小时/>

同时,您可能想尝试在代码上运行解析器以查看它的作用:

>>> import ast
>>> tree = ast.parse('func(*mydict[mykey])')
>>> ast.dump(tree)
"Module(body=[Expr(value=Call(func=Name(id='func', ctx=Load()), args=[], keywords=[],
starargs=Subscript(value=Name(id='mydict', ctx=Load()),
slice=Index(value=Name(id='mykey', ctx=Load())), ctx=Load()), kwargs=None))])"

您可以看到整个 Subscript 表达式最终作为 Callstarargs

ast 模块使用 Abstract Grammar而不是引用手册中描述的。它对事物有不同的名称,并且不处理一些被认为是语法一部分但实际上是在比解析器更高级别完成的事情,等等——但是,另一方面,它更容易理解一次全部。您可以看到用于 starargsexpr 可以是下标

关于python - python 参数解包的操作顺序在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60276690/

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