Python中高阶函数讲解
高阶函数讲解
1. 常规高阶函数
递归函数
格式:def func_name(variable):
'''__doc__'''#函数的说明文档
if 条件表达式:#限制递归退出值
pass
return func_name(variable2)#variable2必须是通过一系列等运算后的值。
例如:def jiecheng(n):
if n <= 1:
return n
return jiecheng(n-1)*n
print(jiecheng(5))
>>> 120
#递归就是函数自身调用自身,Python最大递归层数为999层。
注:递归的三大特性:
1. 一定要有一个结束的条件
2. 每次进入更深一层递归时,问题规模相比上次递归应有所减少
3. 效率不高
遍历(迭代)函数
格式:def func_name(variable):
for variable2 in range(1,variable):
variable *= variable2
return variable
例如:def jie1(n):
for i in range(1,n):
n *= i
return n
print(jie1(5))
>>> 120
例如:def jie2(n):
for i in range(n-1,0,-1):#由于顾头不顾尾,所以是n-1
n *= i
return n
>>> 120
#当range的步长为负数时,序列将end值到start值。
注:一般迭代函数要比递归常用,主要原因就是速度快。
函数作为参数
格式:def func_name1():
expression
def func_name2(func_name1):
expression
例如:def num1():
print(123)
def num2(n):
print(1234)
return n()
num2(num1)
>>> 1234
>>> 123
#函数1作为函数2的参数传入到函数2中,执行函数2的代码。
2. 内置高阶函数
filter(过滤)
格式:filter(function or None, iterable)
例如:x = filter(lambda m:m > 1,[1,2,3])
for i in x:
print(i)
>>> 2
>>> 3
#使用filter过滤时,当条件为Ture时,则返回符号条件的。需要两个参数,第一个是函数(不声明时,则直接把后面传入的参数转换为迭代器),第二个则是可迭代的对象(列表、元祖、字典和集合),返回值为迭代器。
map(映射)
格式:map(function,iterable)
例如:x = map(lambda m:m+10,(1,2,3))
for i in x:
print(i)
>>> 11
>>> 12
>>> 13
#与filter类似,不同于map对第二个参数的中元素进行映射,传入到第一个参数(即函数)中进行映射,返回值仍是一个迭代器。
3. closure(闭包)
闭包是函数返回函数,多用于装饰器函数中。
格式:def func_name1(args):
def func_name2():
expression
return func_name2
例如:def outt(num):
def inn():
print('ab')
return inn
print(outt(2))
#上述的返回值为函数体inn即为闭包。
4. 装饰器
装饰器属于闭包的一种应用,主要表示符为@,装饰器的定义为:装饰器是一个高阶函数+嵌套函数,同时也是一个‘变量’。用于装饰函数,主要有两大原则,1.不能修改原代码,2.不能修改原代码的调用方式。
1. 格式:def zhuang(arg1):
'''__doc__'''#函数的说明文档
expression
return arg1()
@zhuang
def bzhuang():
'''__doc__'''#函数的说明文档
expression
例如:def zh(n1):
print(123)
return n1()
@zh
def bzh():
print('123')
print(bzh())
>>> 123
>>> '123'
#上述为最简单的装饰器,一般很少用。主要是由于装饰器在没有调用的情况下直接执行了。
2. 例如:def login(x):
def inner():
return x()
return inner
@login
def beiz():
return 'abc'
print(beiz())
>>> 'abc'
#上述装饰器为常用装饰器,在调用函数前,装饰器是没有执行完,只返回一个函数体。
3. 例如:def login(arg):#符号@即调用该函数
def outter(func):#由于装饰器需要一个参数,因此这里调用装饰器也需要一个参数
def inner(*args,**kwargs):#这里直接调用it和xinxi两个函数
if arg == 'abc':
print('arg is abc')
elif arg == '123':
print('arg is 123')
return func(*args,**kwargs)
return inner#返回该函数体即为it和xinxi两个函数体
return outter#由于装饰器调用,因此该返回的函数也将进行调用
@login(arg='abc')#装饰器直接调用
def it():
print('It')
@login(arg='123')#装饰器直接调用
def xinxi():
print('信息')
it()
xinxi()
#该实例为装饰器的终极版,即一个装饰器可以带参数。当然也可以带动态参数,具体不再详细介绍。
Python中高阶函数讲解的更多相关文章
- Python中高阶函数sorted()用法
在Python中,有内置的排序方法:sorted(iterable, key, reverse). Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序.key指定的函数 ...
- python中高阶函数与装饰器
高阶函数的定义:传入参数有函数名或者返回值有内置函数名的函数. 最简单的高阶函数: def add(x, y, f): return f(x) + f(y) add(-5, 6, abs) 常用 ...
- python中高阶函数学习笔记
什么是高阶函数 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 def fun(x, y, f): print f(x), f(y) fun ...
- python中高阶函数与装饰器(3)
>>> f = lambda x: x * x>>> f<function <lambda> at 0x101c6ef28> >> ...
- python中高阶函数与装饰器(2)
函数返回值为内置函数名: def sum(*args): def sum_in(): ax = 0 for n in args: ax = ax ...
- 用一个简单的例子来理解python高阶函数
============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...
- Python高阶函数_map/reduce/filter函数
本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...
- Python高阶函数及函数柯里化
1 Python高阶函数 接收函数为参数,或者把函数作为结果返回的函数为高阶函数. 1.1 自定义sort函数 要求:仿照内建函数sorted,自行实现一个sort函数.内建函数sorted函数是返回 ...
- python——高阶函数:高阶函数
python高阶函数 00初识高阶函数 一等公民 函数在python中是一等公民(First-Class Object),同样和变量一样,函数也是对象,只不过是可调用的对象,所以函数也可以作为一个普通 ...
随机推荐
- httpClient 中的post或者get请求
httpClient相对于java自带的请求功能更加强大,下面就以例子的形式给出: //HttpClient Get请求 private static void register() { try { ...
- mysql5.5中datetime默认值不能为NOW或者CURRENT_TIMESTAMP,用触发器解决
mysql5.6及以上的版本datatime默认值可以为CURRENT_TIMESTAMP或者NOW 那我们要用的是mysql5.5及以下版本呢? 请看代码 delimiter // DROP TRI ...
- sublime的使用技巧
ctr+shift+d是复制当前行当下一行2.使用Sublime text 3 编写代码是一种享受,使用Sublime text 3 格式化HTML代码,需要安装插件,具体安装步骤如下:1.打开菜单- ...
- 解决IE8下CSS3选择器 :nth-child() 不兼容的问题
1.定义和用法 :nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型. n 可以是数字.关键词或公式. <ul> <li>1</li> ...
- Python-基础学习-Day1
1 Python介绍 1.1 Python 是一门什么样的语言? python是一门动态解释性的强类型定义语言. 编译型的特点:可一致性差,运行速度快. 解释型的特点:边执行边解释,速度慢 1.2 P ...
- WPF 自定义ItemsControl/ListBox/ListView控件样式
一.前言 ItemsControl.ListBox.ListView这三种控件在WPF中都可作为列表信息展示控件.我们可以通过修改这三个控件的样式来展示我们的列表信息. 既然都是展示列表信息的控件,那 ...
- maven构建spring报错org.springframework.core.NestedRuntimeException cannot be resolved.
Error:The type org.springframework.core.NestedRuntimeException cannot be resolved. It is indirectly ...
- 27.C++- 智能指针
智能指针 在C++库中最重要的类模板之一 智能指针实际上是将指针封装在一个类里,通过对象来管理指针. STL中的智能指针auto_ptr 头文件: <memory> 生命周期结束时,自动摧 ...
- POJ-3617 Best Cow Line---字符串贪心
题目链接: https://vjudge.net/problem/POJ-3617 题目大意: 每次都可以从字符串的首部或者尾部提取字母,使得最后的字符串的字典序最小. 思路: 贪心做即可~每次从上和 ...
- Android重构篇——项目架构篇
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6823777.html 前言 大家好,我是Cavalier ...