关于python:如何编写内联if语句用于打印?

How to write inline if statement for print?

我只需要在布尔变量设置为True时打印一些东西。 所以,看了之后,我尝试了一个简单的例子:

1
2
3
4
5
6
7
>>> a = 100
>>> b = True
>>> print a if b
  File"<stdin>", line 1
    print a if b
             ^
SyntaxError: invalid syntax

如果我写print a if b==True,同样的事情。

我在这里错过了什么?


Python没有尾随的if语句。

Python中有两种if

  • if声明:

    1
    2
    3
    if condition: statement
    if condition:
        block
  • if表达式(在Python 2.5中引入)

    1
    expression_if_true if condition else expression_if_false
  • 请注意,print ab = a都是语句。只有a部分是表达式。所以,如果你写

    1
    print a if b else 0

    它的意思是

    1
    print (a if b else 0)

    而且当你写作时也是如此

    1
    x = a if b else 0

    它的意思是

    1
    x = (a if b else 0)

    现在,如果没有else子句,它会打印/分配什么?打印/分配仍在那里。

    请注意,如果您不希望它出现在那里,您总是可以在一行上编写常规if语句,尽管它的可读性较差,并且没有理由避免使用两行变体。


    内联if-else EXPRESSION必须始终包含else子句,例如:

    1
    a = 1 if b else 0

    如果你想保持'a'变量值不变 - 确定旧的'a'值(语法要求仍然需要):

    1
    a = 1 if b else a

    当b变为False时,这段代码保持不变。


    'else'语句是强制性的。你可以做这样的事情:

    1
    2
    3
    4
    5
    6
    7
    8
    >>> b = True
    >>> a = 1 if b else None
    >>> a
    1
    >>> b = False
    >>> a = 1 if b else None
    >>> a
    >>>

    编辑:

    或者,根据您的需要,您可以尝试:

    1
    >>> if b: print(a)


    如果您不想from __future__ import print_function,可以执行以下操作:

    1
    2
    3
    4
    a = 100
    b = True
    print a if b else"",  # Note the comma!
    print"see no new line"

    哪个印刷品:

    1
    100 see no new line

    如果你没有厌恶from __future__ import print_function或正在使用python 3或更高版本:

    1
    2
    3
    4
    from __future__ import print_function
    a = False
    b = 100
    print(b if a else"", end ="")

    添加else是您需要做的唯一更改,以使您的代码在语法上正确,您需要条件表达式的else("in else if else blocks")

    我没有像线程中的其他人那样使用None0的原因是因为在b False的情况下使用None/0会导致程序print Noneprint 0 >。

    如果您想阅读有关此主题的信息,我已经添加了一个指向该功能添加到Python的补丁的发行说明的链接。

    上面的'模式'与PEP 308中显示的模式非常相似:

    This syntax may seem strange and backwards; why does the condition go
    in the middle of the expression, and not in the front as in C's c ? x
    : y? The decision was checked by applying the new syntax to the
    modules in the standard library and seeing how the resulting code
    read. In many cases where a conditional expression is used, one value
    seems to be the 'common case' and one value is an 'exceptional case',
    used only on rarer occasions when the condition isn't met. The
    conditional syntax makes this pattern a bit more obvious:

    contents = ((doc + '
    ') if doc else '')

    所以我认为总的来说这是一种合理的方法来解决它但你无法与简单的方法争论:

    1
    if logging: print data


    从2.5开始,您可以使用C的"?:"三元条件运算符,语法为:

    1
    [on_true] if [expression] else [on_false]

    所以你的例子很好,但你只需添加else,就像:

    1
    print a if b else ''


    您可以使用:

    1
    print (1==2 and"only if condition true" or"in case condition is false")

    同样,你可以继续前进:

    1
    print 1==2 and"aa" or ((2==3) and"bb" or"cc")

    现实世界的例子:

    1
    2
    3
    4
    5
    >>> print"%d item%s found." % (count, (count>1 and 's' or ''))
    1 item found.
    >>> count = 2
    >>> print"%d item%s found." % (count, (count>1 and 's' or ''))
    2 items found.


    这可以通过字符串格式化来完成。它适用于%表示法以及.format()和f-strings(新到3.6)

    1
    print '%s' % (a if b else"")

    要么

    1
    print '{}'.format(a if b else"")

    要么

    1
    print(f'{a if b else""}')


    试试这个 。它可能对你有帮助

    1
    2
    3
    4
    5
    a=100
    b=True

    if b:
       print a

    对于您的情况,这适用:

    1
    a = b or 0

    编辑:这是如何工作的?

    在问题中

    1
    b = True

    所以评估

    1
    b or 0

    结果是

    1
    True

    分配给a

    如果b == False?b or 0将计算到将被分配给a的第二个操作数0


    你只是过于复杂。

    1
    2
    if b:
       print a


    如果出现以下情况,您在内联中始终需要else

    1
    a = 1 if b else 0

    但更简单的方法是a = int(b)


    好吧,你为什么不写简单:

    1
    2
    3
    4
    if b:
        print a
    else:
        print 'b is false'

    嗯,你可以用列表理解来做到这一点。如果你有一个真正的范围,这只会有意义..但它确实做了这个工作:

    1
    print([a for i in range(0,1) if b])

    或仅使用这两个变量:

    1
    print([a for a in range(a,a+1) if b])