Python3 基础:返回函数和匿名函数
2016-12-28 22:06
387 查看
返回函数
返回函数顾名思义:就是返回值是函数.内部函数可以引用外部函数的参数和局部变量.
def lazy_sum(*args): def sum(): all = 0 for x in args: all = all + x return all return sum print(lazy_sum(1,3,5,7)) print(lazy_sum(1,3,5,7)()) # 输出结果 <function lazy_sum.<locals>.sum at 0x7f2f4d1b26a8> 16
上面的函数:第一个输出结果是一个函数引用.第二个输出才是最终我们想要的结果.这就说明:返回函数返回的是指向sum函数的变量,当调用sum()的时候内部函数才真正的执行了.
还有一点需要注意的是:每次调用lazy_sum函数都会返回一个新的函数,即使传入的参数相同.
闭包
大家看这段代码:def count(): fs = [] for i in range(1, 4): print(i) def f(): return i*i fs.append(f) return fs f1, f2, f3 = count()
你运行一下你会发现,输出的结果是1,2,3 内部函数在调用的时候才运行.那么当你调用f1(),f2(),f3()时输出的结果全部都是9.你肯定知道为啥了.因为调用了count(),i已经为3了,而内部的f()此时还没有执行,当它执行时i = 3,所以输出的都是9.
那么,应该怎么修改呢?看代码:
def count(): fs = [] def f(j): def g(): return j*j return g for i in range(1, 4): print(i) fs.append(f(i)) return fs f1, f2, f3 = count()
返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
匿名函数
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。举个例子:
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6])) [1, 4, 9, 16, 25, 36]
关键字
lambda表示匿名函数,冒号前面的x表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
相关文章推荐
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
- python基础——返回函数
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
- python入门基础函数和匿名函数
- Python基础-高级-返回函数
- Python学习3--返回函数 、匿名函数、装饰器、偏函数
- Python 函数式编程(高阶函数、把函数作为参数、map()函数、reduce()函数、filter()函数、自定义排序函数、函数返回函数、闭包、匿名函数、装饰器decorator)
- Python3基础 Python的函数都有返回值 无指定返回值的函数 返回NONE对象
- python学习之---匿名函数,返回函数,偏函数
- Python自定义函数基础:获取函数单返回值和多返回值
- python学习笔记,返回函数,匿名函数,装饰器
- pyhotn3入门基础-14 返回函数和匿名函数
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
- Python返回函数_函数闭包_lambda匿名函数
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
- python函数基础:嵌套函数、作用域、匿名函数、高阶函数、递归函数
- Python学习入门基础教程(learning Python)--2.3.4Python函数返回值
- python基础之高阶函数、匿名函数 、装饰器,文件的读写