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()为例,调用该函数用以下 ...
随机推荐
- 阿里云DataWorks正式推出Stream Studio:为用户提供大数据实时计算的数据中台
5月15日 阿里云DataWorks正式推出Stream Studio,正式为用户提供大数据的实时计算能力,同时标志着DataWorks成为离线.实时双计算领域的数据中台. 据介绍,Stream St ...
- LOJ6079「2017 山东一轮集训 Day7」养猫
养ImmortalCO k可重区间问题 的增强版:有上下界! 直接都选择s[i],然后再把一些调整到e[i] 考虑通过最大流的“最大”,使得至少每k个有me个e, 通过最大流的“上界”,限制每k个最多 ...
- 模板—点分治B(合并子树)(洛谷P4149 [IOI2011]Race)
洛谷P4149 [IOI2011]Race 点分治作用(目前只知道这个): 求一棵树上满足条件的节点二元组(u,v)个数,比较典型的是求dis(u,v)(dis表示距离)满足条件的(u,v)个数. 算 ...
- HZOI 可怜与超市
网上搜不着,八成又是哪个学长留下的…… 因为考试第二题我们都好不容易才搞懂,学长有给我们扔了几道类似的题. 其实这道题思路挺好想的,就是一些细节还有复杂度比较难弄,好难调啊. 看到题的第一眼以为是树形 ...
- 如何用phpmyadmin导入大容量.sql文件,直接使用cmd命令进行导入
很多使用php+mysql建站的站长朋友们,经常要用到phpMyAdmin数据库管理工具备份和恢复数据库,当站点运行很久的时候,MySQL数据库会非常大,当站点碰到问题时,需要使用phpMyAdmin ...
- hdu 1384 Intervals (差分约束)
Problem - 1384 好歹用了一天,也算是看懂了差分约束的原理,做出第一条查分约束了. 题意是告诉你一些区间中最少有多少元素,最少需要多少个元素才能满足所有要求. 构图的方法是,(a)-> ...
- 十分钟学会 Fiddler
一.Fiddler介绍 Fiddler是一个http抓包改包工具,fiddle英文中有"欺骗.伪造"之意,与wireshark相比它更轻量级,上手简单,因为只能抓http和http ...
- CSS像素设置为整数,渲染结果像素带有小数
今天进行网页设计学习时,CSS代码设计width:300px,但实际显示像素如下图所示为199.99px. 最后发现是浏览器运用了缩放,恢复100%的缩放后,像素显示为整数.
- js获取当前时间戳以及前一天时间戳
js获取当前时间戳以及前一天时间戳(毫秒) var timestamp = (new Date()).getTime(); console.log(timestamp);//打印当前时间戳 conso ...
- 什么是HOOK技术
https://zhidao.baidu.com/question/50557962.html HOOK技术是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息 ...