【问题标题】:What are these variables?这些变量是什么?
【发布时间】:2016-12-31 22:45:13
【问题描述】:

我知道这个问题可能会因为它的特殊性而得到一些负面评价,而且听起来很愚蠢。但是我对 Python 的语法还很陌生,我什至不确定“变量”是否是答案的一部分。所以,请保持冷静:)

我在 Github 上查看 this Repository

在这里,我在某些行看到了一些奇怪的东西(例如5789 等)。 作者放了一些下划线,后面加了一些逗号。虽然我不知道它们是什么意思

_, _, param1, params, _, _, expr, _ , app = node

据我所知,放置多个变量的语法是:

var1, var2 ,var3 = 1, 2, "3"

但此时我不知道会发生什么,因为简单的下划线不被视为变量,特别是当它们被多次使用(或者它们是?)并且 git 存储库中的语法不遵循上述规则时.

我搜索了一些 Python 的语法备忘单,但这与任何内容都不匹配。所以我想要你们中的一些人的帮助。 谢谢

-- 我的经验仅限于 C/C++/C#/Java/Javascript [...]

【问题讨论】:

    标签: python python-2.7 python-3.x syntax


    【解决方案1】:

    _ 通常用作标识符名称,当您想表明您不打算使用产生的值时。在 Python 的 REPL(Read-Eval 循环)中,它具有额外的语义(存储最后生成的值),但这里不是这种情况。

    解包时允许使用多个名称,这就是作者正在做的事情。 _ 的值将不断被覆盖以(最终)保留最后分配的值。这个值(对应于左侧最右边的 _ 的值)再次表明作者并没有真正打算使用。

    当然,他可以稍微修剪一下:

    *_, param1, params, _, _, expr, _ , app = node
    

    如果他愿意,这里的*_ 会抓取前两个值(以前写为_, _, param1, ...)并将它们扔掉。

    【讨论】:

    • 哦,我明白了......所以星号表示带有逗号的下划线? (顺便谢谢你)
    • 嗯,没有解释那么多@general656。赋值语句右侧名称前的* 捕获产生的任何多余值。例如,如果l = [1, 2, 3, 4] 并且您只想保留最后一个值,则可以执行*_, last = l 并让last 等于4_ 在列表中获取1, 2, 3 的其余项目(而且,由于_ 它是您选择的名称,表明您真的不打算使用它们。
    • @JimFasarakis-Hilliard 我相信你的意思是在左边
    • @Code-Apprentice 啊!我现在连编辑都不能!没错。
    猜你喜欢
    • 2021-01-31
    • 2012-07-20
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多