Python oneliner if 条件与多个语句用逗号和分号分隔

Posted

技术标签:

【中文标题】Python oneliner if 条件与多个语句用逗号和分号分隔【英文标题】:Python oneliner if condition with multiple statements separated with commas and semicolons 【发布时间】:2021-11-16 14:34:33 【问题描述】:
a = True

if a : print('msg1'), print('msg2');
# msg1 and msg2 are printed

if a : print('msg1'), print('msg2'), b = 1;
# if a : print('msg1'), print('msg2'), b = 1;
#       ^
# SyntaxError: can't assign to function call

if a : print('msg1'); print('msg2'); b = 1;
# msg1 and msg2 are printed and b is also assigned the value 1

if a : b = 1; c = 5; print(b), print(c)
# b and c are assigned values 1 and 5, and both are printed

第一个 if 语句与两个打印语句之间的逗号一起使用。 第三个 if 语句同样适用于所有用分号分隔的语句。

逗号和分号组合的第二个 if 语句不再起作用。 第 4 个 if 语句,打印语句用逗号分隔,普通语句用分号分隔。

所以在我看来,虽然打印语句可以用逗号分隔,但普通语句不能。因此,最好在单行 if 语句中用分号分隔所有内容。

有人可以解释/确认这背后的逻辑吗?

【问题讨论】:

你没有分离任何东西,你将打印语句连接在一起以从它们的返回值创建一个元组 生产单线的要求只会把你拉进沟里。将语句分成多行是显而易见的 Pythonic 解决方案,并且无需精心设计。 【参考方案1】:

当您执行a, bfunction(value), function(value) 时,这与function(value); function(value) 非常不同。逗号有效地创建了一个元组,而分号分隔语句。这就是为什么分配在分号示例中有效但在逗号示例中无效的原因:

# this is the form of the comma statement
print('a'), b = 1

# raises a syntax error

# this is what the semicolon statements look like
print('a')
b = 1

真正的解决方法:停止尝试将所有内容都写成单行。比较这两种说法:

if a: b = 1; print('msg1'), print('msg2')

if a:
    b = 1
    print('msg1')
    print('msg2')

第二个更容易阅读,也不那么混乱。仅仅因为它适合一行并不能使它更好。

【讨论】:

以上是关于Python oneliner if 条件与多个语句用逗号和分号分隔的主要内容,如果未能解决你的问题,请参考以下文章

认识python 变量 数据类型 if条件

Python 2.7 学习笔记 条件与循环语句

python基础--条件语句if else

python的if和while如何放多个条件判断?

python的if和while如何放多个条件判断?

python-条件判断