【问题标题】:multiple assignments in a sinlge line python as in Java like a=b=c?单行python中的多个赋值,就像在Java中一样a = b = c?
【发布时间】:2013-10-11 21:53:04
【问题描述】:

在 Java 中,这是有效的。单个语句中的多个赋值。

while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

python中有没有类似的东西。我试过了,但出现以下错误。

>>> file = open("reverse.py")
>>> while(x=file.readline()!=""):
  File "<stdin>", line 1
    while(x=file.readline()!=""):
           ^
SyntaxError: invalid syntax

【问题讨论】:

    标签: java python file variable-assignment


    【解决方案1】:

    赋值不是python中的表达式。基本上,while 需要一个表达式,而您正在给出一个语句。

    详细解释可以查看here

    【讨论】:

    • +10 个互联网。这一点很重要:赋值不是表达式而是语句,与许多其他语言不同。
    • 从文档复制的完整定义: expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist_star_expr))*)
    【解决方案2】:

    不,没有这样的事情。

    另一方面,Python 不需要这种语法。只需遍历文件对象:

    with open(filename) as fp:
        for line in fp:
            pass
    

    【讨论】:

    • 有这样的事情。 a = b = c = 42 是有效的,普通的日常python。
    【解决方案3】:

    多个作业有效(尽管可能不是您期望的方式):

    In [373]: a = b = c = 0x1234
    
    In [374]: a
    0x1234
    
    In [375]: b
    0x1234
    
    In [376]: c
    0x1234
    

    你的问题是 while 语法,它只是 while(predicate)。在 python 中,赋值不能是谓词的一部分。

    然而,大多数时候,你不需要 python 中的那些结构,因为它们是隐式的。你可以这样做:

    file = open('reverse.py')
    for line in file:
        <do something>
    

    它会自动在 EOF 处用 StopIteration 终止;您不需要进行手动哨点检查。更 Pythonic 的是使用上下文管理器:

    with open('reverse.py') as file:
        for line in file:
            <do something>
    

    与上述类似,但在您完成后也会自动关闭文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-26
      • 2017-05-16
      • 1970-01-01
      • 2015-11-14
      • 2011-06-13
      • 2023-03-31
      相关资源
      最近更新 更多