Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元组中的星号、列表和集合定义、dict定义中的双星号_Python_Python 3.x_Iterable Unpacking_Pep448 - Fatal编程技术网

Python 元组中的星号、列表和集合定义、dict定义中的双星号

Python 元组中的星号、列表和集合定义、dict定义中的双星号,python,python-3.x,iterable-unpacking,pep448,Python,Python 3.x,Iterable Unpacking,Pep448,我现在正在使用Python 3.5解释器,发现了非常有趣的行为: >>> (1,2,3,"a",*("oi", "oi")*3) (1, 2, 3, 'a', 'oi', 'oi', 'oi', 'oi', 'oi', 'oi') >>> [1,2,3,"a",*range(10)] [1, 2, 3, 'a', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> ('aw','aw',*range(10),*(x**2 fo

我现在正在使用Python 3.5解释器,发现了非常有趣的行为:

>>> (1,2,3,"a",*("oi", "oi")*3)
(1, 2, 3, 'a', 'oi', 'oi', 'oi', 'oi', 'oi', 'oi')
>>> [1,2,3,"a",*range(10)]
[1, 2, 3, 'a', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ('aw','aw',*range(10),*(x**2 for x in range(10)))
('aw', 'aw', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
>>> {"trali":"vali", **dict(q=1,p=2)}
{'q': 1, 'p': 2, 'trali': 'vali'}
>>> {"a",1,11,*range(5)}
{0, 1, 2, 3, 4, 11, 'a'}
尽管我有多年的Python经验,但无论是在文档和示例中,还是在任何源代码中,我都从未见过这种情况。我发现它非常有用

从Python语法的角度来看,这似乎是合乎逻辑的。函数参数和元组可以使用相同或类似的状态进行解析

这是记录在案的行为吗?记录在哪里

哪些版本的Python具有此功能?

这是Python 3.5中新增的功能

相关变更日志位于:

PEP 448扩展了
*
iterable解包运算符和
**
字典解包运算符的允许使用范围。现在可以在函数调用中使用任意数量的解包:

>>>

>>> print(*[1], *[2], 3, *[4, 5])
1 2 3 4 5

>>> def fn(a, b, c, d):
...     print(a, b, c, d)
...

>>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
1 2 3 4
类似地,元组、列表、集合和字典显示允许多个解包:

>>>

>>> *range(4), 4
(0, 1, 2, 3, 4)

>>> [*range(4), 4]
[0, 1, 2, 3, 4]

>>> {*range(4), 4, *(5, 6, 7)}
{0, 1, 2, 3, 4, 5, 6, 7}

>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}

那只是
*
**
解包。你熟悉吗?@TigerhawkT3不知道。但现在我知道这叫拆包。我在函数调用中多次使用它,但从未在这个上下文中使用过。我猜您使用的是3.5,它为此扩展了功能。我在这台机器上的3.4设置不起作用,我的另一台电脑上只有3.5。(没关系,我注意到你现在正在使用3.5。)