博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学学python(3):函数式编程
阅读量:6690 次
发布时间:2019-06-25

本文共 1836 字,大约阅读时间需要 6 分钟。

1.       关键字参数

比如你有一个函数定义为functest(name,age),正常的调用方式为functest(‘cary‘,25),我们也可以指定参数来调用,如functest(age=25,name=’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)

 

本文转自生鱼片博客园博客,原文链接:,如需转载请自行联系原作者

 

你可能感兴趣的文章
20170303新的开始
查看>>
Python--day25--复习(单继承和多继承的总结)
查看>>
Python--day39--进程池原理及效率测试
查看>>
@Html.EditFor()不能添加“只读”html属性;以及disable属性的坑
查看>>
Logger日志级别说明及设置方法、说明
查看>>
7-1 列出连通集 (25 分)
查看>>
Mybatis之Mapper动态代理
查看>>
【转】楼天城楼教主的acm心路历程(作为励志用)
查看>>
vw、vh、vmin、vmax 的含义
查看>>
04.设计模式_抽象工厂模式
查看>>
vue项目搭建
查看>>
c lang codesnippets
查看>>
Machine Learning
查看>>
Ext概述
查看>>
LeetCode – Refresh – Populating Next Right Pointers in Each Node I and II
查看>>
AngularJS模块
查看>>
LINQ TO SQL 实现无限递归查询
查看>>
Well, now we should make Discount mbt shoes
查看>>
securecrt中使用上传下载sftp
查看>>
mysql索引
查看>>