gpt4 book ai didi

python - 三元运算符python中的加星号表达式

转载 作者:行者123 更新时间:2023-12-01 01:17:59 24 4
gpt4 key购买 nike

我编写了一个 python 程序,用于打印字符串中最多每 3 个数字的 ascii 值,如果长度不能被 3 整除,则打印 "ERROR" 。当我遇到 SyntaxError 时,我正在编写代码。

代码:

c=input()
p=len(c)
c=[int(c[i:i+3])for i in range(0,len(c),3)]
print("ERROR"if p%3else*map(chr,c),sep='')#SyntaxError here

但这有效:

c=input()
p=len(c)
c=[int(c[i:i+3])for i in range(0,len(c),3)]
print(*map(chr,c),sep='')

* 之前或 3 之后添加空格不起作用。我可以只使用 ''.join 但它多了一个字符。我的问题是为什么我不能在三元运算符中使用加星号的表达式?

最佳答案

因为 * 必须应用于生成参数集的整个表达式,而不是其中的一部分,而且不是有条件的。在内部,CPython 使用不同的字节码进行解包调用和普通调用,因此您的条件将要求它根据 print 的参数更改字节码以调用 print,本质上将您编写的内容重写为伪代码,例如:

if p % 3:
call(print, "ERROR", sep='')
else:
call_varargs(print, *map(chr, c), sep='')

这超出了编译器的能力。

如果您想让这项工作成功,您可以执行以下操作:

print(*(("ERROR",) if p%3 else map(chr,c)), sep='')

这确保整个三元计算结果为可解包序列,并无条件解包任何幸存的内容,避免困惑。

关于python - 三元运算符python中的加星号表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54137593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com