在理解函数式编程之前,我还是对函数的调用,参数传递以及函数的嵌套调用一头雾水,还是花了点时间整理了写思绪,以便我后面对装饰器复杂的参数传递和函数的调用的理解。

函数的定义

def 函数名():

代码块

例如:

def func_name():blockreturn value                                     #return语句表示函数执行到此结束,如果没有return语句则会返回None,有return没有语句也是返回None

另外,Python中不允许前向引用,即在函数定义之前,不允许调用该函数。所以函数必须先定义再调用,否则会报错,找不到该函数的定义。

print func_name()                                    #若在函数定义前调用函数,则报错Traceback (most recent call last):             File "<pyshell#72>", line 1, in <module>print func_name()
NameError: name 'func_name' is not defined

参数的传递

>>> def f(a,b,c=10):                                 #定义三个参数,设置c的默认值为10return a+b+c>>> print(f(3,2))                                    #传递参数的值,默认匹配没有默认值的参数
15
>>> print(f(3,2,1))                                  #传递参数的值,若传递的参数都有值,则不会取默认值
6>>>def func(*name):                                  #包裹传递,将所有的参数传递给name元组print type(name)print name>>> func(1,4,6)
<type 'tuple'>
(1, 4, 6)
>>> func(5,6,7,1,2,3)
<type 'tuple'>
(5, 6, 7, 1, 2, 3)>>> def func(**dict):                                #字典收集所有的关键字print type(dict)print dict>>> func(a=1,b=9)
<type 'dict'>
{'a': 1, 'b': 9}
>>> func(m=2,n=1,c=11)
<type 'dict'>
{'c': 11, 'm': 2, 'n': 1}

 函数嵌套

python程序,一个函数在另外一个函数的里面,外层的函数返回的是里层函数。

函数嵌套时,内层函数可以访问外层函数的变量,但不能对其变量重新赋值。

>>> def yao1(a=1,b=32):def yao2(c=54):def yao3(d=3):def yao4(e=10):return a+b+c+d+ereturn yao4return yao3return yao2>>> print yao1()()()()
100

 函数式编程

函数式编程与函数不同,函数式编程是将一个函数作为参数传递给另一个函数,最后返回一个函数。

典型的函数式编程辅助函数有:reduce/map/filter等函数,一需要认识和积累这些辅助和内置函数,其二了解匿名函数lambda的使用,让函数式编程的代码更加简洁和易读。

>>> number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]                   #给列表赋值
>>> sum = filter(lambda x: x>0, number)                             #filter(func,number):从number的item中依次筛选符合func条件的元素,即从number列表中筛选x>0的元素并返回#lambda args: expression
>>> average = reduce(lambda x,y: x+y, sum)/len(sum)                 #reduce(func,number):先将number元组中的前两个元素执行func函数,返回的值继续与下一个元素一起执行func函数
>>> print average
5
>>> >>>print map(lambda x:x%3,range(6))                                #map(func,seq):seq中的每个元素都经过了func函数的作用,重新得到了func(seq[n])组成的列表
[0, 1, 2, 0, 1, 2]

转载于:https://www.cnblogs.com/evablogs/p/6699515.html

python函数与函数式编程相关推荐

  1. python函数和函数式编程

    --以下所有内容均来自于蓝鲸运维SaaS开发实战公开课的ppt,我对其进行了整理做了笔记,便于以后查看学习. 函数 声明函数: def hello():print("hello functi ...

  2. python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)

    1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...

  3. 过程或函数的副作用是_Python函数和函数式编程(两万字长文警告!一文彻底搞定函数,建议收藏!)...

    Python函数和函数式编程 函数是可重用的程序代码段,在Python中有常用的内置函数,例如len().sum()等. 在Pyhon模块和程序中也可以自定义函数.使用函数可以提高编程效率. 1.函数 ...

  4. Python中的匿名函数和函数式编程

    Python中的匿名函数和函数式编程 文章目录 Python中的匿名函数和函数式编程 一.匿名函数 匿名函数的格式: 二.函数式编程 map() filter() reduce() 区别 三.'三目运 ...

  5. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  6. python采用函数式_python -- 函数以及函数式编程

    函数以及函数式编程 到目前为止,我们的Python 代码已经实现了小的分块.它们都适合处理微小任务, 但是我们想复用这些代码,所以需要把大型代码织成可管理的代码段.代码复用的第一步是 使用函数,它是命 ...

  7. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...

  8. Python 进阶_函数式编程

    目录 目录 函数式编程 Python 函数式编程的特点 高阶函数 匿名函数 lambda 函数式编程相关的内置函数 filter 序列对象过滤器 map reduce 折叠 自定义的排序函数 最后 函 ...

  9. python语言支持函数式编程_python是函数式语言么

    函数式编程:functional,是一种编程范式. 函数式编程的特点:1. 把计算视为函数而非指令 2. 纯函数式编程:不需要变量,没有副作用,测试简单 3. 支持高阶函数,代码简洁 Python支持 ...

最新文章

  1. 用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈
  2. u-boot的nand驱动写过程分析
  3. easyui 通用的datagrid中如何带有查询条件分页
  4. Linux中逻辑卷的快照与还原
  5. 程序员除了会 CRUD 之外,还应该知道什么叫 CQRS!
  6. cookie 操作详解 (asp.net javascript)
  7. 在 Android 中调用二进制可执行程序(native executable )
  8. 【图像处理基础】基于matlab GUI图像处理(反色+亮度+二值化+空间肤色检测)【含Matlab源码 1008期】
  9. TypeError: '' not supported between instances of 'float' and 'str'
  10. 曾经如日中天的VB编程,现已没落,而惨遭嫌弃的它,成了香饽饽
  11. 介绍几款iPhone手机原型设计的工具
  12. SpringBoot使用快递鸟进行电子面单的获取以及打印
  13. 工商银行java script error windows7_Win8.1装工行网银提示"called runscript when not marked in progress"的解决方法...
  14. 24个非洲青年,为啥跑来阿里“上学”?
  15. 联想笔记本键盘亮屏幕不亮_联想笔记本电脑开机键亮但是黑屏 联想笔记本电脑键盘失灵怎么办...
  16. 机场文员面试从何下手
  17. 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>
  18. 宏定义函数和普通函数
  19. Extremely hard RSA 低加密指数攻击
  20. 借助高德地图开发者平台——地图可视化

热门文章

  1. Bluetooth协议栈
  2. 04-程序计数器(PC计数器)
  3. Redis整合Spring结合使用缓存实例
  4. 分布式文件系统—HDFS—入门简介
  5. 在xcode上把你的app多语言国际化(NSLocalizedString)
  6. 使用SecureCRT脚本备份网络设备配置的一点感悟
  7. 使用PLSQL客户端登录ORACLE时报ORA-12502和ORA-12545错误的解决方案
  8. [JS]手写动画最小时间间隔设置
  9. Entity Framework查询,EF执行SQl
  10. [django]Django站点admin支持中文显示和输入设置