python中一切皆对象,函数也看做对象。函数被函数名所引用,但是同样的他也可以被其他标识符所引用,可以作为参数传递。

def f():
return "hi"

可见a引用了函数返回值,b引用了函数本身,a不可调用,b可调用。而函数作为参数,即引用函数本身,下面的装饰器就是以函数作为参数,引用的函数本身,而不是返回值。

常用的几个内建函数Map,Reduce,Filter,lamda。

Filter

筛选出满足过滤条件的元素

s = "@431$%$314&6i7(431)^&^%2l#%^i6861642k765e&$%65%^$^#$p%^&*%66757y%*^&%th%*&^%&^$o$&*^n4637"
print filter(str.isalpha,s)

Map

  接收两个参数,第一个是函数,第二个是list,返回结果

l = [random.randint(0,100) for i in range(10)]

def sub50(a):
return a-50 print map(sub50,l)

Reduce

和map一样接收两个参数,但是他返回一个结果,会迭代第二个参数list,不停的计算。

# 1+2+3+...+99
def f_add(a,b):
return a+b
print reduce(f_add,range(1,100))

  python3中Reduce被从全局命名空间中移除,要想使用需要--from functools import reduce,在函数式中reduce所表达的概念称为规约fold。

这里的map reduce和大数据中的map reduce不是一回事。

Lambda

lambda就是一个匿名函数,在需要一个函数,但是不用费力起名字的时候用lambda.

map(lambda x:x*x, [x for x in range(10)])
##等价于
def pf(x):
return x * x map(pf, [x for x in range(10)])

map,filter,reduce并没有列表解析容易理解,3里面返回的是一个iterator而不再是一个list。

回调 CallBack 也即函数作为参数,运行到callback()返回上一层

闭包closure

绑定外部变量的函数

闭包和装饰器 都是函数作为返回值

def pow_x(x):
def echo(value):
return value**x
return echo lst = [pow_x(2),pow_x(3),pow_x(4)]
for p in lst:
print "closure",p(2)

1.嵌套函数

2.内部函数用了外部变量

3.外部函数返回了内部函数

如果外部变量是list,是可以改变的。但是只是一个变量,是无法改变的。

函数内部要注意LEGB原则,有局部变量的时候,就不再调用外部变量。

装饰器decorator

装饰就是在原有函数的基础上,加一些其他的功能,他是函数作为返回值,函数作为参数的一种应用。

多层嵌套就是用了闭包,被修饰函数作为绑定量。

两层嵌套结构

目标函数可以带参数

def time_cost(f):
def _f(*arg, **kwarg):
start = time.clock()
a=f(*arg,**kwarg)
end = time.clock()
print f.__name__,"run cost time is ",end-start
return a
return _f @time_cost
def list_comp(length):
return [(x,y) for x in range(length) for y in range(length) if x*y > 25] if __name__ == '__main__':
list_comp(1000)

  

三层嵌套结构

不仅目标函数可以带参数,装饰器也可以带参数

递归

递归就是1)函数自己调用自己2)有明确的出口。常用于Fibonacci数列,树图的遍历等数据或是结构上定义为递归的情况。递归和循环是等价的。

递归的次数过多,会造成栈溢出,并且Python并不支持尾递归优化。

#字符串取反
def reverse_str(s):
if len(s) <= 1:
return s
else:
return reverse_str(s[1:]) + s[0]

  

Python笔记(2)函数的更多相关文章

  1. Python:笔记(2)——函数与模块

    Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...

  2. python笔记之函数

    函数 >>> def funTest(param1): ... 'this is function document string.' #正文需要有缩进 ... return par ...

  3. python笔记22-literal_eval函数处理返回json中的单双引号

    前言 在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常 ...

  4. python笔记4 - 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...

  5. Python笔记008函数(2)

    1.        昨日内容回顾: def 函数(): 函数体 return 值 如果不写return,默认返回None.可以单独返回一个值,也能够以元组的形式返回多个值.(不要把print和retu ...

  6. python笔记-字符串函数总结

    字符串函数: chr() 数字转ASCII chr(96)="a" ord() ASCII转数字 ord("a")=96 isspace() 判断是否为空格 s ...

  7. Python笔记:调用函数,带扩号和和不带括号的区别

    调用函数,如果带括号,那么是调用函数运行后的结果, 调用函数不带括号,调用的是函数本身 例如: def cun (a,b): return a+b print(cun) : 调用函数,打印的是函数 p ...

  8. Python笔记-built-in函数,文件操作,lambda函数

    Built-In: i = abs(123) print(i) j = abs(-123) print(j)#123#123 #all,需要传一个可迭代的东西,里面所有的值是真,返回真 r1 = al ...

  9. 【python笔记】Qt+云函数 实现简单的登录框制作

    [python笔记]Qt+云函数 实现简单的登录框制作 备注:前置条件:QtDesigner.pycharm.PyQt5.配置好的云函数(百度的叫函数计算CFC,用来充当一个简陋的服务器,主要是免费) ...

  10. Python学习笔记7-把函数当参数传递、指定可变参数

    把函数当参数传递 # 函数参数传递 # 面向对象编程就是把对象传来传去 # 面向函数编程就是把函数传来传去 def mytest(num): return num * 2 # # 不光可以传递变量,还 ...

随机推荐

  1. #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

    郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...

  2. 一个页面实例化两个ueditor编辑器,同样的出生却有不同的命运

    今天遇到一个比较怪异的问题,有一项目需要在同一个页面上展现两个ueditor编辑器,在展现时并不任何问题,但当点击了“保存”按钮时就出错了,有其中一个ueditor在asp.net中无法获取编辑器的值 ...

  3. Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

    Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般 ...

  4. JVM之Parallel Scavenge收集器

    新生代收集器,复制算法,并行收集,面向吞吐量要求(吞吐量优先收集器). 吞吐量=用户代码运行时间/(用户代码运行时间+垃圾回收时间) -XX:MaxGCPauseMillis:控制最大垃圾收集停顿时间 ...

  5. 从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下

    阅读目录 序 将查询的结果写入文件系统 集群数据迁移一 集群数据迁移二 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephis ...

  6. Mongodb基本数据类型、常用命令之增加、更新、删除

    1.null---表示空值或者该字段不存在,如{"name":null} 2.布尔 --- 和java中的布尔一样,有两种:true,false,如{"sex" ...

  7. HTML基本组成结构与标签的认识

    HTML基本组成结构与标签 其实组成结构用一张图来简单了解下如下 目前一般网站的结构是会如此不是很清晰简单 先来说说header头部 这样是不是更加清楚了 导航栏是引导用户查看网站内容的快捷入口,打个 ...

  8. TFS 升级错误一则 TF400654

    升级后报 [错误] TF400654: 无法配置规划工具.以下元素包含错误: BugWorkItems/BugWorkItems.TF400506: 此元素将定义表示 Bug 或缺陷的工作项的状态.每 ...

  9. 3、DNS服务器功能(正向、反向解析)

    实验目的: 建立gr.org域的主名称服务器.解析: 名称 IP 用途 ns.gr.org        192.168.170.3          名称服务器 www.gr.org     192 ...

  10. Leetcode: plus one

    June 22, 2015 Given a number represented as an array of digits, plus one to the number. Leetcode: pl ...