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生成后放到内存中后面调用函数直接去内存取数
												

最新文章

  1. Highcharts 在低版本 IE 上使用注意事项及个人总结
  2. 图表插件使用汇总(echarts,highchairts)
  3. JavaWeb:Web与HTTP协议简介
  4. 做一个会PS切图的前端开发
  5. NodeJS中 package.json 解析
  6. three.js 之旅一
  7. 关于学习keynote
  8. HDU4526威威猫系列故事——拼车记(DP)
  9. xampp环境安装swoole
  10. HDU 1051:Wooden Sticks
  11. EasyuiAPI:布局
  12. SQL 经典应用
  13. 应用程序默认安装在C盘后启动时提示权限不足想起的。。。
  14. SSH2 No Session found for current thread原因
  15. Linux下部署tomcat及tomcat war包应用程序
  16. UVa 10817 校长的烦恼
  17. hdu 5066 小球碰撞(物理题)
  18. 常用工具软件之串口终端工具——SecureCRT和xshell
  19. 【BZOJ】1050: [HAOI2006]旅行comf(暴力+并查集)
  20. POJ1006:Biorhythms——题解

热门文章

  1. 设置和修改Linux的swap分区大小
  2. HDU--3466 Proud Merchants (01背包)
  3. vue 模版组件用法
  4. HBase 概念视图
  5. 在vue中使用pug
  6. JZOJ P5829 HZOI 20190801 A string 线段树
  7. vue.js_05_vue.js的过滤器
  8. Android SDK上手指南:下一步学习方向
  9. 深入浅出 Java Concurrency (10): 锁机制 part 5 闭锁 (CountDownLatch)[转]
  10. PLSQL直接通过客户端连接远程