首页 > 代码库 > Python 2.7 Tutorial 中文版
Python 2.7 Tutorial 中文版
循环可以有一个 else 子句;它在循环迭代完整个列表(对于 for )或执行条件 为 false (对于 while )时执行,但循环被 break 中止的情况下不会执行。
以下搜索素数的示例程序演示了这个子句
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‘
默认值在函数 定义 作用域被解析,如下所示
i = 5
def f(arg=i):
print arg
i = 6
f()
will print 5.
引入一个形如 **name 的参数时,它接收一个字典(参见 typesmapping ) ,该字典包含了所有未出现 在形式参数列表中的关键字参数。
这里可能还会组合使用一个形如 *name (下一小节詳細介绍) 的形 式 参数,它接收一个元组(下一节中会详细介绍),包含了所有没有出现在形式 参数列表中的参数值。
( *name 必须在 **name 之前出现) 例如,我们这样定 义一个函数
def cheeseshop(kind, *arguments, **keywords):
print "-- Do you have any", kind, "?"
print "-- I‘m sorry, we‘re all out of", kind
for arg in arguments: print arg
print "-" * 40
keys = keywords.keys()
keys.sort()
for kw in keys: print kw, ":", keywords[kw]
It could be called like this:
它可以像这样调用
cheeseshop("Limburger", "It‘s very runny, sir.",
"It‘s really very, VERY runny, sir.",
shopkeeper=‘Michael Palin‘,
client="John Cleese",
sketch="Cheese Shop Sketch")
and of course it would print:
当然它会按如下内容打印
-- Do you have any Limburger ?
-- I‘m sorry, we‘re all out of Limburger
It‘s very runny, sir.
It‘s really very, VERY runny, sir.
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
出于实际需要,有几种通常在函数式编程语言例如 Lisp 中出现的功能加入到了 Python 。
通过 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
你也可以把链表当做队列使用,队列作为特定的数据结构,最先进入的元素最先 释放(先进先出)。不 过,列表这样用效率不高。
相对来说从列表末尾添加和弹 出很快;在头部插入和弹出很慢(因为,为了一 个元素,要移动整个列表中的所 有元素)。
要实现队列,使用 collections.deque ,它为在首尾两端快速插入和 删除而设计。例如
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
‘Eric‘
>>> queue.popleft() # The second to arrive now leaves
‘John‘
>>> queue # Remaining queue in order of arrival
deque([‘Michael‘, ‘Terry‘, ‘Graham‘])
filter(function, sequence) 返回一个sequence(序列),包括了给定序列中所有调用 function(item) 后返回值为true的元素。(如果可能的话, 会返回相同的类型)。
如果该序列(sequence) 是一个 string (字符串)或者 tuple (元组),返回值必定是同一类型,否则,它 总是 list 。
>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
map(function, sequence) 为每一个元素依次调用 function(item) 并将返回值 组成一个链表返回。例 如,以下程序计算立方
>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
可以传入多个序列,函数也必须要有对应数量的参数,执行时会依次用各序列上 对应的元素来调用函数 (如果某些序列比其它的短,就用 None 来代替)。
如果把 None做为一个函数传入,则直接返回参数做为替代。例如
>>> seq = range(8)
>>> def add(x, y): return x+y
...
>>> map(add, seq, seq)
[0, 2, 4, 6, 8, 10, 12, 14]
reduce(func, sequence) 返回一个单值,它是这样构造的:首先以序列的 前两个元素调用函数 function ,再以返回值和第三个参数调用,依次执行下去。
例如,以 下程序计算 1 到 10 的整数之和
>>> def add(x,y): return x+y
...
>>> reduce(add, range(1, 11))
55
Python 2.7 Tutorial 中文版