for循环的else子句
for循环可以有一个else子句;它在循环迭代完整个列表时执行,但循环被break中止的情况下不会执行。以下搜索素数的示例程序演示了这个子句:
<pre>
for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print n, 'equals', x, '*', n/x
... break
... else:
... # loop fell through without finding a factor
... print n, 'is a prime number'
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
</pre>
函数默认值解析
函数默认值会解析,并且只赋值一次
<pre>
i = 5
def f(arg=i):
print arg
i = 6
f()
结果如下:
5
</pre>
默认值只赋值一次,默认值为引用对象时如下:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
# 结果如下:
[1]
[1, 2]
[1, 2, 3]
想想如何改进...
函数参数
def parrot(voltage,action='voom',*arguments,**keywords):
分别是参数、可选参数、可变参数,关键字参数
可变参数接收一个元祖,关键字参数接收一个字典
Lambda
通过lambda关键字,可以创建短小的匿名函数。这里有一个函数返回它的两个参数的和:lambda a,b:a+b 。分号前面是参数,分后后面是返回值。Lambda 形式可以用于任何需要的函数对象。出于语法限制,它们只能有一个单独的表达式。
lambda 形式可以从外部作用域引用变量:
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43