python 学习笔记 五

函数

下面看一个打印斐波那契数列的函数:

def fabs(n):
    a, b = 0, 1
    while a < n:
        print a
        a, b = b, a+b

 

从这个例子可以看除Python函数的结构.

记录函数

如果想要给函数写文档, 可以加如注释(#开头), 另一种方式是直接写上字符串, 比如在def语句后面, 在函数定义下面的字符串会作为函数的一部分进行存储, 这称为文档字符串.

例如:

def squart(x):
    'Calculates the squart of the number x.'
    return x*x

可以这样访问文档字符串:

>>> sqare.__doc__

关键字参数和默认值

定义函数时, 可以为参数设置默认值, 这样调用函数时可以不提供参数:

>>>  def hello(greeting='Hello', name='world'): print'%s, %s' % (greeting, name)

>>> hello()

Hello, world

此外, 调用函数时, 可以为实参指定形参关键字, 这样可以忽略参数顺序的影响, 例:

>>> hello(name='bob', greeting='Hi, ')

Hi, bob

收集参数

在参数前面加上*号可以将所有值放入同一个元组中, 可以说是将这些值收集起来, 然后使用.

能处理关键字的收集操作: **, 将参数收集为字典.

反转过程

有这样一个函数:

def add(x, y): return x + y

有这样一个元组:

params = (1, 2)

这样调用函数:

add(*params)

函数式编程

  1.map(function, sequence)

对每一个序列元素调用函数, 返回包含所有函数返回值的列表

>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

  2.filter(function, sequence)

filter函数可以基于一个返回布尔值的函数对元素进行过滤, 它返回包含一些元素的序列, 这些元素在funcrtion(item)返回True. 如果序列是字符串或元组, 结果将是相同的类型, 否则, 结果总是一个列表.例如:

>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
  

   3.lambda

匿名函数可以用lambda关键字创建. Lambda可以用于需要函数对象的地方:

>>> fileter[lambda x: x % 2 != 0 and x % 3 != 0, seq]

注: map和filter在目前版本Python中并不是特别有用, 可以使用列表推导式代替, 例如:

>>> [x for x in range(1, 25) if x % 2 != 0 and x % 3 != 0]

 

 

 

posted @ 2014-05-23 12:56  TonyZheng  阅读(146)  评论(0编辑  收藏  举报