python基础6—(高阶,匿名,偏)函数 | 装饰器

这里比较的高级了, 学到这里感觉有点意思,但是也看到了和其他语言相通点

 高阶函数  可以把别的函数作为参数传入的函数叫高阶函数
def add(x, y, f):
    return f(x) + f(y)
add(-5, 6, abs)         # 11

# 匿名函数  python使用lambda来创建匿名函数
sum = lambda arg1, arg2 : arg1 + arg2
sum(10, 20) # 30 

# reduce 内建函数是个二元操作函数, 用来将一个数据集合所有数据进行二元操作
# 先对集合第1,2 个数据进行func()操作,得到的结果与第三个数据用func()运行,如此最后得到一个结果
# 顾名思义就是reduce将一个list缩成一个值
from functools import reduce
l = [1,2,3,4,5]
print(reduce(lambda x, y: x-y , 1))
# x 开始的时候赋值为10, 然后依次
print(reduce(lambda x, y: x-y, l, 10))

# map 应用于每一个可迭代的项返回一个结果list,map函数会把每一个参数都以相应的处理函数进行迭代处理
# 本质就是将原有的list根据lambda法则变成另一个list
l = [1, 2, 3]
new_list = list(map(lambda i: i+1, l))
# 变成了 [2, 3, 4]

l2 = [4, 5, 6]
new_list = list(map(lambda x, y : x + y, l, l2))
# 变成了 [5, 7, 9]

# filter 对序列进行过滤处理
l = [100, 20, 24, 50, 110]
new = list(filter(lambda x : x < 50 , l))
# [20, 24]

# 装饰器  和测试方法中的@before @test @end 类似  可以带参 和 多个装饰器
# 简单来说,你处理一个方法时需要统一做某件事
from functools import wraps

def makeHtmlTag(tag, *args, **kwds):
      def real_decorator(fn):             # fn is hello()
            css_class = " class=‘{0}‘".format(kwds["css_class"])             if "css_class" in kwds else ""
            def wrapped(*args, **kwds):
                  return "<" + tag + css_class + ">" + fn(*args, **kwds) + "</"+tag+">"
            return wrapped
      return real_decorator

@makeHtmlTag(tag="b", css_class="bold_css")
@makeHtmlTag(tag="i", css_class="italic_css")
def hello():
    return "hello world"

print(hello())
# <b class=‘bold_css‘><i class=‘italic_css‘>Hello World</i></h>
# 这里包了俩层 b为最外面的那层,i为中间层

# 高效率的递归  这里有个问题就是输入60会超过整数范围从而报错
from functools import wraps
from datetime import  datetime
def memo(fn):
      cache= {}
      miss= object()

      @wraps(fn)
      def wrapper(*args):
            result = cache.get(args, miss)
            if result is miss:
                  result = fn(*args)
                  cache[args] = result
            return result
      return wrapper

@memo
def fib(n):
      if n<2:
            return n
      return fib(n-1) + fib(n-2)

start = datetime.now()
print(fib(40))          # 102334155
end = datetime.now()
print((end - start).microseconds)   # 71061

def fib2(n):
      if n<2:
            return n
      return fib2(n-1) + fib2(n-2)
start1 = datetime.now()
print(fib2(40))         # 102334155
end1 = datetime.now()
print((end1 - start1).microseconds)  # 641741

# 偏函数 只设置一部分参数
int(‘123455‘)            # 默认转化为10进制
int(‘123456‘, base 8)                      # 8进制
int(‘123456‘, base 16)                            # 16进制

# 为了方便不需要每次都输入多少进制的值
def int2(x, base=2):
    return int(x, base)

# 借助functools.partial来创建一个偏函数
import functools
int2 = functools.partial(int, base=2)
print(int2(‘1000000‘))

# 传字典可以默认参数
kw = {‘base‘: 2}
print(int(‘10010‘, **kw))

# 传list
args = (10, 5, 6, 7)
print(max(*args))

原文地址:https://www.cnblogs.com/zeroones/p/8329501.html

时间: 2024-10-12 18:57:02

python基础6—(高阶,匿名,偏)函数 | 装饰器的相关文章

