码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习---匿名函数和闭包的学习

时间:2018-07-28 18:19:36      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:fir   als   存储   运算   link   nbsp   闭包函数   计算机   pre   

1.1. 匿名函数

名函数的命名规则:  用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。 因为lamdba在创建时不需要命名,所以,叫匿名函数 

add = lambda a, b: a * b
print(add(2, 3))    #  6

 

1.2. 函数式编程和命令式编程

我们常见的编程范式有命令式编程(Imperative programming),函数式编程

常见的面向对象编程是也是一种命令式编程。

命令式编程是面向计算机硬件的抽象,有变量(对应着存储单元),赋值语句(获取,存储指令),表达式(内存引用和算术运算)和控制语句(跳转指令),一句话,命令式程序就是一个冯诺依曼机指令序列
函数式编程是面向数学的抽象,将计算描述为一种表达式求值,一句话,函数式程序就是一个表达式

函数式编程关心数据的映射,命令式编程关心解决问题的步骤

1.3. 闭包

定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).

简单讲就是 闭包 = 函数块(内部函数) + 定义内部函数时的(外部)环境变量

# def outer(x):  # 当这个x变量作为一个形参传入进来的时候,都相当于内部函数的外部变量
def outer():
    x = 19
    def inner():
        print(x)
    return inner
# yy = outer(100) # yy()执行的结果就是100,道理相同
xx = outer()   # outer()已经执行完成了
xx()           # 19  为什么outer已经执行完了,但是inner()还可以取到x=10值呢?
               # 闭包(closure)!outer里return的inner是一个闭包函数,有x这个环境变量。
outer()()      # 19
# inner()      #  name ‘inner‘ is not defined  作用域是local
# print(x)     #  name ‘x‘ is not defined   作用域local

Python学习---匿名函数和闭包的学习

标签:fir   als   存储   运算   link   nbsp   闭包函数   计算机   pre   

原文地址:https://www.cnblogs.com/ftl1012/p/9382652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!