【问题标题】:What does [E, ]**F mean?[E, ]**F 是什么意思?
【发布时间】:2020-03-03 07:01:45
【问题描述】:

来自dict.update() 文档字符串:

D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.

[E, ]**F 是什么意思?

【问题讨论】:

    标签: python dictionary syntax


    【解决方案1】:

    update 可以接受现有的字典(或可迭代的键/值对)作为其可选的位置参数[E, ],以及其他显式键/值对作为关键字参数**F

    例如:

    >>> d = {'a': 1}
    >>> e = {'b': 2}
    >>> d.update(e, c=3)  # dict positional argument
    >>> d
    {'a': 1, 'b': 2, 'c': 3}
    >>> d.update([('d', 4), ('e', 5)], f=6)  # iterable positional argument
    >>> d
    {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
    >>> d.update(g=7)  # no positional argument
    >>> d
    {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7}
    

    【讨论】:

    • 能否请您分解每个部分并告诉我您是如何阅读的? [] 告诉你什么,, 告诉你什么,** 等等。
    • [E,] 表示E(以及将其与任何后续关键字参数分开的逗号)是可选的,**F 表示零个或多个关键字参数。这些字母本身并没有任何意义。 d.update(e,) 是合法的,虽然很少写。 d.update(,c=3) 以逗号开头,是合法的,这就是为什么逗号在[...]E 内的原因。
    • 这意味着即使省略了E,也需要逗号,但这不是合法的Python语法。
    • PEP 570以来,您是否认为此签名实际上记录不正确?
    • 你的意思是,应该是D.update(E=None, / **F)之类的东西吗?可能。文档字符串现在只是使用非正式的类似于 ABNF 的表示法。