Python自动化运维之6、函数装饰器

装饰器: 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大.装饰器一般接受一个函数对象作为参数,以对其进行增强 装饰器本身是一个函数,用于装饰其他函数 功能:增强被装饰函数的功能 装饰器是一个闭包函数是嵌套函数,通过外层函数提供嵌套函数的环境 装饰器在权限控制,增加额外功能如日志,发送邮件用的比较多 装饰器知识准备一: >>> def f1(): ... print("hel

【python基础】高阶函数

一.定义 参数是一个函数的函数 ——> 高阶函数 二.高阶函数 1.abs(n) : 求n的绝对值,并返回给调用处 1 res1 = abs(-609) # 609 2.list.sort(key, reverse=False) : 将列表中的每个元素按照指定的规则排序;无返回值,将排序的结果直接作用于原列表 形参key的值是个函数, 这个函数用来指定列表排序的规则 这个函数必须要有一个参数, 这个参数就代表列表中的每个元素 这个函数必须要有一个返回值,这个返回值就是用来比较每个元素排序顺序的

Python基础【高阶函数】

高阶函数 map(fun,seq) 将seq中的元素依次作为参数传入fun,返回由函数返回值组成的新的列表.python3:返回一个map对象python2:返回列表可以用list将对象转换为列表进行调用 代码: def fun(a): return a+1 print(map(fun,[1,2,3,4,5])) print(list(map(fun,[1,2,3,4,5]))) 输出结果: filter(fun,seq) 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

【Python基础】高阶函数+函数嵌套+闭包 ==装饰器

高阶函数+函数嵌套+闭包 == 装饰器 一 什么是装饰器 二 装饰器需要遵循的原则 三 实现装饰器知识储备 四 高阶函数 五 函数嵌套 六 闭包 七 无参装饰器 八 装饰器应用示例 九 超时装饰器 参考: https://www.cnblogs.com/linhaifeng/articles/6140395.html https://www.cnblogs.com/haiyan123/p/8387769.html 原文地址:https://www.cnblogs.com/XJT2018/p/11

python基础知识7——迭代器,生成器,装饰器

迭代器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容

Python高阶函数与函数装饰器-day4

上节回顾 高阶函数 闭包函数 函数装饰器 模块导入 一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首先是Python3-->代码文件都是用utf-8来解释的.将代码和文件读到内存中就变成了Unicode,这也就是为什么Python只有encode没有decode了,因为内存中都将字符编码变成了Unicode,而Unicode是万国码,可以"

函数式编程 &amp; Python中的高阶函数map reduce filter 和sorted

1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型.在面向对象编程中,我们把对象传来传去,那在函数式编程中,我们要做的是把函数传来传去,而这个,说成术语,我们把他叫做高阶函数.飞林沙 2)特点 计算视为视为函数而非指令 纯函数式编程:不需变量,无副作用,测试简单(每次的执行结果是一样的) 支持高阶函数,代码简洁 2. python支持

python之6-2高阶函数

1. map函数 map(函数A,字符串或者列表) map函数的意思是将函数A依次作用到字符串的每个字符或者列表的每个元素. 例如: map(lambda x: x*x,[1,2]) [1, 4] 这里lambda是匿名函数,匿名函数的作用就是不用定义函数名. 格式:lambda 参数: exp 关于map函数,其实用的并不是太多,因为可以用列表解析来写,例如上面的等价于[x*x for x in range(1,3)] 2. reduce函数 reduce(函数A,字符串或者列表) reduc

python-函数&amp;高阶函数&amp;嵌套函数&amp;装饰器

学习随笔: 简单介绍: 函数:函数即变量高阶函数:1.把一个函数名当做一个实参传给一个参数 2.返回值中包含函数名嵌套函数:函数内部再次定义函数装饰器:装饰器就是函数,是为了给其他函数添加功能 原则上不能改变被装饰函数的源代码,不能修改装是函数的调用方式 高价函数+嵌套函数=装饰器 代码如下:1.函数 1 #函数 2 def foo(name):#定义一个函数 3 print('is this foo name:',name) 4 foo('FOO') #函数foo的调用 5 foo2=foo