1 函数

1.1 函数即变量

  函数定义:把一个函数体作为变量赋值给一个函数名,同时函数体存放到内存中。

  函数调用:根据函数名去内存中寻找对用的函数体,找到了就执行。

>>> def bar():
...     pass
...
>>> bar
<function bar at 0x006BE930>
#只写函数名,打印了对应函数体的内存地址。bar()加括号,表示调用。

  

1.2 高阶函数

   把函数名作为变量实参传给另一个函数

def bar(func):
    print(func)
    func()

def foo():
    print('in foo')

bar(foo)
>>>
<function foo at 0x004BB6F0>
in foo
#调用bar函数,将foo函数名传参,打印foo的内存地址,然后执行foo函数。

  函数返回值为函数

def bar(func):
    start = time.time()
    func()
    stop = time.time()
    print('cost time %f s' %(stop-start))
    return func

def foo():
    print('in foo')
    time.sleep(3)

foo = bar(foo)

foo()
#首先运行bar(foo),在bar函数体内调用foo,然后返回foo的内存地址,赋值给foo,再运行foo。

1.3 嵌套函数

在一个函数内再次声明一个def func()

def timer(func):
    def bar():
        start = time.time()
        func()
        stop = time.time()
        print('cost time %f s' %(stop-start))
    return bar

def foo1():
    print('in foo1')
    time.sleep(3)
def foo2():
    print('in foo2')
    time.sleep(3)

foo1=timer(foo1)
foo2=timer(foo2)

foo1()
foo2()
#bar函数里会调用传入原函数,然后bar的内存地址会赋值给原函数名。
#foo1=timer(foo1)这一步就相当于在函数前写@timer

  

2 装饰器

  装饰器本质是函数,用于装饰其他函数,为其他函数添加功能。

  特点是不需要修改原函数代码和调用方式。就是说,对原函数,无法感知装饰器的存在,依旧按照自己的逻辑运行。

def timer(func):
    def bar():
        start = time.time()
        func()
        stop = time.time()
        print('cost time %f s' %(stop-start))
    return bar

@timer
def foo1():
    print('in foo1')
    time.sleep(3)
@timer
def foo2():
    print('in foo2')
    time.sleep(3)

foo1()
foo2()

  以上为原函数没有参数时可用,而原函数有多少参数是未知的,所以在装饰函数的嵌套函数bar里需要填非固定参数*args,**kwargs。

def timer(func):
    def bar(*args,**kwargs):
        start = time.time()
        func(*args,**kwargs)
        stop = time.time()
        print('cost time %f s' %(stop-start))
    return bar

@timer
def foo1(arg):
    print('in %s' %(arg))
    time.sleep(3)
@timer
def foo2(arg):
    print('in %s' %(arg))
    time.sleep(3)

foo1('foo1')
foo2('foo2')

  

python高级函数的更多相关文章

  1. Python—高级函数

    Python-高级函数 一.闭包 Python函数是支持嵌套的.如果在一个内部函数中对外部函数作用域(非全局作用域)的变量进行引用,那么内部函数就会被称为闭包.闭包需要满足如下3个条件: 存在于两个嵌 ...

  2. python 高级函数

    高级函数 map 格式:map(func, lt) 说明:接受两个参数,一个函数和一个可迭代对象,返回一个生成器,将func依次作用于lt 示例: l = [1,2,3,4,5]​def double ...

  3. Python高级函数--map/reduce

    名字开头大写 后面小写:练习: def normalize(name): return name[0].upper() + name[1:].lower() L1 = ['adam', 'LISA', ...

  4. Python高级函数--filter

    def is_palindrome(n): return str(n) == str(n)[::-1] #前两个‘:’表示整个范围,‘-’表示从后面,‘1’表示数据间隔 output = filter ...

  5. python高级之函数

    python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多 ...

  6. 第一篇:python高级之函数

    python高级之函数   python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没 ...

  7. Python函数式编程(一):高级函数

    首先有一个高级函数的知识. 一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数. def add(x, y, f): return f(x) + f(y) 当我们调用add(-, , abs ...

  8. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  9. python高级特性和高阶函数

    python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...

随机推荐

  1. MeiTuanLocateCity

    https://github.com/eltld/MeiTuanLocateCity

  2. Beijing Bus

    Search: http://bjgj.aibang.com:8899 https://github.com/sp-chenyang/bus https://github.com/leavind/Co ...

  3. 关于数组类型的json解析方法

    遇到了非常奇葩的数组类型的json,一时解析不出来,用jsonObject会直接报错. Json数据如: [{"id":"1000142","name ...

  4. java设计模式----迭代器模式和组合模式

    迭代器模式: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 设计原则: 单一责任:一个类应该只有一个引起变化的原因 组合模式: 允许你将对象组合成树形结构来表现“整体/部分” ...

  5. mt7620 wifi driver

    <*> Ralink RT2860 802.11n AP support [*] LED Support [*] WSC (WiFi Simple Config) [*] WSC 2.0( ...

  6. 禅道——Linux服务器部署禅道

    前言 2019年6月14日 22:01:24 看看时间我知道,我离猝死依然不远~ 禅道是什么 | 禅道是专业的研发项目管理软件 禅道的官网 | https://www.zentao.net/ 禅道开源 ...

  7. Docker安装 人生第一次

    Ubuntu 系列安装 Docker 通过系统自带包安装 Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装. $ sudo apt-get update $ sudo a ...

  8. hdu2063 二分图(基础题)

    这个题目适合刚刚接触二分图的同学做哦: 给一个题目链接 点击打开链接. 题目大意,有K个男女匹配方式, 输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数.0 ...

  9. pymssql读取varchar字段中文显示乱码的问题分析

    问题 用python的pymssql模块读取旧业务系统后台SQL Server 2000数据库展示数据为乱码 开发环境 操作系统:windows 8 数据库 MS SQL Server 2000,默认 ...

  10. HDU-5551 Huatuo's Medicine

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission( ...