iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3 闭包
  • 236
分享到

python3 闭包

2023-01-31 01:01:23 236人浏览 薄情痞子

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

摘要

1. 函数引用def test1(): print("--- in test1 func----") #调用函数 test1() #引用函数 ret = test1 print(id(ret)) print(id(test1

1. 函数引用

def test1():
    print("--- in test1 func----")

#调用函数
test1()

#引用函数
ret = test1

print(id(ret))
print(id(test1))

#通过引用调用函数
ret()

运行结果:

--- in test1 func----
140212571149040
140212571149040
--- in test1 func----

2. 什么是闭包

#定义一个函数
def test(number):

    #在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
    def test_in(number_in):
        print("in test_in 函数, number_in is %d"%number_in)
        return number+number_in
    #其实这里返回的就是闭包的结果
    return test_in


#给test函数赋值,这个20就是给参数number
ret = test(20)

#注意这里的100其实给参数number_in
print(ret(100))

#注意这里的200其实给参数number_in
print(ret(200))

运行结果:


in test_in 函数, number_in is 100
120

in test_in 函数, number_in is 200
220

3. 闭包再理解

内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。

# closure.py

def counter(start=0):
    count=[start]
    def incr():
        count[0] += 1
        return count[0]
    return incr

启动python解释器

>>>import closeure
>>>c1=closeure.counter(5)
>>>print(c1())
6
>>>print(c1())
7
>>>c2=closeure.counter(100)
>>>print(c2())
101
>>>print(c2())
102
nonlocal访问外部函数的局部变量(python3)
def counter(start=0):
    def incr():
        nonlocal start
        start += 1
        return start
    return incr

c1 = counter(5)
print(c1())
print(c1())

c2 = counter(50)
print(c2())
print(c2())

print(c1())
print(c1())

print(c2())
print(c2())

4. 看一个闭包的实际例子:

def line_conf(a, b):
    def line(x):
        return a*x + b
    return line

line1 = line_conf(1, 1)
line2 = line_conf(4, 5)
print(line1(5))
print(line2(5))

这个例子中,函数line与变量a,b构成闭包。在创建闭包的时候,我们通过line_conf的参数a,b说明了这两个变量的取值,这样,我们就确定了函数的最终形式(y = x + 1和y = 4x + 5)。我们只需要变换参数a,b,就可以获得不同的直线表达函数。由此,我们可以看到,闭包也具有提高代码可复用性的作用。

如果没有闭包,我们需要每次创建直线函数的时候同时说明a,b,x。这样,我们就需要更多的参数传递,也减少了代码的可移植性。

闭包思考:

1.闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成
2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

--结束END--

本文标题: python3 闭包

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3 闭包
    1. 函数引用def test1(): print("--- in test1 func----") #调用函数 test1() #引用函数 ret = test1 print(id(ret)) print(id(test1...
    99+
    2023-01-31
  • python3--函数名本质,函数嵌套,闭包,装饰器
    python函数的嵌套和作用域链函数的嵌套调用def max2(x,y):     m = x if x > y ...
    99+
    2023-01-30
    函数 嵌套 本质
  • Python3程序打包
    使用cxfreeze将python3源码打包成为应用程序。1、下载最新4.3.4cxfreeze.whl后,修改后缀为.zip。2、提取其中3个子文件夹3、安装cx_Freeze-4.3.3.win-amd64-py3.4.msi程序4、将...
    99+
    2023-01-31
    程序
  • Python3之模块、包
    一、模块 1.模块的导入方式 import random,time #导入多个模块 #使用,如:random.randint(1,10) #使用,如:time.sleep(1) from random import randin...
    99+
    2023-01-31
    模块
  • Python3 序列解包
    Python 中有很多很实用的语法糖,这些语法糖可以帮助我们简化代码、更易理解等优点,接下里再看一个 Python3 中特别实用的语法序列解包(序列解包是 Python 3.0 之后才有的语法)。那什么是序列解包呢?先看一个例子:>...
    99+
    2023-01-31
    序列
  • python3打包脚本
    安装pip python3版本默认没有安装pip。复制get-pip.py的内容:https://bootstrap.pypa.io/get-pip.py在python环境下运行。 C:\python36>python.exe ge...
    99+
    2023-01-31
    脚本
  • 闭包
    返回函数不可以引用后续可能会发生变化的变量 如果引用,则返回函数的返回值是基于变量最新的值计算而得的 如循环变量i,如果返回函数体内用到了i,则i的值是最后一次循环的i的值 使用示例   返回函数引用循环变量   def count(...
    99+
    2023-01-31
  • 【Python3】Python模块与包
    一、模块导入 1. 定义 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个...
    99+
    2023-01-31
    模块 Python
  • python3-socket黏包现象
    黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls-l;pwd;dir)注释:import subprocess # dir为需要执行的命令(win下) # shell=True 可以写...
    99+
    2023-01-30
    现象 socket
  • python 闭包
    这里主要讲解我对于闭包的理解,不太深入,浅谈浅谈哈 1、说到闭包我就想先说函数名与变量之间的区别 def test(name): def test_in(): print(name) print(loca...
    99+
    2023-01-30
    python
  • python闭包
    闭包    1,闭包是嵌套在函数中的    2,闭包是内层函数对外层函数的变量的引用(改变)    3,闭包需要将其作为一个对象返回,而且必须逐层返回闭包举例:    def wrapper():        name = "ghl"  ...
    99+
    2023-01-31
    python
  • php 闭包
    一、概念说明 通常定义php函数时,都会指定一个函数名,这样的函数可以称为具名函数,但实际上PHP也支持定义没有函数名的函数,这类函数被称为闭包,也叫匿名函数,其本质是 Closure 类对象,类摘要...
    99+
    2023-09-02
    php 开发语言
  • python---闭包
    1.闭包理解 闭包定义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包 2.必报的构成条件: 在函数嵌套(函数里面在定义函数)的前提下 内部函数使用了外部函...
    99+
    2023-09-02
    python numpy 开发语言 Powered by 金山文档
  • Python3常用库依赖包
    文章目录1.flask_restful依赖文件 1.flask_restful依赖文件 aniso8601 pytz 2018.7 six ...
    99+
    2023-01-31
    常用
  • Python闭包与闭包陷阱举例详解
    目录1 什么是闭包2 闭包示例代码3 什么是闭包陷阱4 闭包陷阱代码实例4.2 第二组代码实例总结1 什么是闭包 在 Python 中,闭包是一种特殊的函数,它能够记住它所在的环境(...
    99+
    2023-01-28
    python中闭包的概念 python闭包详解 Python闭包
  • 闭包函数
    目录 什么是闭包?(掌握) 两种为函数传参的方式 闭包函数的应用(掌握) 回顾: 函数对象:可以将...
    99+
    2023-01-31
    函数
  • python闭包,count()
    ...
    99+
    2023-01-31
    python count
  • 谈谈自己的理解:python中闭包,闭包
    闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~请大家跟我理解一下,如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。闭包:   在一个外函...
    99+
    2023-01-31
    自己的 python 中闭包
  • python3-字典中包含字典
    # Auther: Aaron Fan#定义字典及内容av_catalog = {    "欧美":{        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],        "www.pornhu...
    99+
    2023-01-31
    字典
  • 分享JavaScript闭包
    本篇内容主要讲解“分享JavaScript闭包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分享JavaScript闭包”吧!  1. 概述  闭包(clos...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作