【问题标题】:Status of chained assignment in PythonPython中链式赋值的状态
【发布时间】:2012-12-12 22:19:12
【问题描述】:

有几次我偶然发现了 Python 中的 C 样式赋值,例如 a = b = 0。通过勤奋的谷歌搜索,我发现这被称为链式赋值:[1]、[2]、[3]。但是,official documentation 中似乎没有提及此功能。

这是否意味着链式分配仍处于实验阶段,或者仅仅是官方文档稍微落后于开发?

【问题讨论】:

    标签: python


    【解决方案1】:

    看起来官方文档确实提到了它?

    assignment_stmt ::=  (target_list "=")+ (expression_list | yield_expression)
                                          ^ here
    

    【讨论】:

    • @ssegvic: 以及它下面的叙述文本:并将单个结果对象分配给每个目标列表,从左到右。
    • from left to right 很重要!请注意,ys=[None]; zs=[True]; xs=ys; xs=xs[0]=zs 的效果是首先执行xs=zs,然后使xs 成为第一个元素为自身的循环列表。 C 中的并行语法将改为执行xs[0]=zs,然后将xs 重新绑定到zs。要在 Python 中实现 C 行为,您必须改为使用 xs[0] = xs = zs。 C 中 that 的并行语法会失败。如果在 C 和 Python 之间转换,这可能会出错!
    【解决方案2】:

    你可以使用链式赋值,但它不是 Pythonic 风格。

    来自 Python 之禅;; “平面比嵌套好。”

    【讨论】:

    • 这对我来说似乎不是这个座右铭的准确应用。
    • Ned,python 家族还有另一个座右铭,我们都是同意的成年人 :)
    猜你喜欢
    • 2015-11-28
    • 2021-05-05
    • 2015-11-27
    • 1970-01-01
    • 2021-02-11
    • 2011-03-24
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多