ChatGPT解决这个技术问题 Extra ChatGPT

如何编写用于打印的内联 if 语句?

只有当布尔变量设置为 True 时,我才需要打印一些东西。因此,在查看 this 之后,我尝试了一个简单的示例:

>>> a = 100
>>> b = True
>>> print a if b
  File "<stdin>", line 1
    print a if b
             ^
SyntaxError: invalid syntax  

如果我写 print a if b==True 也是一样。

我在这里想念什么?

好问题,复杂的答案......一个直接的问题是“其他部分是强制性的”。
需要注意的一件好事是 if expressionlambda 中有效,但 not 是单行语句。

J
Jan Hudec

Python 确实有一个尾随的if 语句

Python中有两种if

if 语句:if 条件:语句 if 条件:阻塞 if 表达式(在 Python 2.5 中引入) expression_if_true if condition else expression_if_false

请注意,print ab = a 都是语句。只有 a 部分是表达式。所以如果你写

print a if b else 0

它的意思是

print (a if b else 0)

同样当你写

x = a if b else 0

它的意思是

x = (a if b else 0)

现在如果没有 else 子句,它将打印/分配什么?打印/作业仍然存在

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


我认为 if condition: statement 在多行语句的情况下不起作用。
是的,但您不需要使用 if,只需使用我在示例中显示的布尔逻辑即可。
@JanHudec 如果 Python 没有尾随 if,那么为什么会这样:print [i for i in range(10) if i%2]?我希望他们允许它超出理解范围......
@mbomb007,这也不是一个尾随 if statement 。它只是列表(或生成器)理解的一部分。注意 if 之前的东西不是语句,它是两个表达式,它们之间有 for
@AlexandervonWernherr,是的,这听起来很合理。
J
Jan Hudec

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

a = 1 if b else 0

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

a = 1 if b else a

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


哦。但是如果我不想在 else 分支中发生任何事情怎么办?我需要类似的东西:print a if b
else a 会比 else 0 更好
if b: print a 在这种情况下只需要一个简单的 if
修正答案,因为如果不是因为“陈述”这个词使它变得完全糟糕,那几乎是好事。问题的要点是它不是一个陈述。
+1-1:很好地指出 else 表达式是强制性的,但不提供有关案例的答案是不好的:打印“无”(类似于 ""None 的内容,请参阅详细信息在其他答案中)。
A
Alexis Huet

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

>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>> 

编辑:

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

>>> if b: print(a)

N
Noelkd

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

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

哪个打印:

100 see no new line

如果您不习惯 from __future__ import print_function 或正在使用 python 3 或更高版本:

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

添加 else 是使代码语法正确所需的唯一更改,条件表达式需要 else (“inline if else 块”)

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

如果您想阅读有关此主题的信息,我在发行说明中包含了一个 link,以说明此功能已添加到 Python 中。

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

这种语法可能看起来很奇怪和倒退;为什么条件出现在表达式的中间,而不是像 C 的 c 那样在前面? x:是吗?通过将新语法应用于标准库中的模块并查看生成的代码如何读取来检查该决定。在许多使用条件表达式的情况下,一个值似乎是“常见情况”,一个值是“例外情况”,仅在不满足条件的极少数情况下使用。条件语法使这种模式更加明显: contents = ((doc + '\n') if doc else '')

所以我认为总的来说这是一种合理的方法,但你不能与以下简单性争论:

if logging: print data

谢谢。这里的事情是 print "" 仍然会打印一些东西:一个空行。
谢谢。 print 中的 end 参数只出现在 Python 3.x 中,对吗?
是的,我更像是一个 2.7 的男人,因此 from __future__ import print_function
C
Community

这可以通过 string formatting 完成。它适用于 % 符号以及 .format()f-strings(3.6 的新功能)

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

或者

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

或者

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

这与格式化无关;你可以做print a if b else ""。这正是 Noelkd 的回答所做的。
@melpomene 但打印“”广告一个新行,对于 Python2 使用 print "",(冒号)和对于 Python3 使用 print("", end="") 可以避免这种情况。
C
Community

从 2.5 开始,您可以使用 equivalent of C’s ”?:” ternary conditional operator ,语法为:

[on_true] if [expression] else [on_false]

因此,您的示例很好,但您只需添加 else,例如:

print a if b else ''

请注意,print '' 仍将打印换行符,Noelkd 的答案中避免了这一点。
Y
Yaakov Bressler

您可以像这样编写内联三元运算符:

sure = True

# inline operator
is_true = 'yes' if sure else 'no'

# print the outcome
print(is_true)

E
Eduardo

您可以使用:

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

同样,您也可以继续:

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

现实世界的例子:

>>> 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.

佚名

对于您的情况,这有效:

a = b or 0

编辑:这是如何工作的?

在问题中

b = True

所以评价

b or 0

结果是

True

分配给 a

如果是 b == False?,则 b or 0 将计算为将分配给 a 的第二个操作数 0


这个表达式的丑陋和容易出错是我们首先使用条件表达式的原因。
D
Duncan

尝试这个 。它可能会帮助你

a=100
b=True

if b:
   print a

M
Michael Petrotta

你只是过于复杂了。

if b:
   print a

当然,这是最简单的选择。我认为当时(2012 年 8 月)我想做类似的事情:if DEBUG: print something
重复的答案?见 SkariaArun,还有评论。
D
Daniel Roseman

在以下情况下,您始终需要在内联中使用 else

a = 1 if b else 0

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


-1:更容易。而且完全不可读。无论如何,这不是提问者想要的。
伊蒂姆a = int(bool(b))
G
George Mogilevsky

嗯,你可以用列表理解来做到这一点。这只有在你有一个真正的范围时才有意义..但它确实可以完成这项工作:

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

或仅使用这两个变量:

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

I
IcyFlame

那么你为什么不简单地写:

if b:
    print a
else:
    print 'b is false'