zoukankan      html  css  js  c++  java
  • 10,*args **kwargs 函数的命名空间。

    用户传入到函数中的实参数量不定时,或者是为了以后拓展,
    此时要用到动态参数*args,**kwargs(万能参数。)

    *args(接受的是所有的位置参数)

    以元组的形式返回给函数调用者。

    **kwargs(接收的是所有的关键字参数)

    以字典的形式,返回给函数调用者。

    **dict 将字典的键值对添加到kwargs字典中。

    *可迭代对象(str,list,tuple,list,dict(key))每一个元素添加到args元组中。

    print不能接受**kwargs的关键字参数。

    # 在有多种类型的在形参接受数据的时候,位置参数必须在前面,默认参数必须在后面,关键字参数要遵循位置参数
    def func2(a,b,*args,sex=''):
        print(a)
        print(b)
        print(args)
        print(sex)
    
    func2(1,2,'f','g','s',sex='')
    def func2(a,b,*args,sex='',age=20,**kwargs):
        print(a)
        print(b)
        print(args)
        print(sex)
        print(age)
        print(kwargs)
    func2(1,2,4,5,6,7,8,x=6,y=5,name='alex')
    计算传参计算出数值
    def sum1(*args):
        ret = 0
        for i in args:
            ret += 1
        return ret
    
    d = sum1(1,2,3,)
    print(d)
    打印出args  和kwargs的格式
    def func1(*args,**kwargs):
        print(args)
        print(kwargs)
    func1()
    将列表,字典融合一个列表
    def func1(*args,**kwargs):
        print(args)
        print(kwargs)
    l1 = [1, 2, 3]
    l2 = [11, 21, 32]
    dic = {'name':'alex','age':18}
    dicc = {'na':'ex','a':18}
    func1(*l1,*l2,**dic,**dicc)

    在函数的执行时,*是用来打散,**也是打散。

    def func3(*args,**kwargs):
        
        print(args)
        print(kwargs)
    l1 = [1, 2, 3]
    l2 = [11, 21, 32]
    func3(*l1,*l2)
    def func3(*args,**kwargs):
    
        print(args)
        print(kwargs)
    # l1 = [1, 2, 3]
    # l2 = [11, 21, 32]
    l1 = {'name':'dddd','ddff':18}
    l2 = {'ne':'dd','df':1}

    什么是命名空间?

    命名空间就是,我们给在内存中存放变量与值得对应关系的空间,叫做命名空间。

    命名空间一共分为三种:

    1,全局命名空间

    代码在运行开始,创建的存储,变量与值得关系,的空间叫做全局命名空间。

    2,局部命名空间

    在函数的运行中,开辟了临时的空间叫做局部命名空间。临时空间没有特殊的含义下,不能被全局变量引用。

    3,内置命名空间

    内置命名空间中存放了python解释器为我们提供的函数,例如:input,list,print,tuple......他们都是我们拿过来直接可用的内置函数。

    命名空间的加载与取值顺序?

    加载python文件时候,内置命名空间(程序运行前加载)——全局命名空间:从上到下加载--——局部命名空间(程序运行中,调用时候才加载)

    取值顺序?

    在局部调用:局部命名空间——全局命名空间——内置命名空间。

    在全局调用:全局命名空间——内置命名空间。

    取值顺序(单项):局部名称空间(函数执行时)——全局命名空间——内置命名空间

    执行顺序:local——eclose——global——built-in

    当程序运行时,代码从上至下一次读取,遇到变量与值,
    他会在内存中开辟一个空间,存放变量与值的内存地址的对应关系。
    这样存储变量与值得对应关系的空间叫做名称空间(命名空间)。
    当解释器遇到函数时,他会将函数名存储在内存中,但是对于函数体莫不关心。
    当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个
    临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做临时名称空间。

    count = 1

    def func1():
    print(count)
    func1()
    局部作用域可以对全局作用域的变量进行引用。

    count = 1
    # 函数内部如果有变量名与全局变量名相同且对此变量进行改变,
    # Python 就会将你引用的那个变量视为局部定义的变量,但是局部没定义,
    # 则他会报错。
    # def func1():
    #     count1 = count + 1
    #     print(count)
    # func1()
    #
    # def func1():
    #     count = 3
    #     def inner():
    #         count = count + 1
    #     inner()
    #     print(count)
    # func1()

    作用域 global 和 nonlocal 

    作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

    全局作用域:包含内置名称空间,全局名称空间,在整个文件的任意位置都能被应用,全局有效。

    局部作用域:局部名称空间,只能在局部范围内生效。

    global

      1声明一个全局变量。

      2在局部作用域想要对全局作用域的全局变量进行修改时,需要用到golbal(限于字符串,数字)

    1,定义一个global,在局部作用域中,声明一个全局变量。
    2,在局部作用域中,更改一个全局变量。

    3,对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
    global:
    def func1():
        global name
        name = 'alex'
    func1()
    name = '老男孩'
    print(name)
    1,定义一个global,在局部作用域中,声明一个全局变量。
    2,在局部作用域中,更改一个全局变量。
    对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.

    nolocal:

    不能改变一个全局变量。

    在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下变量全部发生改变。

    def func1():
        name = 'alex'
        print(name) #alex
        def inner():
            nonlocal name
            name = '老男孩'
            print(name)#老男孩
        inner()
        print(name) #老男孩
    func1()
    def add_b():
        b = 42
        def do_global():
            b = 10
            print(b)
            def dd_nonlocal():
                nonlocal b
                b = b + 20
                print(b)
            dd_nonlocal()
            print(b)
        do_global()
        print(b)
    add_b()
  • 相关阅读:
    iOS堆栈-内存-代码在据算机中的运行
    iOS self和super的区别
    php代码优化
    缓存雪崩现象解决方案
    缓存失效
    分布式memcache
    Linux下编译安装Memcache
    windows 下安装 php-memcached 扩展
    Linux下安装 php-memcache 扩展
    缓存之文件缓存
  • 原文地址:https://www.cnblogs.com/ZJGG/p/9019907.html
Copyright © 2011-2022 走看看