擅长:python、mysql、java
<p>Python使用<code>*</code>/<code>**</code>进行“取消打包”和“打包”,这取决于它是否用于变量赋值</p>
<pre><code>def foo(*args,**kwargs):...
</code></pre>
<p>在本例中,所有非关键字的arg都被放入一个tuple<code>args</code>,所有kwarg都被打包到一个新字典中。传入的单个变量仍然打包到元组(<code>*</code>)或dict(<code>**</code>)中</p>
<p>这是一种混血儿</p>
<pre><code>first,*i_take_the_rest,last = range(10)
>>> first=0,i_take_the_rest=[1,2,3,4,5,6,7,8],last=9
*a,b = range(1)
>>> a=[],b=0
</code></pre>
<p>但在这里,它可以打开:</p>
<pre><code>combined_iterables = [*range(10),*range(3)]
merged_dict = {**first_dict,**second_dict}
</code></pre>
<p>因此,基本上,如果它位于equals的左侧,或者如果它用于函数/方法定义中,比如<code>*foo</code>,那么它将把内容打包到列表或元组中(分别)。然而,在理解中,它具有解包行为</p>