Python函数式编程之闭包

-------------------------函数式编程之*******闭包------------------------
Note:
一:简介    函数式编程不是程序必须要的,但是对于简化程序有很重要的作用。    Python中一切都是对象,函数也是对象    a = 1    a = ‘str‘    a = func

二:闭包    闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+环境变量)    如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,    那么内部函数就被认为是闭包(closure),这个是最直白的解释!    而且这个变量的值不会被模块中相同的变量值所修改!

三:闭包的作用    少使用全局变量,闭包可以避免使用全局变量    可以实现在函数外部调用函数内部的值:    print(f.__closure__[0].cell_contents)    # 返回闭包中环境变量的值!    模块操作是不能实现的!CODE:
  1 # ----------------------------------------------#
  2 # 闭包
  3 # ----------------------------------------------#
  4 # 函数内部定义函数
  5
  6
  7 def curve_pre():
  8     def curve():
  9         print("抛物线")
 10         pass
 11     return curve
 12
 13
 14 # 不能直接调用函数内部的函数
 15 # curve()
 16 func = curve_pre()
 17 func()
 18
 19
 20 def curve_pre1():
 21     a = 25  # 环境变量a的值在curve1外部
 22
 23     def curve1(x):
 24         print("抛物线")
 25         return a * x ** 2
 26     return curve1       # 返回了的闭包
 27
 28
 29 f = curve_pre1()
 30
 31 result = f(2)
 32 print(result)
 33
 34 # 当在外部定义变量的时候,结果不会改变
 35 a = 10
 36 print(f(2))
 37
 38 print(f.__closure__)    # 检测函数是不是闭包
 39 print(f.__closure__[0].cell_contents)    # 返回闭包中环境变量的值!
 40
 41 # ----------------------------------------------#
 42 # 闭包的实例
 43 # ----------------------------------------------#
 44
 45
 46 def f1():
 47     m = 10
 48
 49     def f2():
 50         m = 20  # 局部变量
 51         print("1:", m)  # m = 20
 52     print("2:", m)      # m = 10
 53     f2()
 54     print("3:", m)      # m = 10,臂包里面的值不会影响闭包外面的值
 55     return f2
 56
 57
 58 f1()
 59 f = f1()
 60 print(f.__closure__)    # 判断是不是闭包
 61
 62 # ----------------------------------------------#
 63 # 闭包解决一个问题
 64 # ----------------------------------------------#
 65 # 在函数内部修改全局变量的值计算某人的累计步数
 66 # 普通方法实现
 67 sum_step = 0
 68
 69
 70 def calc_foot(step=0):
 71     global sum_step
 72     sum_step = sum_step + step
 73
 74
 75 while True:
 76     x_step = input(‘step_number:‘)
 77     if x_step == ‘ ‘:   # 输入空格结束输入
 78         print(‘total step is ‘, sum_step)
 79         break
 80     calc_foot(int(x_step))
 81     print(sum_step)
 82
 83 # 闭包方式实现----->少使用全局变量,闭包可以避免
 84
 85
 86 def factory(pos):
 87
 88     def move(step):
 89         nonlocal pos    # 修改外部作用域而非全局变量的值
 90         new_pose = pos + step
 91         pos = new_pose  # 保存修改后的值
 92         return pos
 93
 94     return move
 95
 96
 97 tourist = factory(0)
 98 print(tourist(2))
 99 print(tourist(2))
100 print(tourist(2))

 

原文地址:https://www.cnblogs.com/faithyiyo/p/9765577.html

时间: 2024-08-05 22:20:23

Python函数式编程之闭包的相关文章

Python 函数式编程(3) —— 闭包

内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure).闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变. 举例:希望一次返回3个函数,分别计算1x1,2x2,3x3:def count():    fs = []    for i in range(1, 4):        def f():            return i*i        fs.append(f)    pri

深入浅出 Python 函数式编程

