python函数与函数式编程
https://www.cnblogs.com/evablogs/p/6699515.html
在理解函数式编程之前,我还是对函数的调用,参数传递以及函数的嵌套调用一头雾水,还是花了点时间整理了写思绪,以便我后面对装饰器复杂的参数传递和函数的调用的理解。
函数的定义
def 函数名():
代码块
例如:
1
2
3
|
def func_name(): block return value #return语句表示函数执行到此结束,如果没有return语句则会返回None,有return没有语句也是返回None |
另外,Python中不允许前向引用,即在函数定义之前,不允许调用该函数。所以函数必须先定义再调用,否则会报错,找不到该函数的定义。
1
2
3
4
5
6
|
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 |
参数的传递
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
>>> def f(a,b,c = 10 ): #定义三个参数,设置c的默认值为10 return 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程序,一个函数在另外一个函数的里面,外层的函数返回的是里层函数。
函数嵌套时,内层函数可以访问外层函数的变量,但不能对其变量重新赋值。
1
2
3
4
5
6
7
8
9
10
11
|
>>> def yao1(a = 1 ,b = 32 ): def yao2(c = 54 ): def yao3(d = 3 ): def yao4(e = 10 ): return a + b + c + d + e return yao4 return yao3 return yao2 >>> print yao1()()()() 100 |
函数式编程
函数式编程与函数不同,函数式编程是将一个函数作为参数传递给另一个函数,最后返回一个函数。
典型的函数式编程辅助函数有:reduce/map/filter等函数,一需要认识和积累这些辅助和内置函数,其二了解匿名函数lambda的使用,让函数式编程的代码更加简洁和易读。
1
2
3
4
5
6
7
8
9
10
|
>>> 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 ] |
python函数与函数式编程的更多相关文章
- python函数 与 函数式编程
「函数」一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序), ...
- python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...
- python 函数和函数式编程
什么是函数 调用函数 创建函数 变长参数 函数式编程 变量的作用域 生成器 1 什么是函数 函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理 的小块,把重复代码放到函 ...
- Python核心编程读笔 10:函数和函数式编程
第11章 函数和函数式编程 一 调用函数 1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...
- Python进阶之函数式编程(把函数作为参数)
什么是函数式编程? 什么是函数式编程? 函数:function 函数式:functional,一种编程范式 函数式编程是一种抽象计算的编程模式 函数≠函数式,比如:计算≠计算机 在计算机当中,计算机硬 ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)
原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...
- Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...
- 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数
声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...
随机推荐
- jqgrid postData post方式累加参数,缓存了原来的数据
今天做项目的时候发现一个问题,我们有一个筛选项,一个是VIP用户,一个是普通用户,还有一个是全部用户,首先看下我们的selection <select name="" id= ...
- 001-为什么Java能这么流行
本文首发于公众号:javaadu 典型回答 这种问题比较笼统,如果我遇到这个问题,我会从下面几个点阐述我的观点: Java通过JVM实现了"一次编写,到处运行"的特性,由JVM屏蔽 ...
- 在Docker中体验数据库之Microsoft SQL Server
前面记录了一下在docker中体验mongodb和mysql.今天记录一下mssql……其实早就体验了,就是没有记录,前几天看了一下2019的一些新闻,很喜欢Polybase这个特性,想体验一把,可惜 ...
- Python算法和数据结构:在二叉树中找到和为sum的所有路径
玄魂工作室秘书 [玄魂工作室] 思路:先用递归创建一颗二叉树,作为输入:然后对这课二查树进行递归遍历,递归中每遍历一个节点,下次递归的和为sum-data;并用一个数组记录遍历过的路径,当存在sum时 ...
- 自己动手用原生实现 bind/call/apply
大家好!!!注册一年多的第一篇博客. 自我介绍: 本人非计算机专业出身,转行进入前端半年时间,写的东西可能观赏性不强,一起进步吧道友们... 接下来的一段时间, 我都会不定期整理自己理解的js知识点, ...
- Redis集群架构
Redis集群概述 集群的核心意义只有一个:保证一个节点出现了问题之后,其他的节点可以继续提供服务使用. Redis基础部分讲解过主从配置:对于主从配置可以有两类:一主二从,层级关系.开发者一主二从是 ...
- Hadoop系列008-HDFS的数据流
本人微信公众号,欢迎扫码关注! HDFS的数据流 1 HDFS写数据流程 1.1 剖析文件写入 1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在. 2) ...
- .NET Core微服务之基于Steeltoe使用Hystrix熔断保护与监控
Tip: 此篇已加入.NET Core微服务基础系列文章索引 => Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...
- 《前端之路》之 JavaScript原型及原型链详解
05:JS 原型链 在 JavaScript 的世界中,万物皆对象! 但是这各种各样的对象其实具体来划分的话就 2 种. 一种是 函数对象,剩下的就是 普通对象.其中 Function 和 Objec ...
- kernel 进阶API
1. #define cond_resched() ({ \ ___might_sleep(__FILE__, __LINE__, ); \ _cond_resched(); \ }) int __s ...