python 闭包

python 闭包

  1. 闭包

    1
    定义: 一个包含"环境变量"取值的函数对象.是一种组织代码的结构,提高了代码的重复使用性
  2. 代码示例

    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:
    [root@dev test]# cat col1.py
    #!/usr/bin/env python
    # coding:utf-8

    def line_conf(): # 定义了一个函数line_conf()
    def line(x): # 定义了一个子函数
    return 2*x + 1 # 子函数输出结果
    return line # 将子函数line()作为对象返回

    my_line = line_conf() # 先调用line_conf(),返回line()对象 赋值给my_line
    print(my_line(5)) # 打印my_line函数对象,并传入参数5

    [root@dev test]# python col1.py
    11


    //示例2:
    [root@dev test]# cat col2.py
    #!/usr/bin/env python
    # coding:utf-8

    def line_conf():
    b = 15 # 函数内部定义b
    def line(x):
    return 2*x + b # 这里的b引用的是函数内部定义的b,而不是函数外部的b
    return line # 返回函数对象
    b = 5 # 函数外部定义b
    my_line = line_conf()
    print(my_line(5))

    [root@dev test]# python col2.py
    25

    //示例3:
    [root@dev test]# cat col3.py
    #!/usr/bin/env python
    # coding:utf-8

    def line_conf():
    b = 15
    def line(x):
    return 2*x + b
    return line
    b = 5
    my_line = line_conf()
    print(my_line.__closure__) # __closure__是闭包的意思,打印元组
    print(my_line.__closure__[0].cell_contents) # 打印闭包元组的第0号元素的cell_contents元素.说明我们闭包的第0号元素是闭包的环境变量

    [root@dev test]# python col3.py
    (<cell at 0x7f6b98a8e670: int object at 0x1e6a018>,)
    15

    //示例4:
    [root@dev test]# cat col4.py
    #!/usr/bin/env python
    # coding:utf-8

    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),line2(5))

    [root@dev test]# python col4.py
    (6, 25)