python函数的参数:
可变参数:
Python函数的参数是可以使用可变参数的.可变参数以一个list或tuple
def fun(*m):
<span style="white-space:pre"> </span>sum=0
<span style="white-space:pre"> </span>for n in m
<span style="white-space:pre"> </span>sum+=n
<span style="white-space:pre"> </span>return sum
fun(1,2,3)<span style="white-space:pre"> </span># output: 6
fun(2,5,6,9)<span style="white-space:pre"> </span># output: 22
l=[1,2,3,4]
fun(*l)<span style="white-space:pre"> </span># output: 10
关键字参数:
关键字参数允许传入带参数名的参数,这些关键字参数在函数内部形成一个dict
def fun(**kw):
<span style="white-space:pre"> </span>print kw
fun(name='xiaoming',age=7)<span style="white-space:pre"> </span># output: {'name'='xiaoming','age'=7}
d={'name'='xiaoming','age'=7}
fun(**d)<span style="white-space:pre"> </span># output: <span style="font-family: Arial, Helvetica, sans-serif;">{'name'='xiaoming','age'=7}</span>
参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
生成器(generator)
我们知道,Python中允许有列表生成式([x*x for x in range(10)]). 但是有的时候当数据规模很大,我们可以考虑另一种形式:生成器.
生成器只需要把列表生成式的[ ]换成( )就可以实现,使用.next()方法可以依次取出元素.实际使用的时候,通常使用for来迭代.
g=(x*x for x in range(10))
g.next()<span style="white-space:pre"> </span># output: 1
g.next()<span style="white-space:pre"> </span># output: 4
for x in g:
<span style="white-space:pre"> </span>print x<span style="white-space:pre"> </span># output: 1 4 9 16 25 ...
另一种生成器的形式是函数生成器,函数中讲输出的位置换成 yield.这个函数就变成了生成器,每次使用 .next()方法的时候,都会执行到yield处停止, 下次再调用 .next()的时候,会从上次yield的位置继续执行. 同样,也可用for来迭代.
def fun(n):
<span style="white-space:pre"> </span>for x in range(n):
<span style="white-space:pre"> </span>yield x*x
o=fun(10)
o.next()<span style="white-space:pre"> </span># output: 1
o.next()<span style="white-space:pre"> </span># output: 4
<pre name="code" class="python">
</pre>for x in o:<span style="white-space:pre"> </span>print x<span style="white-space:pre"> </span># output: 1 4 9 16 25 ...