语法(*(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或语法不标准?
我试图找到信息,但我甚至无法获得关键字。没有人在谈论解压缩的语法重新打包。
在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(我认为)通过解包引入了构造元组,dicts等的这些新方法。
你可能在这两个环境中使用了2个不同版本的python-3.x.
这是dict
s的另一个有趣的例子。合并两个词,
d = {**d1, **d2}
这里是PEP-448 - 介绍了这种语法
*
运算符,它通常不用于这种用法 - 更多用于函数调用中的可变参数。如果有的话,使用一两个迭代器,它会更清晰。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
祝好运!