28 闭包函数

141次阅读
没有评论

共计 1008 个字符,预计需要花费 3 分钟才能阅读完成。

引入

闭包函数其实是 名称空间与作用域 , 函数嵌套 , 函数对象 的综合运用

一. 什么是闭包函数

  • 闭 : 指的是定义在函数内部的函数

  • 包 : 闭函数引用了一个来自外层函数的变量

'总结一句话来说' : 定义在函数内部的函数, 并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

def outter():
     name='egon'
     def inner():
         print('my name is %s' %name)
     return inner  #注意不能加括号

f=outter()    #f=inner
  • 注意 : 作用域在函数定义阶段就规定死了, 与调用的位置无关
🎅定义阶段已经规定死了到 'outter' 下面的 "x" 去拿
def outter():
     x=2           
     def inner():
         # x=1
         print('from inner',x)

     return inner

🎅在全局里面定义也无效
 f=outter()  # f=inner
 print(f)
 x=11111111111111111
 f()  # 2

🎅把它装进一个函数, 在函数里面再定义也是无效的
 def foo():
     x=111111111111111111
     f()

 foo()  # 2

二. 为函数传值的方式

方式一 : 将值以参数的形式传入

import requests

🎅将 "url" 以参数的形式传入(也是最常用)
def get(url):
    response=requests.get(url)下载
    if response.status_code == 200:
        print(response.text)

get('https://www.baidu.com')
get('https://www.python.org')

方式二 : 以包的方式传入

🎅这是个获取网络源码的功能
import requests    

def outter(url):
    def get():
        response=requests.get(url)
        if response.status_code == 200:
            print(response.text)
    return get

baidu = outter('https://www.baidu.com')
baidu()

如果难以理解, 就来个精简版

def outter(x):
    def wrapper():
        print(x)    #按照查找的优先级去查找 "x"
    return wrapper  #吐出了函数 "wrapper" 的内存地址

f = outter(10)  #这里返回的值就是函数 "wrapper" 的内存地址, 赋值给 "f", 加括号就调用
f()  #10
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计1008字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)