动态参数,作用域,闭包

*args

接收的是所有的位置参数

**kwargs

接收的是所有的关键字参数

def func1(*args, **kwargs):  #*聚合成元祖  **聚合成字典
    print(*args)         # *吧元祖分散
    print(kwargs)        # kwargs不能分散

func1(1, 2, 3, x=4, y=5, z=6)

    *的魔性用法

def func3(*args,**kwargs):  # 函数的定义 *用意是聚合。
    print(args)
    print(kwargs)

l1 = [1, 2, 3]
l2 = [11, 21, 32]
s1 = 'fjskalgf'
s2 = 'fjskrrrf'
tu1 = (1, 2, 3)
tu2 = (11, 22, 33)
func3(*l1, *tu1, *s2)

 

作用域

        当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个
临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做临时名称空间。

全局作用域:内置名称空间,全局名称空间
局部作用域:局部名称空间

 

global
1,声明一个全局变量。
2,更改一个全局变量。
nonlocal
1,不能改变一个全局变量。

 

判断name的先后顺序
name = "lala"
def func():
    def func1():
        name ="feifei"
    def func2():
        nonlocal name
        name = "minzai"
    def func3():
        global name
        name = "xiaohui"
        print(name)
    name = "huihui"
    func1()
    print(name)
    func2()
    print(name)
    func3()
    print(name)
print(name)
func()
print(name)

 

闭包

内层函数对外层函数非全局变量的引用就叫闭包

判断是不是闭包 函数名.__closure__

 

闭包有什么用?

      当执行一个函数时,如果解释器判断此函数内部闭包存在,这样
Python就一个机制,闭包的所在的临时名称空间不会随着函数的执行完毕而消失。

 

posted @ 2018-05-15 15:32  爱灰灰的灰灰  阅读(160)  评论(0编辑  收藏  举报