学学python(3):函数式编程

简介:

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)

 

本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2010/03/08/python3.html,如需转载请自行联系原作者

 

相关文章
|
开发者 Python
Python中的函数式编程:理解map、filter和reduce
【2月更文挑战第13天】 本文深入探讨了Python中函数式编程的三个主要工具:map、filter和reduce。我们将详细解释这些函数的工作原理,并通过实例来展示它们如何使代码更简洁、更易读。我们还将讨论一些常见的误解和陷阱,以及如何避免它们。无论你是Python新手还是有经验的开发者,本文都将帮助你更好地理解和使用这些强大的函数。
|
分布式计算 Python
Python函数式编程学习笔记
高阶函数是能接收另一个函数作为参数的函数,如Python的map()、reduce()和filter()。map()将传入的函数应用到序列每个元素并返回迭代器,如将整数列表转换为字符串列表。reduce()对序列进行累积计算,例如求和。filter()根据给定函数返回的真值保留或丢弃序列元素,常用于筛选。sorted()函数支持自定义排序,如按绝对值或ASCII值排序。此外,还包括返回函数、匿名函数(lambda)、装饰器(用于动态增强函数功能)和偏函数(partial),用于固定函数部分参数,简化调用。
Python高级编程与实战:深入理解函数式编程与元编程
本文深入介绍Python的函数式编程和元编程。函数式编程强调纯函数与不可变数据,涵盖`map`、`filter`、`reduce`及`lambda`的使用;元编程则涉及装饰器、元类和动态属性等内容。通过实战项目如日志记录器和配置管理器,帮助读者掌握这些高级技术,编写更灵活高效的Python程序。
Python函数式编程-Filter
Python函数式编程-Filter
350 64
|
存储 算法 数据处理
Python函数式编程
【10月更文挑战第12天】函数式编程是一种强大的编程范式,它可以帮助我们编写更加简洁、易读、可维护和高效的代码。虽然 Python 不是一种纯粹的函数式编程语言,但它提供了许多支持函数式编程的特性和功能。通过深入了解和掌握函数式编程的概念和技巧,我们可以在 Python 编程中更好地应用函数式编程的理念,提高我们的编程水平和代码质量。
333 2
|
Python
Python函数式编程:你真的懂了吗?理解核心概念,实践高阶技巧,这篇文章带你一次搞定!
【8月更文挑战第6天】本文介绍了Python中的函数式编程,探讨了高阶函数、纯函数、匿名函数、不可变数据结构及递归等核心概念。通过具体示例展示了如何利用`map()`和`filter()`等内置函数处理数据,解释了纯函数的一致性和可预测性特点,并演示了使用`lambda`创建简短函数的方法。此外,文章还强调了使用不可变数据结构的重要性,并通过递归函数实例说明了递归的基本原理。掌握这些技巧有助于编写更清晰、模块化的代码。
340 3
|
存储 分布式计算 索引
Python函数式编程入门窥探
Python本身不是一门函数式编程语言,但是它参考了一些函数式编程语言很好的地方,除了可以写出更可读的代码外。还能用它来实现一些特定功能,本身也提供了强大的注解系统和函数和对象之间的灵活调用。
|
缓存 并行计算 Shell
12种增强Python代码的函数式编程技术
函数式编程是一种高度抽象的编程范式,它倡导使用纯函数,即那些不依赖于外部状态、没有可变状态的函数。在纯粹的函数式编程语言中,函数的输出完全由输入决定,因此相同的输入总是产生相同的输出,这样的函数我们称之为无副作用的。
|
Python
在Python中,`map()`, `filter()` 和 `reduce()` 是函数式编程中的三个核心高阶函数。
【6月更文挑战第24天】Python的`map()`应用函数到序列元素,返回新序列;`filter()`筛选满足条件的元素,生成新序列;`reduce()`累计操作序列元素,返回单一结果。
182 3
|
Serverless 开发者 Python
Python函数式编程:让你的代码更简洁、更高效!
【6月更文挑战第12天】Python函数式编程引入了数学函数概念,强调无副作用和不可变数据。特点包括高阶函数、Lambda表达式、map、filter和reduce。示例展示了如何使用map进行平方运算,filter筛选条件元素,reduce计算元素总和,体现其简洁高效。虽然不适用于所有情况,但函数式编程能提升代码可读性和可维护性。
232 3

推荐镜像

更多