zoukankan      html  css  js  c++  java
  • 闭包

    内层函数对外层函数中的变量的使用

    好处:
    1. 保护变量不被侵害
    2. 让一个变量常驻内存

    如何通过代码查看一个闭包
    __closure__: 有东西就是闭包. 没东西就不是闭包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    # 闭包的优点:
    #   1, 可以保护变量不被其他人侵害
    #   2, 保持一个变量常驻内存
     
    # def wrapper():
    #     a = "哈哈" # 不安全的一种写法
    #     name = "周杰伦"
    #     def inner():
    #         print(name) # 在内层函数中使用了外层函数的局部变量
    #         print(a)
    #     def ok():
    #         nonlocal a
    #         a = 108
    #         print(a)
    #     return inner  # 返回函数名
    #
    # ret = wrapper()
    # ret()
    #
    # def ok():
    #     global a
    #     a = 20
    #     print(a )
     
     
     
    # def wrapper():
    #     name = "周杰伦" # 局部变量常驻与内存
    #     def inner():
    #         print(name) # 在内层函数中使用了外层函数的局部变量
    #     return inner  # 返回函数名
    #     # inner()
    #
    # ret = wrapper() # ret是一个内层函数
    # ret() # ret是inner, 执行的时机是不确定的, 必须保证里面的name必须存在
     
     
    # 超级简易版爬虫
    # from urllib.request import urlopen # 导入一个模块
    # # 干掉数字签名
    # import ssl
    # ssl._create_default_https_context = ssl._create_unverified_context
    #
    #
    # def func():
    #     # 获取到网页中的内容, 当网速很慢的时候. 反复的去打开这个网站. 很慢
    #     content = urlopen("https://www.dytt8.net/").read()
    #
    #     def inner():
    #         return content.decode("gbk") # 网页内容
    #     return inner
    #
    # print("开始网络请求")
    # ret = func() # 网络请求已经完毕
    # print("网络请求完毕")
    # print("第一次", ret()[5])
    # print("第二次", ret()[5]) #
     
     
     
    def wrapper():
        name = "alex"
        def inner():
            print("胡辣汤")
        print(inner.__closure__) # 查看是否是闭包. 有内容就是闭包, 没有内容就不是闭包
        inner()
     
    wrapper()
  • 相关阅读:
    [SSRS] Use Enum values in filter expressions Dynamics 365 Finance and Operation
    Power shell deploy all SSRS report d365 FO
    display method in Dynamics 365 FO
    How To Debug Dynamics 365 Finance and Operation
    Computed columns and virtual fields in data entities Dynamics 365
    Azure DevOps for Power Platform Build Pipeline
    Create readonly entities that expose financial dimensions Dynamics 365
    Dataentity call stack dynamics 365
    Dynamics 365 FO extension
    Use singletenant servertoserver authentication PowerApps
  • 原文地址:https://www.cnblogs.com/heheda123456/p/10204725.html
Copyright © 2011-2022 走看看