首页 > 代码库 > 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 ? -- Im sorry, were all out of Limburger Its very runny, sir. Its 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 中文版