Python学习笔记 6--高阶函数、面向对象编程
来源:互联网 发布:手机淘宝怎么改中评 编辑:程序博客网 时间:2024/06/04 18:24
高阶函数
什么是高阶函数?高阶函数英文叫Higher-order function。什么是高阶函数?我们从实际代码一步一步深入概念。
1.变量可以指向函数
以内置函数max()为例吧
>>> max(1,5,4)5>>> max<built-in function max>>>>x=max(1,5,4)>>>x5
可见,max(1,5,4)是函数调用,而max是函数本身,要获得函数调用结果,我们可以把结果赋值给变量那么,如果把函数本身赋值给变量呢?
>>>fun=max>>>fun(1,5,4)5
说明函数本身也可以赋值给变量,即:变量可以指向函数,并且变量fun现在已经指向了max函数本身,可以通过变量fun来调用max这个函数。
2.函数名也是变量
函数名其实就是指向函数的变量,对于max()这个函数,完全可以把函数名max看成变量,它指向一个可以求最大值的函数,我们可以用其他变量来指向改函数,以你定义的变量来实现求最大值的函数的调用
3 . 传入函数
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。要理解“函数本身也可以作为参数传入”,可以从Python内建的map/reduce函数入手。
3.1. map()函数
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。比如我们有一个函数f(x)=x^2,要把这个函数作用在一个list [1, 2, 3, 4]上,就可以用map()实现如下:
""" f=x^2[1, 2, 3, 4] | | | | [1, 4, 9, 16]""">>> def fun(x):... return x * x...>>> map(fun, [1, 2, 3, 4])[1, 4, 9, 16]
请注意我们定义的函数fun。fun指的是函数对象本身,fun(1)指的是调用fun函数,并传入参数1,得到返回结果。上例中,map()传入的第一个参数是fun,即函数对象本身。把像map()函数这种能够接收函数作为参数的函数,称之为高阶函数(Higher-order function)。
3.2. reduce函数
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
##比如定义一个求和的函数>>> def add(x, y):... return x + y...>>> reduce(add, [1, 3, 5, 7, 9])25
实际运行过程就相当于add(add(add(add(1,3),5),7),9)还可以应用reduce实现[1, 3, 5, 7, 9]——>整数13579的转换
>>> def fn(x, y):... return x * 10 + y...>>> reduce(fn, [1, 3, 5, 7, 9])13579
3.3filter()函数
Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
##在一个list中,删掉偶数,只保留奇数def is_odd(n): return n % 2 == 1filter(is_odd, [1, 2, 3, 5, 6, 8, 10])# 结果: [1, 3, 5]
3.4 lambda表达式及简单用法
对于简单的 if else 语句,可以使用三元运算来表示
# 普通条件语句if 1 == 1: name = 'wupeiqi'else: name = 'alex'# 三元运算name = 'wupeiqi' if 1 == 1 else 'alex'
对于简单的函数,还存在一种更简便的表示方式,即:lambda表达式
## 普通函数def func(arg): # 定义函数(普通方式) return arg + 1result = func(123) # 执行函数## lambda my_lambda = lambda arg : arg + 1 # 定义函数(lambda表达式)result = my_lambda(123) # 执行函数
用图来说明 map、filter、reduce三个函数
面向对象编程
- 面向过程编程:
- 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
- 面向对象编程(OOP) Object Oriented Programming
- 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向函数编程:(lisp)
- 维基百科中给出的定义,函数式编程(英语:functional programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。
面向对象的程序设计是把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递
在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。下面来感受下面向过程编程和面向对象编程的不同思想
##面向过程stud1 = { 'name': 'tom', 'age': 18,'gender':'male'} ##字典存储学生信息stud2 = { 'name': 'tim', 'age': 16,'gender':'female'}def print_info(stu): ##定义信息输出函数 print 'name:%s\n age:%s\n gender:%s' % (stu['name'], stu['age'],stu['gender'])print_info(stud1) ##调用信息输出函数打印stud1的信息print_info(stud2)##面向对象class Student(object): ##定义一个Student类 def __init__(self, name, age,gender):##初始化 self.name = name self.age= age self.gender= gender def print_info(self): ##类的信息输出方法 print 'name:%s\n age:%s\n gender:%s' % (self.name, self.age,self.gender) stud1 = Student('tom', 18,'male') ##实例化一个stud1 学生实例stud2 = Student('tim', 16,'female')stud1.print_info() ##调用stud1 实例的信息输出方法stud2.print_info()
阅读全文
0 0
- Python学习笔记 6--高阶函数、面向对象编程
- python学习笔记(六) - 面向对象编程
- Python学习笔记(10):面向对象编程
- python基础学习笔记<面向对象编程>
- Python 学习笔记-面向对象编程
- [学习笔记]python之面向对象编程
- Python面向对象编程基础学习笔记
- 【Python学习笔记】面向对象编程
- python学习笔记5 面向对象编程
- Python学习笔记 面向对象编程
- python 学习笔记---函数式编程之高阶函数
- 【Python学习笔记】函数式编程:高阶函数
- 【Python学习笔记】函数式编程:高阶函数filter
- 【Python学习笔记】函数式编程:高阶函数sorted
- Python学习笔记,函数式编程,高阶函数
- 【Python学习笔记】面向对象编程:获取对象信息
- Python学习笔记-20141201-Python面向对象编程
- Python面向对象的编程--Python学习笔记五
- 面试题(2)
- 稳赚不赔股市大师论
- 分布式幂等性的相关问题
- 快排?跳排?
- linux学习笔记三
- Python学习笔记 6--高阶函数、面向对象编程
- c++中static 和const的作用
- 15物联网签到帖
- java和c语言变长参数的底层实现区别
- OOP之面向对象
- Unity轻轻轻轻轻量级多人在线聊天系统
- 希尔排序
- 每日一诗词 —— 无题
- Codeforces Round #432 (Div. 2)C,D,E题目详解