1.函数式编程的定义与由来 如果程序中的函数仅接受输入并产生输出,即输出只依赖于输入,数据不可变,避免保存程序状态,那么就称为函数式编程(Functional Programming,简称FP,又称泛函编程). 这种风格也称声明式编程(Declarative Programming),与之相对的是指令式编程(Imperative Programming),后者中的对象会不断修改自身状态.函数式编程强调程序的执行结果比执行过程更重要,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算

Golang-函数式编程(闭包)

github:https://github.com/ZhangzheBJUT/blog/blob/master/closure.md 一 函数式编程概论 在过去近十年时间里,面向对象编程大行其道,以至于在大学的教育里,老师也只会教给我们两种编程模型,面向过程和面向对象.孰不知,在面向对象思想产生之前,函数式编程已经有了数十年的历史.就让我们回顾这个古老又现代的编程模型,看看究竟是什么魔力将这个概念在21世纪的今天再次拉入我们的视野. 随着硬件性能的提升以及编译技术和虚拟机技术的改进,一些曾被性能

我是如何开始去了解Python函数式编程--Python函数式编程初涉

Python函数式编程 1. 开始我们会了解什么是函数式编程: 函数:function 函数式:functional,一种编程范式 函数式编程特点:把计算视为函数而非指令,贴近计算 纯函数式编程:不需要变量,没有副作用,测试简单,支持高阶函数,代码简洁 Python支持的函数式编程特点: 不是纯函数式编程:允许有变量 支持高阶函数:函数也可以作为变量传入 支持闭包:有了闭包就能返回函数 有限度的支持匿名函数 2. 高阶函数 变量可以指向函数,函数名其实就是指向函数的变量,而高阶函数其实就是可以接

javaScript函数式编程-包含闭包、链式优化及柯里化

本文着重介绍个人理解的函数式编程. 函数式编程个人理解为:以函数为主要载体的编程方式. 好处: 语义更加清晰 可复用性高 可维护性好 作用域局限.副作用少 基本函数式编程: //实现数组中每个单词首字母大写 //一般写法 const arr = ['apple','orange','pear']; for(const i in arr) { const c = arr[i][0]; arr[i] = c.toUpperCase() + arr[i].slice(1); //slice()从已有的

【人生苦短 Python当歌】——Python函数式编程01

对Python有一定了解的人应该知道,Python并不是一门函数式编程语言,而是一门支持多种范式的语言,这也使得在Python中也能实现函数式编程, 对于学习到Python函数式编程的朋友,在这里推荐大家看一本名字叫<Python函数式编程>(Functional Programming in Python)从这本书中你应该能收获不少: 怎么说呢,函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就把复杂的任务分解成简单的任务,这种就称为面向过程的程序设

Python 函数式编程之迭代器、生成器及其应用

python 标准库中提供了 itertools, functools, operator三个库支持函数式编程,对高阶函数的支持,python 提供 decorator 语法糖. 迭代器 (iterator)和生成器(generator)概念是 python 函数式编程的基础,利用迭代器和生成器可以实现函数式编程中经常用到的 map(), filter(), reduce() 等过程以及 itertools, functools 中提供的绝大部分功能. 1.迭代器和生成器基础(next, ite

python函数式编程,列表生成式

1.python 中常见的集中存储数据的结构: 列表 集合 字典 元组 字符串 双队列 堆 其中最常见的就是列表,字典. 2.下面讲一些运用循环获取字典列表的元素 1 >>> dic={'name':'zhangsan','age':24,'city':'jinhua'} 2 >>> for key,value in dic.items(): 3 print(key,value) 4 5 6 name zhangsan 7 age 24 8 city jinhua 循环

Python 函数式编程学习

描述:通过将函数作为参数,使得功能类似的函数实现可以整合到同一个函数. Before 1 def getAdd(lst): 2 result = 0 3 for item in lst: 4 result += item 5 return result 6 7 def getMul(lst): 8 result = 1 9 for item in lst: 10 result *= item 11 return result 12 13 print getAdd([1,2,3,4]) 14 pr