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 average5>>>>>>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.去重 把一个列表变成集合 ,就自动去重 ...
随机推荐
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
- 统一修改表单参数(表单提交的空字符串统一转null)
统一修改表单参数(表单提交的空字符串统一转null) 1.介绍: 我们业务中有时会遇到提交的表单中某个参数为空字符串,导致后台接受的为空字符串("")而不是我们理想中的null,会 ...
- CSS Modules In Webpack
1)从形式上看,CSS Modules 是将CSS中的选择器转换为变量,然后在DOM中引用变量来引入样式. 2)从效果上看,CSS Modules 可以将CSS选择器名字转成随机字符串,保证选择器同名 ...
- 爬虫框架之Scrapy(一)
scrapy简介 scrapy是一个用python实现为了爬取网站数据,提取结构性数据而编写的应用框架,功能非常的强大. scrapy常应用在包括数据挖掘,信息处理或者储存历史数据的一系列程序中. s ...
- JavaSSM框架报HTTP Status 500 - Servlet.init() for servlet springMvc threw exception错误
如下,刚搭建的项目报这样的错,刚学框架的我一脸懵逼...网上很多说是jdk或者springmvc的的jar的版本问题,但是我其他项目都可以啊,所以排除了这个问题. 经过几个小时的排查,发现了我的问题所 ...
- java8 时间使用
为什么需要新的时间API 文章来源:https://www.cnblogs.com/guozp/p/10342775.html 在Java 8之前的日期/时间API之前,现有的与日期和时间相关的类存在 ...
- 使用xUnit为.net core程序进行单元测试(1)
导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以更快速 ...
- Vue.js-06:第六章 - 按键修饰符的使用
一.前言 上周末的时候,准备试试将 ASP.NET Core 的项目部署到 CentOS 服务器上,结果在一个接一个坑里面跳,最后 Supervisor 守护程序还是有问题,于是,采用重装系统大招, ...
- 死磕 java集合之CopyOnWriteArraySet源码分析——内含巧妙设计
问题 (1)CopyOnWriteArraySet是用Map实现的吗? (2)CopyOnWriteArraySet是有序的吗? (3)CopyOnWriteArraySet是并发安全的吗? (4)C ...
- .NET Core微服务之基于Steeltoe使用Zipkin实现分布式追踪
Tip: 此篇已加入.NET Core微服务基础系列文章索引 => Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...