python:动态参数*args
<p><strong><span style="font-size: 18pt">动态参数</span></strong></p><p> 顾名思义,动态参数就是传入的参数的个数是动态的,可以是1个、2个到任意个,还可以是0个。在不需要的时候,你完全可以忽略动态函数,不用给它传递任何值。</p>
<p>Python的动态参数有两种,分别是<span style="color: rgba(255, 102, 0, 1)"><code>*args</code></span>和<span style="color: rgba(255, 102, 0, 1)"><code>**kwargs</code></span>,这里面的关键是一个和两个星号的区别,而不是<span style="color: rgba(255, 102, 0, 1)"><code>args</code></span>和<span style="color: rgba(255, 102, 0, 1)"><code>kwargs</code></span>在名字上的区别,实际上你可以使用<span style="color: rgba(255, 102, 0, 1)"><code>*any</code></span>或<span style="color: rgba(255, 102, 0, 1)"><code>**whatever</code></span>的方式。但就如self一样,默认大家都使用<span style="color: rgba(255, 102, 0, 1)"><code>*args</code><span style="color: rgba(0, 0, 0, 1)">和</span><code>**kwargs</code></span>。</p>
<p>注意:动态参数,必须放在所有的位置参数和默认参数后面!</p>
<div class="codehilite">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> func(name, age, sex=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">male</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(255, 102, 0, 1)">*args</span>, <span style="color: rgba(255, 102, 0, 1)">**</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 102, 0, 1)">kwargs</span>):
</span><span style="color: rgba(0, 0, 255, 1)">pass</span></pre>
</div>
<p><span style="font-size: 18px"><strong>*args</strong></span></p>
<p><span style="font-size: 18px">一个星号表示接收任意个参数。调用时,会将实际参数打包成一个<span style="color: rgba(255, 102, 0, 1)">元组</span>传入形式参数。如果参数是个列表,会将整个列表当做一个参数传入。例如:</span></p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> func(*<span style="color: rgba(0, 0, 0, 1)">args):
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
*表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
:param args:
:return:
</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)"> args
</span><span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> args:
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)"> i
func({</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kobe</span><span style="color: rgba(128, 0, 0, 1)">'</span>}, 123, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">'</span>, [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>])</pre>
</div>
<p> </p>
<p>运行结果:</p>
<div class="cnblogs_code">
<pre>({<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kobe</span><span style="color: rgba(128, 0, 0, 1)">'</span>}, 123, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">'</span>, [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
{</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kobe</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">}
</span>123<span style="color: rgba(0, 0, 0, 1)">
hello
[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>]</pre>
</div>
<p>可以看到,先打印了args参数,是一个元组,再分别打印了传入的每个参数。</p>
<p>有时候我们传入一个列表,本意是希望将列表中的所有元素都当做参数传递进去,这里直接将['a', 'b', 'c']看做一个整体了,怎么办?</p>
<p>其实只需要在调用时前面加一个<span style="color: rgba(255, 102, 0, 1)"><strong>*号</strong>,<span style="color: rgba(0, 0, 0, 1)">就能实现将列表中的每个元素传递进去了。</span></span></p>
<p><span style="color: rgba(255, 102, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">其实不光列表,任何序列类型数据对象,比如字符串、元组都可以通过这种方式将内部元素逐一作为参数,传递给函数。而字典,则会将所有的key逐一传递进去。</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> func(*<span style="color: rgba(0, 0, 0, 1)">args):
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
*表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
:param args:
:return:
</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> args:
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)"> i
func(</span>*[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>])</pre>
</div>
<p>输出结果:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">a
b
c</span></pre>
</div>
<p><strong>特别的,调用时只能有一个参数前添加*号,且必须放在最后面</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> func(*<span style="color: rgba(0, 0, 0, 1)">args):
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
*表示接收任意个数量的参数,调用时会将实际参数打包为一个元组传入实参
:param args:
:return:
</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> args:
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)"> i
func(</span>123, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">'</span>, [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>], *{<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kobe</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">'</span>: 41})</pre>
</div>
<p>输出:将字典的key值作为参数传入了</p>
<div class="cnblogs_code">
<pre>123<span style="color: rgba(0, 0, 0, 1)">
hello
[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
age
name</span></pre>
</div>
<p> </p>
</div><br><br>
来源:https://www.cnblogs.com/gcgc/p/11426478.html
頁:
[1]