【python之路20】函数作为参数
2024-09-06 13:10:49
1、函数可以作为参数
1)函数名相当于变量指向函数
2)函数名后面加括号表示调用函数
#!usr/bin/env python
# -*- coding:utf-8 -*- def f1(args):
print(args)
def f2(args):
args('你好')
print("hello") #f1与变量的作用是相同的指向f1函数
#f1() 表示执行函数
f2(f1) #打印出你好 hello
3)内置函数filter()的实现方法
#!usr/bin/env python
# -*- coding:utf-8 -*-
def MyFilter(fun,sq):
result = []
for i in sq:
bol = fun(i)
if bol:
result.append(i)
return result def f1(x):
return x>30 r = MyFilter(f1,[11,22,33,44,55])
print(r) #结果返回[33, 44, 55]
4)内置函数map()的实现方法
#!usr/bin/env python
# -*- coding:utf-8 -*-
def MyMap(fun,seq):
li = []
for i in seq:
li.append(fun(i))
return li
def f1(x):
return x+100 re = MyMap(f1,[11,22,33])
print(re) #打印输出[111, 122, 133]
2、闭包
1)内层函数调用了外层函数的变量叫闭包,可以让一个局部变量常驻内存
def func():
name = "sun" def inner():
print(name) #内层函数调用了外层函数的变量叫闭包,可以让一个局部变量常驻内存 return inner fun = func()
fun() #结果返回sun,那么这个函数所用到的name,会常驻内存,当函数调用的时候直接返回
2)闭包的应用
from urllib.request import urlopen
def but():
content = urlopen("http://www.baidu.com").read()
def inner():
# 在函数中使用了外部变量,属于闭包,那么对inner函数来说content常驻内存,随用随取
return content
print(inner.__closure__) #如果返回内容则表示是闭包函数
return inner fn =but() #执行but函数,返回inner函数,并把inner返回给fn
con1 = fn() #调用inner函数,不再去加载网站
print(con1)
con2 = fn() #调用inner函数,不再去加载网站
print(con2)
内层函数调用了外层函数的变量叫闭包,可以让一个局部变量常驻内存
import time def getNum():
li = [i for i in range(100000000)]
def inner():
return li
return inner t0 = time.clock() fun1 = getNum()
t1 = time.clock()
print(t1 - t0) fun2 = fun1()
t2 = time.clock()
print(t2 - t1) fun3 = fun1()
t3 = time.clock()
print(t3 - t2) # 结果输出:
# 9.215686900000001
# 0.00221929999999837
# 3.0999999999892225e- # 说明li生成后放到内存中后面调用函数直接去内存取数
最新文章
- Highcharts 在低版本 IE 上使用注意事项及个人总结
- 图表插件使用汇总(echarts,highchairts)
- JavaWeb:Web与HTTP协议简介
- 做一个会PS切图的前端开发
- NodeJS中 package.json 解析
- three.js 之旅一
- 关于学习keynote
- HDU4526威威猫系列故事——拼车记(DP)
- xampp环境安装swoole
- HDU 1051:Wooden Sticks
- EasyuiAPI:布局
- SQL 经典应用
- 应用程序默认安装在C盘后启动时提示权限不足想起的。。。
- SSH2 No Session found for current thread原因
- Linux下部署tomcat及tomcat war包应用程序
- UVa 10817 校长的烦恼
- hdu 5066 小球碰撞(物理题)
- 常用工具软件之串口终端工具——SecureCRT和xshell
- 【BZOJ】1050: [HAOI2006]旅行comf(暴力+并查集)
- POJ1006:Biorhythms——题解
热门文章
- 设置和修改Linux的swap分区大小
- HDU--3466 Proud Merchants (01背包)
- vue 模版组件用法
- HBase 概念视图
- 在vue中使用pug
- JZOJ P5829 HZOI 20190801 A string 线段树
- vue.js_05_vue.js的过滤器
- Android SDK上手指南:下一步学习方向
- 深入浅出 Java Concurrency (10): 锁机制 part 5 闭锁 (CountDownLatch)[转]
- PLSQL直接通过客户端连接远程