获取(*(1,2),*(3,4))
的语法(1,2,3,4)
是否受标准支持,因此是可移植的,还是只是实现定义的语法,因此应该避免吗?
在使用notepad ++插件的python控制台时,我发现了两者
bytes((*range(ord('a'),ord('z')+1),*range(ord('A'),ord('Z')+1))).decode()
和
"".join(map(chr,(*range(ord('a'),ord('z')+1),*range(ord('A'),ord('Z')+1))))
但是这些引起了相同的SyntaxError。但是我在Windows IDLE 3.6.3 Shell和ubuntu python 3.6.5($ python3
)中进行了尝试,并且都可以使用。
所以我在npp python插件控制台中尝试了(*(1,2), *(3,4))
,与IDLE和ubuntu相比,它引起了相同的错误。
是因为npp插件控制台不很好地支持python还是语法不标准?
我试图查找信息,但我什至无法获取关键字。没有人在谈论解压缩语法。
答案 0 :(得分:1)
在Python 3.7中,它有效
x = (*(1,2), *(3,4))
在python 3.4中不是
x = (*(1,2), *(3,4))
File "main.py", line 1
x = (*(1,2), *(3,4))
^
SyntaxError: invalid syntax
Python 3.5(我认为)介绍了通过解包构造元组,字典等的这些新方法。
您可能在这两个环境中使用了两个不同版本的python-3.x。
这是dict
的另一个有趣示例。合并两个字典,
d = {**d1, **d2}
这是PEP-448-引入了这种语法
答案 1 :(得分:0)
您共享的代码在Python 3.5+中受支持,但在任何较早的版本中均不支持。
在这里我不建议您使用*
运算符,它通常不用于这种用法-更多用于函数调用中的可变参数。如果有的话,请使用一两个迭代器,使其更清晰。
result = \
"".join(chr(c) for c in range(ord('a'), ord('z')+1)) + \
"".join(chr(c) for c in range(ord('A'), ord('Z')+1))
简单性和可维护性在实际代码中非常重要。
import string
result = string.ascii_lowercase + string.ascii_uppercase
祝你好运!