python的一些高阶用法
map的用法
def fn(x):
return x*2
L1 = [1,2,3,4,5,6]
L2 = list(map(fn,L1))
L2
[2, 4, 6, 8, 10, 12]
通过上面的运行,可以知道map就是把一个数组内所有的元素都执行map加入的方法。
用法如下 map(方法,数组)
reduce的用法
先看例子
from functools import reduce
def add(x,y):
return x + y
L1 = [1,2,3,4,5,6]
L2 = reduce(add,L1)
L2
21
通过上面的例子,直观的来看,我们可以发现reduce和map方法有一些不一样。
- map是python自带的函数,而reduce需要引入functools
- map 返回的是一个map对象,而reduce是返回的一个数字
- map函数需要一个参数,而reduce的参数需要两个。
map是对一个集合中的每个元素执行指定的方法。而reduce则是依次对集合的元素调用指定的方法。先把前两个参数执行reduce以后形成的返回之作为第一个参数,再和第三个参数形成返回值,依次执行。
filter函数
filter则是对集合的每个元素执行一次判断,能让filter指定的函数返回真值则返回,否则则不出现在返回集合中。
def fn(x):
return x%2 ==0
L1 = [1,2,3,4,5,6,7,8]
F1 = filter(fn,L1)
print(F1)
print(list(F1))
<filter object at 0x7f1d38369358>
[2, 4, 6, 8]
sorted
顾名思义排序。用法如下
sorted(集合,key=排序的算法,reverse=True) #reverse=True如果添加反向排序
返回函数(闭包)
def fn(x):
def add(y):
return x + y
return add
a = fn(5)
a(6)
11
需要注意的是闭包的代码是到最后执行a(6)的时候,才调用了函数里面的执行。举个例子
def fn():
rs = []
for i in range(4):
def sub():
return i
rs.append(sub)
return rs
a,b,c,d = fn()
print(a())
print(b())
print(c())
print(d())
3
3
3
3
从上面的例子中,我们如果没有理解到返回的函数是在最后加上括号的时候才调用,可能以为返回之是0,1,2,3
但是实际上def sub()里面的内容一直都没执行,但是外面的i 一直到了3.当调用a()的时候。开始执行。所以如上面的返回结果。
def efn():
i = 1
def sub():
i = i + 1
return i
return sub
t = efn()
t()
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-15-7574f0a729df> in <module>()
7
8 t = efn()
----> 9 t()
<ipython-input-15-7574f0a729df> in sub()
2 i = 1
3 def sub():
----> 4 i = i + 1
5 return i
6 return sub
UnboundLocalError: local variable 'i' referenced before assignment
上面的报错,需要引入关键词nonlocal 如下:
def efn():
i = 1
def sub():
#关键字
nonlocal i
i = i + 1
return i
return sub
t = efn()
print(t())
print(t())
2
3
匿名函数
list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
通过上面的式子我们简单可以看到lambda函数或者匿名函数的意义
f = lambda x,y:x + y
f(5,6)
11
我们大概可以看到lambda函数的:前面相当于参数,后面的是返回数值
装饰器
我的理解类似java中的AOP或者.net中的面向切片编程
'''比如调用一个方法的时候,我们期望另外一个方法也被调用。比如我们执行一个操作,期望不改变任何代码,就可以打印出来这个方法的日志'''
def log(func):
def wraper(*args,**kw):
print(func.__name__+' is call to log')
return func(*args,**kw)
return wraper
@log
def fn():
print('this is fn')
fn()
fn is call to log
this is fn
''' 如果我们希望往log里面传递参数'''
def log(text):
def decorator(func):
def wraper(*args,**kw):
print(func.__name__+' is call to log ' + text)
return func(*args,**kw)
return wraper
return decorator
@log('hello')
def fn():
print('fn')
fn()
fn.__name__
fn is call to log hello
fn
'wraper'
fn的名称发生了改变,要保持不变,需要@functools.wraps(func)
''' 如果我们希望往log里面传递参数'''
import functools
def log(text):
def decorator(func):
@functools.wraps(func)
def wraper(*args,**kw):
print(func.__name__+' is call to log ' + text)
return func(*args,**kw)
return wraper
return decorator
@log('hello')
def fn():
print('fn')
fn()
fn.__name__
fn is call to log hello
fn
'fn'
以上的内容参考学习 廖学峰的学习网站
python的一些高阶用法的更多相关文章
- Python高阶用法总结
目录 1. lambda匿名函数 1.1 函数式编程 1.2 应用在闭包 2. 列表解析式 3. enumerate内建函数 4. 迭代器与生成器 4.1 迭代器 4.3 生成器 5. 装饰器 前言: ...
- Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
- Python中的高阶函数与匿名函数
Python中的高阶函数与匿名函数 高阶函数 高阶函数就是把函数当做参数传递的一种函数.其与C#中的委托有点相似,个人认为. def add(x,y,f): return f( x)+ f( y) p ...
- Python入门篇-高阶函数
Python入门篇-高阶函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.高级函数 1>.First Class Object 函数在Python中是一等公民 函数也 ...
- ASP.NET Core 6框架揭秘实例演示[33]:异常处理高阶用法
NuGet包"Microsoft.AspNetCore.Diagnostics"中提供了几个与异常处理相关的中间件,我们可以利用它们将原生的或者定制的错误信息作为响应内容发送给客户 ...
- python 常用的高阶函数
前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...
- python字符串反转 高阶函数 @property与sorted(八)
(1)字符串反转 1倒序输出 s = 'abcde' print(s[::-1]) #输出: 'edcba' 2 列表reverse()操作 s = 'abcde' lt = list(s) lt.r ...
- 说说 Python 中的高阶函数
高阶函数(higher-order function)指的是:接受一个函数为参数,或者把函数作为结果值返回的函数. 1 sorted() 比较常见的高阶函数是 sorted(),其内部的关键字参数 k ...
- Python学习笔记 - 高阶函数
高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下 ...
随机推荐
- uva 11806 Cheerleaders (容斥)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- VMware station 安装报错 failed to install the hcmon driver
VMware station 安装报错 failed to install the hcmon driver 1.将 C:\Windows\System32\drivers 下的hcmon.sys改名 ...
- HTML--CSS样式表--基本概念(超链接的状态)
样式表的基本概念 一.样式表的分类 1.内联样式表 和HTML联合显示,控制精确,但是可重用性差,冗余较多. 例:<p style="font-size:14px;"> ...
- P1087 N个数的最大公约数
题目描述 今天灵灵学习了使用欧几里得算法(即:辗转相除法)求解两个数的最大公约数.于是他决定用这个方法求解 \(N\) 个数的最大公约数. 输入格式 输入的第一行包含一个整数 \(N(1 \le N ...
- Ajax与PHP通信
以下是HTML的Js代码 $data = { va:$('#num').text() }; $.ajax({ type: 'POST', url: "A.php", data: $ ...
- H3C 链路聚合配置举例
- Jmeter完整Demo
1:创建一个线程组 2:添加一个cookie管理器 3:设置你的信息头管理器:application/json;text/plain;charset=UTF-8 44 4:添加一个用户参数,做全局变量 ...
- Linux 内核完成 urb: 完成回调处理者
如果对 usb_submit_urb 的调用成功, 传递对 urb 的控制给 USB 核心, 这个函数返回 0; 否则, 一个负错误值被返回. 如果函数成功, urb 的完成处理者(如同被完成函数指针 ...
- Linux 内核即插即用规范
一些新 ISA 设备板遵循特殊的设计规范并且需要一个特别的初始化顺序, 对增加接口板 的简单安装和配置的扩展. 这些板的设计规范称为即插即用, 由一个麻烦的规则集组成, 来建立和配置无跳线的 ISA ...
- ubuntu16.04 无法wifi链接一段时间掉线且无法再连接
ubuntu16.04 无法wifi链接一段时间掉线且无法再连接,从网上搜索的确认这个一个bug. 解决方法: 1.Get details of your PCI wireless card by r ...