zoukankan      html  css  js  c++  java
  • 学学python(3):函数式编程

    1.       关键字参数

    比如你有一个函数定义为functestnameage),正常的调用方式为functest(‘cary‘,25),我们也可以指定参数来调用,如functestage=25name=cary‘),这样python的解释器就可以通过关键字来匹配参数的值了。

     

    2.       函数装饰器

    2.1.装饰器实际就是函数,一般装饰器可以放一些通用功能的代码来降低程序复杂度,比如日志功能。

    @deco

    def func():pass

    等价于:func=deco(func)

                下面是一个例子,tsdeco是一个显示何时调用函数的装饰器。

    from time import ctime, sleep

     

    def tsdeco(func):

        def wrappedFunc():

            print '[%s] %s() called' % (

                ctime(), func.__name__)

            return func()

        return wrappedFunc

     

    @tsdeco

    def func():

        print "func called"

     

    func()

    sleep(4)

    func()

    结果如下:

    [Fri Mar 05 14:23:04 2010] func() called

    func called

    [Fri Mar 05 14:23:08 2010] func() called

    func called

    3.       函数作为参数传递,下面是一个例子

    def convert(func, seq):

             'conv. sequence of numbers to same type'

             return [func(eachNum) for eachNum in seq]

     

    myseq = (123, 45.67, -6.2e8, 999999999L)

    print convert(int, myseq)

    print convert(long, myseq)

    print convert(float, myseq)

     

    4.       可变长度的参数

    4.1.在函数的参数列表中使用*号表示将元组作为可变参数传给函数,如下:

    >>> def testfunc(arg1,*args):

    ...     print "arg1:",arg1

    ...     for item in args:

    ...               print item

    ...              

    >>> testfunc('asd')

    arg1: asd

    >>> testfunc('asd',123,'sd',23)

    arg1: asd

    123

    sd

    23

    4.2. 在函数的参数列表中使用**号表示将字典作为可变参数传给函数,如下:

    >>> def testfunc(arg1,**args):

    ...     print "arg1:",arg1

    ...     for item in args.keys():

    ...               print "key:%s,value:%s"%(item,str(args[item]))

    ...

     

    >>> testfunc(12,c='dictest')

    arg1: 12

    key:c,value:dictest

     

    5.       匿名函数与lambda

    Python允许使用lambda关键字创造匿名函数,最简单的为我们由一个函数

    def show():

           return Hello World

    使用lambda的等价表达式为:

    Lambda:‘Hello World

    我们可以lambda赋值给一个引用,如,上面的:

    a= Lambda:‘Hello World

    a()可以调用。

    Python提供了apply(),filter(),map(),redule()内建函数,这些函数提供了在python中可以找到的函数式编程的特征。Lambda函数可以很好的和使用了这些函数的应用程序结合起来,因为他们都带了一个可执行的函数对象,lambda表达式提供了迅速创造这些函数的机制。比如下面例子:

    >>> map((lambda x:x*5),[0,1,2,3,4,5])

    [0, 5, 10, 15, 20, 25]

     

    >>> print 'total:',reduce((lambda x,y:x+2*y),range(5))

    total: 20

    所做运算为如下:

     

    ((((0+2*1)+2*2)+2*3)+2*4)

     

    作者:生鱼片
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Android 拍照 代码实例
    利用Android手机里的摄像头进行拍照
    看视频时,类加载器没太理解,现在再整理下几个要点
    关于java设计模式与极品飞车游戏的思考
    【Mood-3】心声
    源自梦想 eclipse快捷键整理
    2020重新出发,JAVA语言,JAVA的诞生和发展史
    2020重新出发,序章: 语言的诞生
    2020重新出发,JAVA学前了解,DOS常用命令
    2020重新出发,JAVA学前了解,Windosws常用快捷键
  • 原文地址:https://www.cnblogs.com/carysun/p/python3.html
Copyright © 2011-2022 走看看