python高级函数
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高级函数的更多相关文章
- Python—高级函数
Python-高级函数 一.闭包 Python函数是支持嵌套的.如果在一个内部函数中对外部函数作用域(非全局作用域)的变量进行引用,那么内部函数就会被称为闭包.闭包需要满足如下3个条件: 存在于两个嵌 ...
- python 高级函数
高级函数 map 格式:map(func, lt) 说明:接受两个参数,一个函数和一个可迭代对象,返回一个生成器,将func依次作用于lt 示例: l = [1,2,3,4,5]def double ...
- Python高级函数--map/reduce
名字开头大写 后面小写:练习: def normalize(name): return name[0].upper() + name[1:].lower() L1 = ['adam', 'LISA', ...
- Python高级函数--filter
def is_palindrome(n): return str(n) == str(n)[::-1] #前两个‘:’表示整个范围,‘-’表示从后面,‘1’表示数据间隔 output = filter ...
- python高级之函数
python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多 ...
- 第一篇:python高级之函数
python高级之函数 python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没 ...
- Python函数式编程(一):高级函数
首先有一个高级函数的知识. 一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数. def add(x, y, f): return f(x) + f(y) 当我们调用add(-, , abs ...
- Day11 Python基础之装饰器(高级函数)(九)
在python中,装饰器.生成器和迭代器是特别重要的高级函数 https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...
- python高级特性和高阶函数
python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...
随机推荐
- MeiTuanLocateCity
https://github.com/eltld/MeiTuanLocateCity
- Beijing Bus
Search: http://bjgj.aibang.com:8899 https://github.com/sp-chenyang/bus https://github.com/leavind/Co ...
- 关于数组类型的json解析方法
遇到了非常奇葩的数组类型的json,一时解析不出来,用jsonObject会直接报错. Json数据如: [{"id":"1000142","name ...
- java设计模式----迭代器模式和组合模式
迭代器模式: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 设计原则: 单一责任:一个类应该只有一个引起变化的原因 组合模式: 允许你将对象组合成树形结构来表现“整体/部分” ...
- mt7620 wifi driver
<*> Ralink RT2860 802.11n AP support [*] LED Support [*] WSC (WiFi Simple Config) [*] WSC 2.0( ...
- 禅道——Linux服务器部署禅道
前言 2019年6月14日 22:01:24 看看时间我知道,我离猝死依然不远~ 禅道是什么 | 禅道是专业的研发项目管理软件 禅道的官网 | https://www.zentao.net/ 禅道开源 ...
- Docker安装 人生第一次
Ubuntu 系列安装 Docker 通过系统自带包安装 Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装. $ sudo apt-get update $ sudo a ...
- hdu2063 二分图(基础题)
这个题目适合刚刚接触二分图的同学做哦: 给一个题目链接 点击打开链接. 题目大意,有K个男女匹配方式, 输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数.0 ...
- pymssql读取varchar字段中文显示乱码的问题分析
问题 用python的pymssql模块读取旧业务系统后台SQL Server 2000数据库展示数据为乱码 开发环境 操作系统:windows 8 数据库 MS SQL Server 2000,默认 ...
- HDU-5551 Huatuo's Medicine
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission( ...