【问题标题】:Python: Left-side bracket assignmentPython:左侧括号赋值
【发布时间】:2012-07-14 21:07:10
【问题描述】:

所以我在Kotti中找到了这段代码:

[child] = filter(lambda ch: ch.name == path[0], self._children)

我想知道:左边的方括号有什么作用?我在 python shell 中做了一些测试,但我不太清楚它的目的。 额外问题:lambda 返回什么?我猜是(Boolean, self._children) 的元组,但这可能是错误的......

【问题讨论】:

    标签: python kotti


    【解决方案1】:

    这是一个列表解包,一个只有一个元素的列表。等价物是:

    child = filter(lambda ch: ch.name == path[0], self._children)[0]
    

    (如果self._children 的多个元素满足条件,则例外情况——在这种情况下,Kotti 的代码会抛出错误(太多值无法解包),而上面的代码将使用列表中的第一个) .

    另外:lambda ch: ch.name == path[0] 返回TrueFalse

    【讨论】:

    • 真棒答案!我从来不知道这件事。
    • 如果这回答了你的问题,别忘了接受它:-)
    • 哈!对不起,我不能马上接受,所以我忘记了。谢谢提醒。
    【解决方案2】:
    [child] = filter(lambda ch: ch.name == path[0], self._children)
    

    这会将 child 设置为 result 的第一个元素。它是 list[0] = ...[0] 的语法糖。也可以是两个元素,比如[a, b] = [10, 20],就是a = 10; b = 20的糖

    另外,右边的元素个数应该和左边一样,否则会抛出异常

    【讨论】:

    • [a, b] = [10, 20] 不是a, b = 10, 20 的糖(我认为你的意思是-a = 10, b = 20 不是有效的python。)它大致等价,但我不会称它为“糖” " 因为它并没有让程序员变得更容易。如果有的话,它会让程序员额外输入 2 个字符。
    • 然后使用分号,因为它是有效的python并且是2行代码的同义词:a = 10; b = 20
    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多