返回顶部
首页 > 资讯 > 后端开发 > Python >Python函数式编程之闭包
  • 872
分享到

Python函数式编程之闭包

函数Python 2023-01-30 22:01:51 872人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

-------------------------函数式编程之*******闭包------------------------ Note: 一:简介 函数式编程不是程序必须要的,但是对于简化程序有很重要的作用。 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))

 

 

--结束END--

本文标题: Python函数式编程之闭包

本文链接: https://lsjlt.com/news/179889.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python函数式编程之闭包
    -------------------------函数式编程之*******闭包------------------------ Note: 一:简介 函数式编程不是程序必须要的,但是对于简化程序有很重要的作用。 Python...
    99+
    2023-01-30
    函数 Python
  • python函数进阶之闭包函数
    目录闭包函数什么是闭包函数判断是否是闭包函数\__closure__cell_contents闭包函数的特点闭包函数的意义闭包函数 什么是闭包函数 如果内函数使用了外函数的局部变量,...
    99+
    2024-04-02
  • 闭包在Golang函数式编程中的重要性
    闭包在 go 函数式编程中至关重要,因为它提供了以下优势:信息隐藏:闭包保护外部变量不被修改。代码复用:闭包分离状态信息和函数行为。函数定制:闭包可以传递函数作为参数,定制其行为。 闭...
    99+
    2024-04-16
    golang 函数式编程 作用域
  • Python函数式编程之lambda表达
    一:匿名函数的定义 lambda parameter_list: expression二:三元表达式 条件为真时返回的结果 if 条件判断 else 条件为假的时候返回的结果三:map map(func(arg1, ar...
    99+
    2023-01-30
    函数 Python lambda
  • Python函数式编程之装饰器
    原则:对修改是封闭的,对扩展是开放的,方法:一般不修改函数或者类,而是扩展函数或者类一:装饰器 允许我们将一个提供核心功能的对象和其他可以改变这个功能的对象’包裹‘在一起, 使用装饰对象的任何对象与装饰前后该对象的交互遵循完全...
    99+
    2023-01-30
    函数 Python
  • day16-python之函数式编程匿名
    1.复习 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 name = 'alex' #name=‘lhf’ 4 def change_name(): 5 name...
    99+
    2023-01-31
    函数 python
  • Golang函数式编程:探索Lambda和闭包的概念
    在 golang 中,使用 lambda 表达式实现函数式编程:lambda 表达式:匿名函数,传递函数作为参数,用于简化高阶函数的使用;闭包:从包围函数捕获数据的函数,访问创建环境中的...
    99+
    2024-05-12
    golang 函数式编程
  • ​​​​​​​Python 入门学习之函数式编程
    目录前言把函数作为对象把对象作为函数数据结构内的函数把函数作为参数和返回值嵌套函数单表达式函数(Lambda 表达式)Map、Filter 和 ReduceMapFilterRedu...
    99+
    2024-04-02
  • Python 函数式编程
    lambda表达式 以lambda开头 紧跟一定的参数(如果有的话) 参数后用冒号和表达式主题隔开 只是一个表达式,所以,没有return # 计算一个数字的100倍数 stm = lambda x: 100 * x stm(89...
    99+
    2023-01-30
    函数 Python
  • Python函数式编程之返回函数实例详解
    目录看代码:用filter函数来计算素数用Python高阶函数来实现这个算法:高阶函数实现打印小于100的素数:总结 高阶函数除了可以接受函数作为参数外,还可以把函数作为结...
    99+
    2024-04-02
  • 详解Python函数式编程之装饰器
    目录一、装饰器的本质:函数闭包(functionclosure):二、装饰器使用方法:保留函数参数和返回值的函数闭包:三、多个装饰器的执行顺序:四、创建带参数的装饰器:总结一、装饰器...
    99+
    2024-04-02
  • python编程之函数思想
    #!/usr/bin/python ##Filename: game.py from sys import exit from random import randint def death():   quips = ["1-dead"...
    99+
    2023-01-31
    函数 思想 python
  • Python函数式编程之面向过程面向对象及函数式简析
    目录Python 函数式编程同一案例的不同写法,展示函数式编程面向过程的写法面向对象的写法接下来进入正题,函数式编程的落地实现Python 函数式编程的特点纯函数Python 函数式...
    99+
    2024-04-02
  • 闭包函数
    目录 什么是闭包?(掌握) 两种为函数传参的方式 闭包函数的应用(掌握) 回顾: 函数对象:可以将...
    99+
    2023-01-31
    函数
  • Python闭包函数的用法
    本篇内容主要讲解“Python闭包函数的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python闭包函数的用法”吧!简而言之, 闭包的特点就是内部函数引用了外部函数中的变量。 在Pytho...
    99+
    2023-06-02
  • python中函数总结之装饰器闭包详解
    1、前言 函数也是一个对象,从而可以增加属性,使用句点来表示属性。 如果内部函数的定义包含了在外部函数中定义的对象的引用(外部对象可以是在外部函数之外),那么内部函数被称之为闭包。 2、装饰器 装饰器就是包...
    99+
    2022-06-04
    详解 函数 python
  • ​​​​​​​Python入门学习之函数式编程的方法
    本篇内容介绍了“Python入门学习之函数式编程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言在 Python 中,函数是「头等公...
    99+
    2023-06-30
  • golang函数闭包在并发编程中的应用
    闭包是 go 中允许函数访问外部变量的特性,在并发编程中很有用。通过闭包,协程可以安全共享数据和传值。闭包在并发编程中的常见应用包括:共享数据,无需同步机制。协程之间传值,即使值在闭包闭...
    99+
    2024-04-23
    闭包 并发编程 golang 作用域 同步机制
  • Python函数二(函数名,闭包,迭代器
    函数名的使用: 函数名可以作为值,赋值给变量。 函数名可以作为参数传参给函数。 函数名可以作为返回值。 函数名可以作为元素存储在容器里。 闭包:在嵌套函数内,使用外层局部变量(非全局变量)就是一个闭包,闭包可以多层嵌套。闭包的优点: ...
    99+
    2023-01-30
    函数 迭代 Python
  • python闭包函数有什么用
    python中闭包函数的作用有以下几点闭包函数自带函数作用域,查找变量只会找内部函数外面的那一层。闭包函数自带延迟计算状态,可以延迟执行某个函数,需要执行时将返回结果赋值即可。闭包函数可以让函数始终保持一种状态。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作